多任务管理:在多个任务间调度和切换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的内部任务转换图:

任务管理——系统内部任务(初始化时必须至少创建两个任务——空闲任务、时钟节拍任务)
1、空闲任务(当所有其他任务未就绪时,运行空闲任务)
优先级:OS_CFG_PRIO_MAX - 1(唯一可使用该优先级的任务)
空闲活跃度:OSIdleTaskCtr,由统计任务控制,统计程序运行时CPU利用情况
2、时钟节拍任务(跟踪任务延时和任务等待超时)
优先级:一般设置为相对较高,应比系统中最重要的任务优先级略低;

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

任务插入时间列表公式:
Index into OsCfg_TickWheel[ ] = MatchValue % OS_CFG_TICK_WHEEL_SIZE
3、统计任务
4、定时任务

5、中断服务管理任务

网友评论