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,任务是否要进行浮点运算等等。