
μC/OSII原有的时钟管理系统类似于Linux,但是比Linux简单得多。它仅向用户提供一个周期性的信号OSTime,时钟频率可以设置在10~100 Hz,时钟硬件周期性地向CPU发出时钟中断,系统周期性响应时钟中断,每次时钟中断到来时,中断处理程序更新一个全局变量OSTime。μC/OSII时钟中断服务程序的核心是调用OSTimeTick ()函数。OSTimeTick ()函数用来判断延时任务是否延时结束从而将其置于就绪态。其程序伪代码如下:
void OSTimeTick(void) {
OSTimeTickHook();// 调用用户定义的时钟节拍外连函数
while { (除空闲任务外的所有任务)
OS_ENTER_CRITICAL();//关中断
对所有任务的延时时间递减;
扫描时间到期的任务,并且唤醒该任务;
OS_EXIT_CRITICAL();//开中断
指针指向下一个任务;
}
OSTime++;//累计从开机以来的时间
}
在μC/OSII的时钟节拍函数中,需要执行用户定义的时钟节拍外连函数OSTimeTickHook (),以及对任务链表进行扫描并且递减任务的延时。这样就造成了时钟节拍函数OSTimeTick ()有两点不足:
① 在时钟中断中处理额外的任务OSTimeIickHook (),这样增加了中断处理的负担,影响了定时服务的准确性;
② 在关中断情况下扫描任务链表,任务越多所需要时间越长,而长时间关中断对中断响应有不利影响,是中断处理应当避免的。
(1)公开源码:是为数不多的公开源码的RTOS,给二次开发和移植提供了可能;
(2)可移植性强:μC/OSII绝大多数源码用ANSI C编写,少量用汇编语言编写,具有较强的移植性;
(3)可固化:微小内核,可以和应用程序一起固化到FLASHROM中;