RTOS uCOS-II 原理及应用3解析.ppt
文本预览下载声明
* * 补充:4 任务的可调度性分析 n 任务的总个数; Ci Task_i 执行一次的时间; Ti Task_i 的周期; U(n) 用户可使用的 CPU 使用系数上限。 速率单调分析(RMA)分析公式: 公式参数说明: * * 补充:4 任务的可调度性分析 随着任务数的增多(n 变大),U(n)在下降,这是因为系统开销在增大。 n 1 2 3 4 5 … ∞ U(n) 1.000 0.828 0.779 0.756 0.743 … 0.693 举例:某系统由 5个用户任务组成,它们的 周期 和 最长执行时间 以及 系统性能分析 见下表。 i Ci (ms) Ti (ms) Ci/Ti i Ci (ms) Ti (ms) Ci/Ti 1 5 50 0.10 4 5 100 0.05 2 20 100 0.20 5 80 500 0.16 3 30 150 0.20 U(n) = 74.3% * * 补充:4 任务的可调度性分析 问题 如果由于某原因造成 “分析式” 不成立,如何处理? i Ci (ms) Ti (ms) Ci/Ti i Ci (ms) Ti (ms) Ci/Ti 1 5 50 0.10 4 5 100 0.05 2 20 100 0.20 5 80 500 0.16 3 30 150 0.20 6 10 30 0.33 解决方案: 1、在满足系统技术要求前提下,尽量降低 Task 的激活频率; 2、提升硬件平台性能。 * * 第3章 补充.目录 1、任务的特性 2、任务的划分目标 3、任务的划分方法 4、任务的可调度性分析 5、任务的执行分类和优先级安排 6、任务设计中的问题 7、系统设计编码实现过程 8、中断服务程序的设计 * * 补充:5 任务的执行分类和优先级安排 任务的执行分类: 1、单次执行的任务 此类任务在OSTaskCreate( )后只执行一次,执行接诉后即自行删除。其结构如下: void MyTask(void * pdata) { 局部环境初始化代码; //本任务运行环境的初始化 任务实体代码; OSTaskDel(OS_PRIO_SELF); //删除自身 } 此类型任务采用“创建即启动”方式运行任务,这样可以简化任务的启动控制关系,更主要的是可以在每次启动时向任务传递一些参数,使其有不同的运行工作状态。如使用 UART ,每次都可以设置其帧格式、数据波特率等。 注意事项: 安排合适的优先级 自身删除前释放占用的共享资源 适用“孤立任务” * * 补充:5 任务的执行分类和优先级安排 任务的执行分类: 2、周期执行的任务(也可以认为事件触发的特例) 此类任务创建后按某个时间周期被执行。任务结构如下: void MyTask(void * pdata) { 局部环境准备代码; //硬件、变量等初始化 while(1) { 任务实体代码; //具体的任务业务 OSTimeDly() / OSTimeDlyHMSM(); //周期约定 } } 此类任务运行特性分析: 运行周期越大,任务执行周期的相对误差越小,适用于任务周期稳定性要求不太高的应用。 任务周期只能是系统节拍的整倍数。 当任务周期要求很严格或不是系统节拍的整倍数时,应采用定时器中断的方式解决(电子钟)。 * * 补充:5 任务的执行分类和优先级安排 任务的执行分类: 3、事件触发执行的任务 此类任务创建后其任务实体代码要等待预约的事件,在该事件发生前任务被强制等待,相关事件发生一次,任务实体执行一次。任务结构如下: void MyTask(void * pdata) { 局部环境准备代码; //硬件、变量等初始化 while(1) { 获取事件的系统函数; //等待事件(信号量、消息)发生 任务实体代码; //具体的任务业务 } } * * 补充:5 任务的执行分类和优先级安排 任务的优先级安排: 任务的优先级资源 任务的优先级资源由RTOS提供,uC/OS-II中使用系统宏常数OS_LOWEST_PRIO约定其可用的优先级个数,其值最大为63。 #define OS_LOWEST_PRIO xx //该行属于OS_CFG.H文件 * * 任务可用的优先级总个数为 (OS_LOWEST_PRIO + 1) 个,Task-prio的值域为{ 0,...,OS_LOWEST_PRIO}; 优先级 OS_LOWEST_PRIO 固定分给给了OSTaskIdel(),优先级 OS_LOWEST_PRIO - 1
显示全部