μC/OSII是一个可移植、可固化、可裁剪的抢占式实时多任务内核。大部分用ANSI C语言编写,只有一小部分与硬件相关的代码用汇编语言编写。至今,μC/OSII已经在40多种不同架构的微内核处理器上移植成功。
μ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 (),这样增加了中断处理的负担,影响了定时服务的准确性;
② 在关中断情况下扫描任务链表,任务越多所需要时间越长,而长时间关中断对中断响应有不利影响,是中断处理应当避免的。
μC/OSII*****提供的基于CortexM3内核移植的μC/OSII系统一直工作在特权级下。这样做的好处是,系统不用频繁地切换访问等级,而且开关中断很快,利于实时性的实现;但是应用程序(用户任务)也可以访问特殊功能寄存器和系统控制空间(SCS)寄存器,修改操作系统的变量,这对系统的安全性是一种威胁,如果用户任务程序跑飞,那就有可能破坏系统寄存器和变量。
(1)公开源码:是为数不多的公开源码的RTOS,给二次开发和移植提供了可能;
(2)可移植性强:μC/OSII绝大多数源码用ANSI C编写,少量用汇编语言编写,具有较强的移植性;
(3)可固化:微小内核,可以和应用程序一起固化到FLASHROM中;
(4)可裁剪:通过条件编译即可实现裁剪,十分方便;
(5)占先式:是实时性的重要保证;
(6)多任务:多达64个任务管理,可以满足大多数控制任务;
(7)可确定性:全部的函数调用与服务执行的时间是可知的;
(8)系统服务:提供众多的系统服务,如:消息队列、信号量、内存管理等。
(9)中断管理:多达255层的中断管理。
(10)稳定性和可靠性:自1992年以来已经有好几百个商业应用。其中NationalOptronics公司成功将μC/OS用于三轴运动控制卡中,该三轴运动控制卡主要用于高精度的光电子制造业。