摘 要:介绍μC/OS—II嵌入式实时操作系统的特点,分析单一的基于优先级调度算法存在的不足。根据嵌入式应用不同的实时性要求,将应用划分为实时任务、分时任务和后台任务三种类型。针对分时任务,新增加时间片调度算法,给出调度算法的实现方法,同时增加任务创建和销毁的接口;降低基于μC/OS—1I操作系统的嵌入式产品开发难度和设计成本,有利于该操作系统的应用推广。
关键词:μC/OS—II 嵌入式系统 任务调度算法 时间片调度
引 言
目前,操作系统内核的软件中,μC,0S-II称得上是小型实时操作系统。它由Jean J.Labrosse于1992年推出第l版,立刻在嵌入式系统领域引起强烈反响。μC/OS II是一个基于抢占式的实时多任务内核,可固化、可剪裁、具有高稳定性和可靠性。它最鲜明特点就是源码公开,便于移植和维护,而且对于学校研究完全免费,只有在应用于盈利项目时才需要支付少量的版权费,特别适合一般使用者的学习、研究和开发。自问
1 μC/0S在嵌入式产品应用中存在的问题
随着移动通信、信息家电以及工业控制等领域的快速发展,嵌入式软件产业迎来了极佳的发展时机。强劲的市场需求带来了研发的快速增长,越来越多的软件公司投入到嵌入式产品的研发中。但另一方面,大部分软件公司却缺乏嵌入式操作系统这个嵌入式产品的核心技术,无法提供给各种应用多任务等现代操作系统所必备的功能,极大地限制了产品的性能和发展。μC/OS具有源码公开,商业授权费极低等特点,成为嵌入式产品开发的一种选择。
μC/OS—II在设计时强调实时性。它采用单一的基于优先级的抢先式调度算法,有效地保证了实时性的要求。在各种嵌入式操作系统中,其任务切换带来的时延窗口很小。非常适合强实时性的任务要求,但是对于大部分周期性和实时性要求不高的任务来说,μC/O一II还存在一些不足:
①缺乏时间片调度,低优先级的任务很难得到执行。μC/OS—II不支持时间片调度,优先级高的任务如果不主动放弃CPUwww.cechina.cn,低优先级任务永远都不可能运行。这对于那些分别编写,但叉可能同时运行的任务来说,只能通过任务之间的同步等动作来完成交替运行。这不但增加了编程难度,而且破坏了模块的独立性。
②任务创建和销毁的接口复杂。μC/OS—ll的上层软件开发需要关心底层具体实现,接口比较复杂。对于经验不多的程序员来说,第一,创建任务时需要用户自行指定优先级。这必然牵涉到如何管理分配优先级的问题。第二www.cechina.cn,μC/OS—II中任务的栈空间完全由用户管理,系统只是简单地要求用户创建任务时传人栈地址,而不参与栈空间的申请和释放。为了简化μC/OS的示例程序,更是简单地以静态数组作为任务栈。栈空间的放任自流在带来一定灵活性的同时也会带来问题的隐患。第三,因为μC/OS—II规定任务必须为无限循环或自销毁形式,所以其任务在结束时www.cechina.cn,需要手工调用OSTaskDel,使该任务进入睡眠态,不能简单地返回。与现在流行的大多数操作系统用法差异较大。
结合国内的产业现状CONTROL ENGINEERING China版权所有,从程序员素质和应用程序的实时性分类,在数量上都呈现金字塔状;而且往往是高级程序员负责开发实时应用www.cechina.cn,普通程序员开发非实时应用。如果希望能在包括数目庞大的非实时应用的产品中利用μC/OS—II,则必须对它作出扩充,在保留实时任务支持的前提下,增添时间片调度,并对任务的接口作出简化处理。
2 μC/OS调度算法的改进
μC/OS中的每个任务具有一个任务控制块0S_TCB,任务控制块记录任务执行的环境,包括任务的优先级、任务的堆栈指针、任务的相关事件控制块指针等。内核将系统中处于就绪态的任务在就绪表中进行标注,通过就绪表中的两个变量OSRdyGrp和OSRdyTbl[]可快速查找系统中就绪的任务。在μC/OS—II中每个任务有唯一的优先级,因此任务的优先级也是任务的唯一标识。内核可用控制块优先级表OSTCBPrioTbl[]通过任务的优先级查到任务控制块的地址。μC/OS—II主要就是利用任务控制快OS_TCB、就绪表和控制块优先级表0ST