uc/os任务创建

时间:2023-05-14 20:08:56

问题描述:

     uc/os中任务创建

问题解决:

创建一个任务,任务从无到有。任务创建函数分两种,

一种是基本的创建函数OSTaskCreate,

另一种是扩展的任务创建函数OSTaskCreateExt。

着重讲解OSTaskCreate。

    创建任务OS_TaskCreat。

    堆栈初始化函数OSTaskStkInit的一个版本

uc/os任务创建

                        操作系统任务状态转换图

uc/os任务创建

注:

    OSTaskStkInit()        初始化堆栈

    OS_TCBInit()             TCB初始化

uc/os任务创建

注:

    在OS_TCBInit函数中初始化了任务优先级以及TCB其他信息

uc/os任务创建

注:

    如上设置了当前任务的OSTCBBitX和OSTCBBitY

uc/os任务创建

注:

    如上设置当前就绪任务链以及任务优先级

uc/os任务创建

OS_Shed解释

uc/os任务创建

注:

    通过本函数,可以找出优先级最高的任务

    通过OSUnMapTbl[]获取任务优先级:

uc/os任务创建

其中 0为最高优先级,63为最低优先级,因此查找优先级最高的任务,使用的是优先级判定表OSUnMapTbl[],OSUnMapTbl[]表中的数值表示的是一个8bit的数据最低位为1的位置,例如:1000 0000 最低位为1的位置是在第7位,那么OSUnMapTbl[128]的值就是7;1000 0010 最低位为1的位置是在第1位,那么OSUnMapTbl[130]的值就是1;

通过OS_ScheNew可以获取最高优先级OSPrioHighRdy,然后进行调度

注:

    以上详细讲解了ucos任务创建的流程,注意任务创建过程中可能存在任务调度(最高优先级程序切换)