摘要:为了有用办理时钟节拍并保证体系的实时性,μC/OS—III不只增加了一个专门的体系使命来办理时钟节拍,并且选用哈希散列表机制来进一步削减时钟节拍处理进程所花费的时刻。本文评论μC/OS—II在时钟节拍办理方面的缺乏,并介绍μC/OS—III中的高效时钟节拍办理机制。
关键词:μC/OS—III;时钟节拍办理;哈希散列表
导言
在嵌入式实时操作体系(RTOS)中,使命可经过调用延时函数(比方μC/OS中的OSTimeDly()函数)将自己延时挂起一段时刻。使命在延时的进程中会开释CPU使用权,也就是说,延时的使命不占用名贵的CPU资源。延时的使命由时钟节拍服务盯梢办理。当使命延时完毕并预备运转时,时钟节拍服务会使该使命康复运转。时钟节拍服务定时运转,其运转由周期的时钟节拍中止触发,而时钟节拍中止可由硬件定时器发生。
在μC/OS—III中,时钟节拍服务是在时钟节拍中止服务程序中完结的,每次时钟节拍服务都会遍历整个使命链表,递减一切延时使命的延时计数器。当使命数目较多时,时钟节拍服务处理时刻很长,会形成中止延迟时刻和使命延迟时刻都变得很长,影响体系的实时性。
在μC/OS—III中,时钟节拍服务不再在时钟节拍中止服务程序中完结,而是放到一个时钟节拍使命中完结。并且,经过选用啥希散列表机制来办理延时使命,每次时钟节拍服务只需求处理极少数的延时使命,然后大大削减了时钟节拍服务花费的时刻,提高了体系的实时性。
别的,在μC/OS系列RTOS中,时钟节拍服务除了会盯梢延时的使命,还会盯梢那些指定了超时时限的等候使命。也就是说,当指定的超时时限完毕时,即便使命等候的事情没有发生,时钟节拍服务也会使该使命康复运转。
1 μC/OS—II中的时钟节拍办理机制
在μC/OS—II中,每次时钟节拍服务都会遍历整个使命链表,顺次处理各个使命。假如当时处理的使命的延时计数为0,那么越过该使命,持续处理下一个使命;不然,把当时使命的延时计数减1,然后,判别减1后的延时计数是否为0。假如为0,表明使命延时完毕了或等候超时了。因为μC/OS-Ⅱ答应其他使命调用OSTaskSuspend()函数强制挂起正在延时的使命,在这种情况下,不只需求比及使命延时完毕,还需求由其他使命调用OSTaskResume()函数免除该使命的强制挂起状况,该使命才干进入安排妥当态。因而,在延时计数递减为0的时分,还需求判别使命是否被强制挂起。只要使命没有被强制挂起,才干使该使命进入安排妥当态;不然,把延时计数设置为1,坚持使命的延时状况。μC/OS—II时钟节拍服务函数的首要代码和注释如下: