μC/OS
-II
软件定时器的分析与测试
引
言
μC/OS
-II
操作系统是建立在微内核基础上的实时操作系统,
抢占式多任务、
微内核、
移
植性好等特点,使其在诸多领域都有较好的应用。
在
μC/OS
-II 2
.
83
及其以后的版本中,
一个较大的变化就是增加了对软件定时器的支持。
这使得
μC/OS
实时操作系统的功能更加完善,在其上的应用程序开发与移植也更加方便。
在实时操作系统中一个好的软件定时器实现要求有较高的精度、
较小的处理器开销,
且占用
较少的存储器资源。本文在对
μC/OS
-II
定时器算法分析的基础上,对定时精度和处理器占
用情况进行了分析与测试,其结果在实时系统的设计与应用中具有借鉴意义。
1
定时器实现架构
在
μC/OS
-II
操作系统内部,任务的延时功能及软件定时器功能,都需要底层有一个硬
件的计数器支持。硬件计数器以固定的频率递减,
计数到
0
时,触发时钟中断。这个特定的
周期性的中断称为
“
时钟节拍
”
。
每当有时钟节拍到来时,
系统在保存现场和中断嵌套计数加
1
后都会跳到时钟节拍函数
OSTimTick()
中,进行软件计数器加
1
和遍历任务控制块,以判
断任务延时是否到时。
μC/OS
-II
中并未在
OSTim
Tick()
中进行定时器到时判断与处理,而是创建了一个高于
应用程序中所有其他任务优先级的定时器管理任务
OSTmr_Task()
,在这个任务中进行定时
器的到时判断和处理。
时钟节拍函数通过信号量给这个高优先级任务发信号。
这种方法缩短
了中断服务程序的执行时间,
但也使得定时器到时处理函数的响应受到中断退出时恢复现场
和任务切换的影响。
软件定时器功能实现代码存放在
tmr
.
c
文件中,
移植时需只需在
os_cfg
.
h
文件中使能定时器和设定定时器的相关参数。
2 μC/OS
-II
的软件定时器算法分析
μC/OS
-II
中软件定时器的实现方法是,
将定时器按定时时间分组,
使得每次时钟节拍到
来时只对部分定时器进行比较操作,
缩短了每次处理的时间。
但这就需要动态地维护一个定
时器组。
定时器组的维护只是在每次定时器到时时才发生,
而且定时器从组中移除和再插入
操作不需要排序。这是一种比较高效的算法,减少了维护所需的操作时间。