μC/OS-III——任务管理

多任务管理:在多个任务间调度和切换CPU使用权的过程


任务类型

1、运行至完成型:完成工作后结束运行,在嵌入式系统中最好少用

void MyTask(void *p_arg)

{

        OS_ERR err;

        /*局部变量*/

        /*处理p_arg*/

        /*任务初始化*/

        /*任务主体*/

        OSTaskDel((OS_TCB *)0. &err);

}

2、无限循环型

        用while(1)或for(;;)的方式实现无限循环,但必须调用μC/OS-III服务函数使得任务等待某个事件的状态

        任务等待一个事件时,不会占用CPU时间。



任务相关资源

        每个任务有其优先级,μC/OS-III可配置64个不同优先级,每个优先级可以有数十个任务;

        每个任务必须有自己的栈空间;

        若频繁创建删除任务,存储器最终会布满碎片,导致无法再使用存储器管理函数给任务分配栈空间。


        系统设计的重要原则:CPU的利用率应为60%~70%

        嵌入式系统通用原则:不要使用递归调用

        任务实际分配的栈空间大小与具体应用相关,应在计算值的基础上乘以一个安全系数,一般取值在1.5~2之间



可供应用程序调用的任务管理函数:

任务管理函数

任务的五种基本状态:休眠态、等待态、就绪态、中断服务态、运行态

任务的五种基本状态

μC/OS-III的内部任务转换图:


μC/OS-III内部任务状态机

任务管理——系统内部任务(初始化时必须至少创建两个任务——空闲任务、时钟节拍任务)

1、空闲任务(当所有其他任务未就绪时,运行空闲任务

优先级:OS_CFG_PRIO_MAX - 1(唯一可使用该优先级的任务)

空闲活跃度:OSIdleTaskCtr,由统计任务控制,统计程序运行时CPU利用情况

2、时钟节拍任务(跟踪任务延时和任务等待超时

优先级:一般设置为相对较高,应比系统中最重要的任务优先级略低;


时钟节拍ISR与时钟节拍任务的关系

时钟节拍列表:由一个数据表计数器组成;


全空的时钟节拍表

任务插入时间列表公式:

  

    Index into OsCfg_TickWheel[ ] = MatchValue % OS_CFG_TICK_WHEEL_SIZE

3、统计任务

4、定时任务


时钟节拍ISR和定时任务间的关系

5、中断服务管理任务


中断服务管理任务

你可能感兴趣的:(μC/OS-III——任务管理)