新闻中心

EEPW首页>嵌入式系统>设计应用> μC/OS-III中的高效时钟节拍管理机制

μC/OS-III中的高效时钟节拍管理机制

作者: 时间:2013-01-11 来源:网络 收藏

;;II中,由于每次时钟节拍服务都要遍历所有任务,因此,在任务数目较多时,其执行时间可能很长。另外,由于时钟节拍服务函数OSTimeTick()由时钟节拍中断服务程序OSTicidSR()调用执行,因此当OSTimeTick()执行时间很长时,时钟节拍中断服务程序的执行时间也很长。在中断服务程序执行时,所有任务都无法执行,在这种情况下,系统的实时性会很差。

2;C/OS-中的机制
针对;;II时钟节拍服务的问题,μ;主要做了两点改进:①用时钟节拍任务来做时钟节拍处理;②用时钟节拍轮盘来分类管理延时任务以及指定超时时限的等待任务。
2.1 时钟节拍任务
在μC/OS—中,增加了一个系统任务,即时钟节拍任务OS_TickTask()。该任务是μC/OS-III中两个总是会创建的系统任务之一。时钟节拍任务负责处理延时任务和指定超时时限的等待任务,这样,μC/OS—III就把时钟节拍的处理工作放到任务级代码中完成了。时钟节拍中断服务程序和时钟节拍任务之间的关系如图1所示。

本文引用地址://m.amcfsurvey.com/article/148142.htm

b.JPG


不论在μC/OS—II还是在μC/OS—III中,都需要一个硬件定时器(或其他能产生周期性中断的外设)来产生几十到上千赫兹的时钟节拍中断。时钟节拍中断的具体频率取决于所用的处理器的性能以及应用需求。时钟节拍中断频率越高,系统的延时精度越高,对处理器的处理能力要求也越高。
每次产生时钟节拍中断,CPU都会跳转到时钟节拍中断服务程序(ISR)中执行。时钟节拍ISR会调用OSTimeTick()函数。前面提到过,μC /OS—II的时钟节拍ISR也会调用OSTimeTick()函数,在这一点上μC/OS—II和μC/OS—III看起来没有区别,但实际上μC/OS—III中的OS TimeTick()函数与μC/OS—II中的OSTimeTick()函数有很大区别。μC/OS—III中的OSTimeTick()函数主要完成如下操作:向时钟节拍任务发信号、调用OS_SchedRoundRobin()函数,以及向定时器任务发信号等。其中,后两点与时钟节拍的管理无关,这里不详细介绍。精简的OSTimeTick()函数如下面这段代码所示,其中只保留与相关的代码。
e.jpg
在μC/OS—III中,OSTimeTick()函数不需要遍历任务链表,只是通过OSTaskSemPost()函数向时钟节拍任务发信号。而时钟节拍任务绝大部分时间内都处于等待该信号的状态,每次收到该信号时,时钟节拍任务会恢复运行,调用OS_TiekListUpdate()函数处理延时的任务,然后再次进入等待该信号的状态,其代码如下:
f.jpg
c.JPG
相比μC/OS—II的方式,μC/OS—III使用了专门的时钟节拍任务来处理时钟节拍,可大大减少时钟节拍中断服务程序的执行时间。



评论


相关推荐

技术专区

关闭