基于μC/OS-II的时间片调度法设计
[11-20 15:54:45] 来源:http://www.88dzw.com arm嵌入式 阅读:8443次
文章摘要:…… #if OS_TASK_TIME_SLICE_EN>0/*条件编译,OS_TASK_TIME_SLICE_EN在os_cfg.h中定义,凡是涉及与时间片调度相关的代码都用条件编译。这样,可以通过更改配置文件很方便地选择任务调度法 */INT16UOSTCBTimeSlice;/*任务的时间片大小,在任务创建时被初始化,运行过程中保持不变*/ INT16UOSTCBCounter;/*任务运行剩余时间计数器,每一轮调度开始时该变量被赋值(等于OSTCBTimeSlice),运行过程中不断递减。当其等于0时任务被剥夺CPU使用权*/ #end
基于μC/OS-II的时间片调度法设计,标签:arm嵌入式系统,arm系统,http://www.88dzw.com……
#if OS_TASK_TIME_SLICE_EN>0
/*条件编译,OS_TASK_TIME_SLICE_EN在os_cfg.h中定义,凡是涉及与时间片调度相关的代码都用条件编译。这样,可以通过更改配置文件很方便地选择任务调度法
*/INT16UOSTCBTimeSlice;
/*任务的时间片大小,在任务创建时被初始化,运行过程中保持不变*/
INT16UOSTCBCounter;
/*任务运行剩余时间计数器,每一轮调度开始时该变量被赋值(等于OSTCBTimeSlice),运行过程中不断递减。当其等于0时任务被剥夺CPU使用权*/
#endif
}
由于当前任务的时间片使用完时,该任务将被从就绪表OSRdyGrp以及OSRdyTbl[OS_RDY_TBL_SIZE]中清除;新一轮调度开始时它又必须被恢复,因此笔者在uCOS_II.h文件中增加以下变量(不妨把它们称为“时间片调度表”)分别用于保存OSRdyGrp和OSRdyTbl[OS_RDY_TBL_SIZE]。
OS_EXT INT8UOSTSSGrp;
OS_EXT INT8UOSTSSTbl[OS_RDY_TBL_SIZE];
另外,在uCOS_II.h文件中增加宏定义,用于表示任务时间片被用完这种状态:
#defineOS_STAT_TS_USEUP0x40
2.2 相关函数的修改
对OS_TCBInit()、OSTimeTick()、OSTimeDly()、OS_EventTaskWait()、OS_EventTaskRdy()这5个函数的修改,是在μC/OSII基础上实现时间片调度法的关键。下面将一一对这几个函数的修改部分进行说明。
在初始化任务控制块的函数OS_TCBInit()中,笔者添加以下代码让新创建的任务处于时间片就绪表中,并根据任务优先级对任务的时间片大小进行初始化。
OSTimeTick()函数在每个时钟滴答被调用,在时间片调度过程中起到了递减时间片计数器的作用。当计数器为0时,进行任务切换或是重新给各个任务分配时间片并开始新一轮调度。
OSTimeDly()函数的作用是将任务延时一定的时间。这种情况下,应该把该任务从时间片调度表中清除。
当某个任务须等待一个事件的发生时,信号量、互斥型信号量、邮箱及消息队列会通过相应的PEND函数调用函数OS_EventTaskWait(),使当前任务从就绪任务表中脱离就绪态,此时还需把当前任务从时间片调度表中清除。笔者在OS_EventTaskWait()函数中添加了以下代码:
相应地,当某个事件发生了,信号量、互斥型信号量、邮箱及消息队列会通过相应的POST函数调用OS_EventTaskRdy(),从等待任务队列中使最高优先级任务脱离等待状态,此时还需要把该任务添加到时间片调度表中。笔者在OS_EventTaskRdy()函数中添加了以下代码:
OSTSSGrp |= bity;
OSTSSTbl[y] |= bitx;
3 应用实例
笔者首先把μC/OSII移植到开发板上(MCU是意法半导体生产的基于ARM7TDMI核的STR730[3]),然后如2小节所述对相关部分的源代码进行修改,接下来将优先级调度法和基于μC/OSII的时间片调度法进行比较。为此分别建立了2个任务Task_TimeConsuming()、Task_Audio(),任务的优先级分别是5、6。
《基于μC/OS-II的时间片调度法设计》相关文章
- › 基于CXA3355ER的GPS接收机下变频器电路
- › 基于CXA1951AQ的GPS接收机下变频器电路
- › 基于CAN总线的电池管理系统结构框图
- › 基于CY7C68013A的USB控制系统设计研究
- › 基于CPCI总线的多网口卡设计
- › 基于CAN总线的分布式位置伺服系统设计
- 在百度中搜索相关文章:基于μC/OS-II的时间片调度法设计
- 在谷歌中搜索相关文章:基于μC/OS-II的时间片调度法设计
- 在soso中搜索相关文章:基于μC/OS-II的时间片调度法设计
- 在搜狗中搜索相关文章:基于μC/OS-II的时间片调度法设计