μC/OS-II嵌入式实时操作系统自1998年推出以来,因其方便移植、代码量小、实时性强、可靠性高、内核可剪裁等优点,成为我国计算机嵌入式应用领域最受喜爱的实时操作系统(Real-Time Opreating System)之一。由于其源码开源,至今,已经成功在诸多厂家的MCU上移植并应用在各行各业的电子产品之中,因而备受瞩目。
组成部分:μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。
1、核心部分(OSCore.c) 是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部分都在这里。
2、任务处理部分(OSTask.c) 任务处理部分中的内容都是与任务的操作密切相关的。包括任务的建立、删除、挂起、恢复等等。因为μC/OS-II是以任务为基本单位调度的,所以这部分内容也相当重要。
3、时钟部分(OSTime.c) μC/OS-II中的最小时钟单位是timetick(时钟节拍)。任务延时等操作是在这里完成的。
4、任务同步和通信部分为事件处理部分,包括信号量、邮箱、消息队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。
5、与CPU的接口部分是指μC/OS-II针对所使用的CPU的移植部分。由于μC/OS-II是一个通用性的操作系统,所以对于关键问题上的实现,还是需要根据具体CPU的具体内容和要求作相应的移植。这部分内容由于牵涉到SP等系统指针,所以通常用汇编语言编写。主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容。
对于嵌入式系统来说任务优先级的安排是十分重要的。
对于ucosII来说,最大优先级为63(共64个优先级),当然要根据项目的实际需要来定义最低的优先级()OS_LOWEST_PRIO ,例如实际项目使用20个优先级,则OS_LOWEST_PRIO需要这样设定:
#define OS_LOWEST_PRIO 19 实际上是用0-19
值得注意的是,我们实际可使用的优先级并不是整整64个,ucosII将OS_LOWEST_PRIO赋予给了“统计任务“将OS_LOWEST_PRIO-1留给了“空闲任务”,更需要注意的是系统将0、1、2、3号优先级以及OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-3号优先级留给了自己,以备系统的后续升级使用。