uc/OS II——多任务设计

uc/OS II——多任务设计

(1)设计 开始任务

1】/声明 开始任务 任务块

static  OS_STK App_TaskStartStk[APP_TASK_START_STK_SIZE];

【2】在app_cfg.h中

//设置任务的优先级
#define  APP_TASK_START_PRIO 2//开始任务为优先级2
//设置任务块大小
#define  APP_TASK_START_STK_SIZE 128

【3】编写 任务函数

//开始任务函数
static  void App_TaskStart(void* p_arg)
{
   (void) p_arg;//防止编译警告
   //初始化ucos时钟节拍
   OS_CPU_SysTickInit();//自己编写的函数
//使能ucos 的统计任务
#if (OS_TASK_STAT_EN > 0)
   //----统计任务初始化函数  
   OSStatInit();            
#endif
   //建立其他的任务
/*
创建其他任务
*/
   while (1)
   {
      //1秒一次循环
  OSTimeDlyHMSM(0, 0,1, 0);
   }
}
【4】在main函数中创建开始任务
OSTaskCreate(
App_TaskStart, 
(void *)0, 
&App_TaskStartStk[APP_TASK_START_STK_SIZE - 1], 
APP_TASK_START_PRIO); 

(2)其他任务函数编写

1】设置优先级和任务块大小

//设置任务的优先级
#define  APP_TASK_LED1_PRIO 8//开始任务为优先级2
//设置任务块大小
#define  APP_TASK_LED1_STK_SIZE 128

【2】编写任务函数

void Task_Led1(void* p_arg)
{
  (void) p_arg;     
  while (1)
  {
    Led_On(LED1);
    OSTimeDlyHMSM(0, 0, 0, 500);
    Led_Off(LED1);
    OSTimeDlyHMSM(0, 0, 0, 500);
  }
}

【3】在开始任务中 创建

OSTaskCreateExt(
Task_Led1,//指向任务代码的指针
(void *)0,//任务开始执行时,传递给任务的参数的指针
(OS_STK *)&Task_Led1Stk[APP_TASK_LED1_STK_SIZE-1],//分配给任务的堆栈的栈顶指针 从顶向下递减
APP_TASK_LED1_PRIO,//分配给任务的优先级
APP_TASK_LED1_PRIO,//预备给以后版本的特殊标识符,在现行版本同任务优先级
(OS_STK *)&Task_Led1Stk[0],//指向任务堆栈栈底的指针,用于堆栈的检验
APP_TASK_LED1_STK_SIZE,//指定堆栈的容量,用于堆栈的检验
(void *)0,//指向用户附加的数据域的指针,用来扩展任务的任务控制块
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);//选项,指定是否允许堆栈检验,是否将堆栈清0,任务是否要进行浮点运算等等。


你可能感兴趣的:(ucosii,多任务建立)