μC/OS-II由 Micrium公司 提供,是一个 可移植 可固化 的、 可裁剪 的、 占先式多任务实时内核 ,它适用于多种微处理器,微控制器和数字处理芯片(已经移植到超过100种以上的微处理器应用中)。同时,该系统源代码开放、整洁、一致,注释详尽,适合系统开发。 μC/OS-II已经通过联邦航空局(FAA)商用航行器认证,符合航空无线电技术委员会(RTCA)DO-178B标准。现在最新版的是μC/OS-III。

  • μC/OS-II被广泛应用于 微处理器 微控制器 数字信号处理器
  • uC/OS-II以源代码的形式发布,是开源软件, 但并不意味着它是免费软件。你可以将其用于教学和私下研究(peaceful research);但是如果你将其用于商业用途,那么你必须通过Micrium获得商用许可。
  • μC/OS-II可以提供如下服务:
    互斥信号量
    固定大小内存块管理
    时间管理另外,在μC/OS-II内核之上,有如下独立模块可供用户选择:
    μC/FS文件系统模块
    μC/GUI图形软件模块
    μC/TCP-IP协议栈模块
    μC/USB协议栈模块
    μ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等系统指针,所以通常用汇编语言编写。主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容。

    五、任务管理

    uC/OS-II 中最多可以支持 256个任务 ,分别对应优先级0~255,其中0 为最高优先级。255为最低级。
    注意:uC/OS中最多可以支持64个任务,分别对应优先级0~63,其中0 为最高优先级。63为最低级。
    uC/OS-II提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。
    系统初始化时会自动产生两个任务 :一个是 空闲任务 ,它的优先级最低,该任务仅给一个整型变量做累加运算;另一个是 系统任务 ,它的优先级为次低,该任务负责统计当前cpu的利用率。

    六、时间管理

    uC/OS-II的时间管理是通过 定时中断 来实现的,该定时中断一般为10毫秒或100毫秒发生一次,时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。
    uC/OS-II要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数。

    七、内存管理

    在ANSI C中是使用malloc和free两个函数来动态分配和释放内存。但在嵌入式实时系统中,多次这样的操作会导致内存碎片,且由于内存管理算法的原因,malloc和free的执行时间也是不确定。
    uC/OS-II中把 连续的大块内存按分区 管理。每个分区中包含整数个大小相同的内存块,但不同分区之间的内存块大小可以不同。用户需要动态分配内存时,系统选择一个适当的分区,按块来分配内存。释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题,同时执行时间也是固定的。

    八、通信同步

    对一个多任务的操作系统来说,任务间的通信和同步是必不可少的。uC/OS-II中提供了4种同步对象,分别是 信号量,邮箱,消息队列和事件 。所有这些同步对象都有 创建,等待,发送,查询 的接口用于实现 进程间的通信和同步

    九、任务调度

    uC/OS-II 采用的是 可剥夺型实时多任务内核 。可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。
    uC/OS-II的任务调度是完全基于 任务优先级 抢占式调度 ,也就是最高优先级的任务一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。为了简化系统设计,uC/OS-II规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身。

    十、任务调度

    1) 高优先级的任务因为需要某种临界资源,主动请求挂起,让出处理器,此时将调度就绪状态的低优先级任务获得执行,这种调度也称为任务级的上下文切换。
    2) 高优先级的任务因为时钟节拍到来,在时钟中断的处理程序中,内核发现高优先级任务获得了执行条件(如休眠的时钟到时),则在中断态直接切换到高优先级任务执行。这种调度也称为中断级的上下文切换。
    这两种调度方式在uC/OS-II的执行过程中非常普遍,一般来说前者发生在系统服务中,后者发生在时钟中断的服务程序中。
    调度工作的内容可以分为两部分:最高优先级任务的寻找和任务切换。其最高优先级任务的寻找是通过建立就绪任务表来实现的。u C / O S 中的每一个任务都有独立的堆栈空间,并有一个称为任务控制块TCB(Task Control Block)的数据结构,其中第一个成员变量就是保存的任务堆栈指针。任务调度模块首先用变量OSTCBHighRdy 记录当前最高级就绪任务的TCB 地址,然后调用OS_TASK_SW()函数来进行任务切换。