您的位置:首页 > 其它

uc/os ii,完全注释。第一篇(环境VC6.0)

2016-09-29 22:45 183 查看


移植好的vc6.0环境的uc/os ii下载地址
/*******************************说明*****************************************/
/*本例意在说明创建任务的主要过程,以一个最简单的事例演示给大家。
     
每一秒钟打印一个M。
Auther:bestboyxie;
2012年4月2日
*/
/***************************************************************************/
#include
"includes.h"
#define  TASK_STK_SIZE   512   //任务堆栈长度,、
OS_STK  
MyTaskStk[TASK_STK_SIZE];  //定义任务堆栈区,有几个任务就定义几个,每个任务分配一个。
          //堆栈主要是为了存储任务相关的数据,指针等,方便任务切换时的断点保存于恢复
void 
MyTask(void *data);   //声明任务
/************************主函数*********************************************/
void 
main (void)
{
    char* s_M="M";    //定义要显示的字符
    OSInit();     //初始化uCOS_II,每次创建任务必须调用这个函数。
   
OSTaskCreate(MyTask,   //创建任务MyTask,MyTask为函数名
  s_M,    //给任务传递参数,可以为任意类型的指针,但是使用时别忘记强制类型转换。
  &MyTaskStk[TASK_STK_SIZE
-
1],//设置任务堆栈栈顶指针,要根据存储器的大小端来定。大小端含义请百度
  0);    //使任务MyTask的优先级别为0,任务优先级0-63其中63
62被系统使用。最大值在OS_LOWEST_PRIO中指出
    OSStart();     //启动uCOS_II的多任务管理;
}
/***********************任务MyTask*******************************************/
void  MyTask (void
*pdata)//任务定义的参数只能是void类型的。至于两个任务之间的参数传递。可以参看信号量,消息邮箱一节
{
 
    pdata =
pdata; //这一句主要是为了防止某些编译器出错,为了证明pdata已经使用了。
    OSStatInit();
//初始化uCOS_II的统计任务,创建任务必须调用。
while(1)   
//将你要写得函数写成一个死循环。
 {
  printf((char*)pdata);
  OSTimeDlyHMSM(0, 0, 1,
0); //等待,延时处理。这个时候可以切换到其他函数中执行,此时相当于任务被挂起。
 }
}
/*总结*/
/*
分享:软件工程的思想:为方便程序移植,一般情况下,任务之间的参数传递不要使用全局变量。
快速开发经验:有些非创造性的、规则性的函数不用一句一句的写。
能copy就copy。但是copy前提是你懂copy的东西是干什么的。
要善于利用已经编写好的程序进行移植。
任务创建的步骤
一、定义任务堆栈。
二、调用OSTaskCreate函数、其中有四个参数。

 
1.被创建的函数的函数名,
  2.传递给函数的参数
  3.任务堆栈的栈顶指针。注意大小端问题:与处理器有关。
 
4.任务的优先级。每次发生任务切换的时候总是处于就绪态最高优先级的任务得以执行。处理延时的任务是非就绪态的。
 

三、调用OSStart();要想任务开始执行,必须调用这个函数。
四、任务的定义。
注意几点:

  1.函数的名字必须与你OSTaskCreate函数中的第一个参数相同。
 
2.函数的参数必须为void*类型的。
  3.
 pdata = pdata;
//这一句主要是为了防止某些编译器出错,为了证明pdata已经使用了。
    OSStatInit();
//初始化uCOS_II的统计任务,创建任务必须调用。
 这两句话不要忘记加哦
  4.OSTimeDlyHMSM(0, 0, 1,
0);函数也要加哦,不然其他函数就不能运行了。因为任务切换是发生在这个函数当中的。
 
使用中,要实现计算好到底要延时多长时间,也就是该任务多长时间执行一次。
 
5.OSTaskCreate函数也可以在任务函数中调用。
 )
好了,创建任务就完成了,可以试着编写两个以上的任务咯。
例如:创建三个任务分别显示x
y z ;显示时间的间隔分别是1 2 3 秒;试一试很简单的额。
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: