问题描述:
uc/os中任务创建
问题解决:
创建一个任务,任务从无到有。任务创建函数分两种,
一种是基本的创建函数OSTaskCreate,
另一种是扩展的任务创建函数OSTaskCreateExt。
着重讲解OSTaskCreate。
创建任务OS_TaskCreat。
堆栈初始化函数OSTaskStkInit的一个版本
操作系统任务状态转换图
注:
OSTaskStkInit() 初始化堆栈
OS_TCBInit() TCB初始化
注:
在OS_TCBInit函数中初始化了任务优先级以及TCB其他信息
注:
如上设置了当前任务的OSTCBBitX和OSTCBBitY
注:
如上设置当前就绪任务链以及任务优先级
OS_Shed解释
注:
通过本函数,可以找出优先级最高的任务
通过OSUnMapTbl[]获取任务优先级:
其中 0为最高优先级,63为最低优先级,因此查找优先级最高的任务,使用的是优先级判定表OSUnMapTbl[],OSUnMapTbl[]表中的数值表示的是一个8bit的数据最低位为1的位置,例如:1000 0000 最低位为1的位置是在第7位,那么OSUnMapTbl[128]的值就是7;1000 0010 最低位为1的位置是在第1位,那么OSUnMapTbl[130]的值就是1;
通过OS_ScheNew可以获取最高优先级OSPrioHighRdy,然后进行调度
注:
以上详细讲解了ucos任务创建的流程,注意任务创建过程中可能存在任务调度(最高优先级程序切换)