微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 实时多任务系统µC/OS-Ⅱ在DSP上的移植

实时多任务系统µC/OS-Ⅱ在DSP上的移植

时间:03-26 来源:互联网 点击:

和步骤很快完成了函数OSTaskStkInit()、函数OSStartHighRdy()、函数 OSCtxSw()、OSIntCtxSw()和OSTickISR()函数的验证工作。证实了移植代码是能正常工作的。为进一步测试其可靠性,又另外创建了15个任务,并用上了μC/OS-Ⅱ的信号量和邮箱同步机制,在每个任务里加上不同的发光二极管,经测试其实时性和稳定性都很好优异。

4. 任务调度过程中优先级翻转问题及解决

优先级翻转是即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级的任务抢先,因此造成高优先级任务被许多具有较低优先级的任务阻塞,实时性难以得到保证。解决优先级翻转问题有优先级天花板和优先级继承两种办法。优先级天花板是当任务申请某资源时,把该任务的优先级提升到可访问这个资源的所有任务中的最高优先级,这个优先级称为该资源的优先级天花板。这种方法简单易行,不必进行复杂的判断,不管任务是否阻塞了高优先级任务的运行,只要任务访问共享资源都会提升任务的优先级。在μC/OS-Ⅱ中,可以通过 OSTaskChangePrio()改变任务的优先级,但是改变任务的优先级是很花时间的。如果不发生优先级翻转而提升了任务的优先级,释放资源后又改回原优先级,则无形中浪费了许多CPU时间,也影响了系统的实时性。优先级继承是当任务A申请共享资源S时,如果S正在被任务C使用,通过比较任务C与自身的优先级,如发现任务C的优先级小于自身的优先级,则将任务C的优先级提升到自身的优先级,任务C释放资源S后,再恢复任务C的原优先级。这种方法只在占有资源的低优先级任务阻塞了高优先级任务时才动态的改变任务的优先级,如果过程较复杂,则需要进行判断。μC/OS-Ⅱ不支持优先级继承,而且其以任务的优先级作为任务标识,每个优先级只能有一个任务,因此,不适宜在应用程序中使用优先级继承。

在μC/OS-Ⅱ中,为解决优先级翻转影响任务实时性的问题,可以借鉴优先级继承的方法对优先级天花板方法进行改进。对μC/OS-Ⅱ的使用,共享资源任务的优先级不是全部提升,而是先判断再决定是否提升。即当有任务A申请共享资源S时,首先判断是否有别的的任务正在占用资源S,若无,则任务A继续执行,若有,假设为任务B正在使用该资源,

则判断任务B的优先级是否低于任务A,若高于任务A,则任务A挂起,等待任务B释放该资源,如果任务B的优先级低于任务A,则提升任务B的优先级到该资源的优先级天花板,当任务B释放资源后,再恢复到原优先级。在μC/OS-Ⅱ中,每个共享资源都可看作一个事件,每个事件都有相应的事件控制块 ECB。在ECB中包含一个等待本事件的等待任务列表,该列表包括OSEventTbl[]和OSEventGrp两个域,通过对等待任务列表的判断可以很容易地确定是否有多个任务在等待该资源,同时也可判断任务的优先级与当前任务优先级的高低,从而决定是否需要用 OSTaskChangePio()来改变任务的优先级。这样,仅在优先级有可能发生翻转的情况下才改变任务的优先级,而且利用事件的等待任务列表进行判断,比用OSTaskChangePio()来改变任务的优先级速度快,并占用较少的CPU时间,有利于系统实时性的提高。

参考文献:

[1]邬可军,朱铭锆等.DSP实时多任务操作系统设计与实现[M]. 北京:电子工业出版社, 2005.

[2]钟坚文,蔡旭.基于μC/OS-II的CAN总线驱动程序设计[J].微计算机信息,2005,7-2:35-37.

[3]Jean J.Labrosse著.邵贝贝等译.嵌入式实时操作系统μC/OS-Ⅱ[M]第2版.北京,北京航空航天大学出版社,2003.5

[4]刘和平,王维俊等. TMS320LF240X DSP C语言开发应用[M]. 北京:北京航空航天大学出版社, 2003.

[5]TI.Code Composer User's Guide.SPRU509C.pdf

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top