目录
UCOSIII控制块与堆栈
应用实例
//任务优先级 #define START_TASK_PRIO 3 //任务堆栈大小 #define START_STK_SIZE 128 //任务控制块 #define StartTaskTCB //任务堆栈 CPU_STK START_TASK_STK[START_STK_SIZE]; //任务函数 void start_task(void *p_arg);
UCOSIII系统初始化和启动
应用实例
int main(void) { OS_ERR err; CPU_SR_ALLOC(); ................//其他函数初始化 OSInit(&err); //初始化UCOSIII OS_CRITICAL_ENTER(); //进入临界区(关中断) ...............//创建开始任务 OS_CRITICAL_EXIT(); //退出临界区(开中断) OSStart(&err); //开启UCOSIII }
UCOSIII任务创建
OSTaskCreate()函数
作用:任务控制块、任务堆栈、任务代码等联系在一起,并初始化任务控制块的相应字段
位置: os_task.c中定义
调用:
void OSTaskCreate(OS_TCB *p_tcb,//指向任务的任务控制块OS_TCB CPU_CHAR *p_name,//指向任务的名字,每个任务有不同的名字 OS_TASK_PTR p_task,//执行任务代码,任务函数名 void *p_arg, //传递给任务的参数 OS_PRIO prio, //任务优先级(0,1,2优先级不可使用) CPU_STK *p_stk_base, //指向任务堆栈的基地址 CPU_STK_SIZE *stk_limit, //任务堆栈最大深度,防止堆栈溢出 CPU_STK_SIZE *stk_size, //任务堆栈的大小 OS_MSG_QTY q_size, //可选内部消息队列,使用需定义OS_CFG_TASK_Q_EN>0 OS_TICK time_quanta, // 轮转时间=time_quanta*时间长度 void *p_ext, //指向用户补充的存储区 /*四个选项*/ /* OS_OPT_TASK_NONE //没有任何选项 OS_OPT_TASK_STK_CHK //指定是否允许检测该任务的堆栈 OS_OPT_TASK_STK_CLR //指定是否清除该任务的堆栈 OS_OPT_TASK_SAVE_FP //指定是否存储浮点寄存器 */ OS_OPT opt, OS_ERR *p_err //用来保存函数返回的错误码 )
应用实例:
OSTaskCreate((OS_TCB * )&Task1_TaskTCB, (CPU_CHAR * )"Task1 task", (OS_TASK_PTR )task1_task, (void * )0, (OS_PRIO )TASK1_TASK_PRIO, (CPU_STK * )&TASK1_TASK_STK[0], (CPU_STK_SIZE)TASK1_STK_SIZE/10, (CPU_STK_SIZE)TASK1_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )0, (void * )0, (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, (OS_ERR * )&err);
UCOSIII任务删除
OSTaskDel()函数
作用:用来删除任务,当一个任务不需要运行时可利用此函数删掉
位置: os_task.c中定义
调用:
void OSTaskDel( OS_TCB *p_tcb, // 删除任务TCB,也可以传递NULL指针删除自身函数 OS_ERR *p_err //返回的错误码)
删除自身任务块:
OSTaskDel((OS_TCB*)0,&err); //删除任务自身
删除指定任务块:
OSTaskDel((OS_TCB*)&Task2_TaskTCB,&err); //删除指定任务