标题：uC/OS-III
uC/OS-III 简介
uC/OS-III(Micro C OS Three 微型的C 语言编写的操作系统第3版)是一个可升级的，可固化的，基于优先级的实时内核。它对任务的个数无限制。uC/OS-III 是一个第3 代的系统内核，支持现代的实时内核所期待的大部分功能。例如资源管理，同步，任务间的通信等等。然而，uC/OS-III 提供的特色功能在其它的实时内核中是找不到的，比如说完备的运行时间测量性能，直接地发送信号或者消息到任务，任务可以同时等待多个内核对象等。
uC/OS-III 是一个可扩展的，可固化的，抢占式的实时内核，它管理的任务个数不受限制。它是第三代内核，提供了现代实时内核所期望的所有功能包括资源管理、同步、内部任务交流等。uC/OS-III 也提供了很多特性是在其他实时内核中所没有的。比如能在运行时测量运行性能，直接得发送信号或消息给任务，任务能同时等待多个信号量和消息队列。
为什么命名新的版本
uC/OS 系列，第一代产生于1992。经过了多年的使用和上千人的反馈，已经产生了很多的进化版本。uC/OS-III 是这些反馈和经验的总结。在uC/OS-II 中很少使用的功能已经被删除或者被更新，添加了更高效的功能和服务。其中最有用的功能应该是时间片轮转法（round robin),这个是uC/OS-II 中不支持的，但是现在已经是uC/OS-III 的一个功能了。uC/OS-III 会提供新的功能以更好地适应新出现的处理器。特别的，uC/OS-III 被设计用于32 位处理器，但是它也能在16 位或8 位处理器中很好地工作。
uC/OS-III 的目标
uC/OS-III 最主要的目标是提供一流的实时内核以适应更新很快的嵌入式产品。使用像uC/OS-III 那样具有雄厚的基础和稳定的框架的商业实时内核，能够帮助设计师们处理日益复杂的嵌入式设计。
uC/OS-III 的特点
源代码uC/OS-III 完全根据ANSI-C 标准写的。代码的规范是Micrium 团队的一种文化。虽然很多商业内核供应商提供他们产品的源代码，但是这些产品很有可能是笨重且难以利用的。除非代码严格地遵循标准并且产品有完整的带例子的说明书以展示代码是怎样工作的。应用程序接口（API）uC/OS-III 是很直观的。如果你熟悉类似的编码规范，你能轻松地知道函数名所对应的服务，以及需要怎样的参数。例如：指向对象的指针通常是第一个参数，指向错误代码的指针通常是最后一个参数。抢占式多任务处理uC/OS-III 是一个抢占式多任务处理内核，因此，uC/OS-III 正在运行的经常是最重要的就绪任务。时间片轮转调度uC/OS-III 允许多个任务拥有相同的优先级。当多个相同优先级的任务就绪时，并且这个优先级是目前最高的。uC/OS-III 会分配用户定义的时间片给每个任务去运行。每个任务可以定义不同的时间片。当任务用不完时间片时可以让出CPU 给另一个任务。快速响应中断uC/OS-III 有一些内部的数据结构和变量。uC/OS-III 保护临界段可以通过锁定调度器代替关中断。因此关中断的时间会非常少。这样就使uC/OS-III 可以响应一些非常快的中断源了。确定性的uC/OS-III 的中断响应时间是可确定的，uC/OS-III 提供的大部分服务的执行时间也是可确定的。可扩展的根据应用的需求，代码大小可以被调整。编译时通过调整uC/OS-III 源代码中的大约40 个#define(见OS_CFG.H)可以在添加或移除一些功能。uC/OS-III 的服务还提供一些实时检查功能。特别的，uC/OS-III 能检传递的参数是否为NULL 指针，ISR 是否就绪了任务级服务。参数有允许范围，指定选项都是有用的。检测功能可以被关闭（在编译时）以提供更好的性能和缩减代码大小。实际上，可扩展的uC/OS-III 支持更广泛的应用和项目。易移植的uC/OS-III 可以被移植到大部分的CPU 架构中。大部分的支持uC/OS-II 的器件通过改动就能支持uC/OS-III。而uC/OS-II已经移植到45 种CPU 架构中了。可固化的uC/OS-III 专为嵌入式系统设计，它可以跟应用程序代码一起被固化。可实时配置的uC/OS-III 允许用户在运行时配置内核。特别的，所有的内核对象如任务、堆栈、信号量、事件标志组、消息队列、消息、互斥信号量、内存分区、软件定时器等都是在运行时分配的,以免在编译时的过度分配。任务数无限制uC/OS-III 对任务数量无限制。实际上，任务的数量限制于处理器能提供的内存大小。每一个任务需要有自己的堆栈空间，uC/OS-III 在运行时监控任务堆栈的生长。uC/OS-III 对任务的大小无限制，优先级数无限制uC/OS-III 对优先级的数量无限制。然而，配置uC/OS-III 的优先级在32 到256 之间已经满足大多数的应用了。内核对象数无限制uC/OS-III 支持任何数量的任务、信号量、互斥信号量、事件标志组、消息队列、软件定时器、内存分区。用户在运行时分配所有的内核对象。服务uC/OS-III 提供了高档实时内核所需要的所有功能，例如任务管理、时间管理、信号量、事件标志组、互斥信号量、消息队列、软件定时器、内存分区等。互斥信号量互斥信号量用于资源管理。它是一个内置优先级的特殊类型信号量，用于消除优先级反转。互斥信号量可以被嵌套，因此，任务可申请同一个互斥信号量多达250 次。当然，互斥信号量的占有者需要释放同等次数。嵌套的任务停止uC/OS-III 允许任务停止自身或者停止另外的任务。停止一个任务意味着这个任务将不再执行直到被其他的任务恢复。停止可以被嵌套到250 级。换句话说，一个任务可以停止另外的任务多达250 次。当然，这个任务必须被恢复同等次数才有资格再次获得CPU。软件定时器可以定义任意数量的一次性的、周期性的、或者两者兼有的定时器。定时器是倒计时的，执行用户定义的行为一直到计数减为0。每一个定时器可以有自己的行为，如果一个定时器是周期性的，计数减为0 时会自动重装计数值并执行用户定义的行为。挂起多个对象uC/OS-III 允许任务等待多个事件的发生。特别的，任务可以同时等待多个信号量和消息队列被提交。等待中的任务在事件发生的时候被唤醒。任务信号量uC/OS-III 允许ISR 或者任务直接地发送信号量给其它任务。这样就避免了必须产生一个中间级内核对象如一个信号量或者事件标志组只为了标记一个任务。提高了内核性能。任务消息uC/OS-III 允许ISR 或者任务直接发送消息到另一个任务。这样就避免产生一个消息队列，提高了内核性能。任务寄存器每一个任务可以拥有用户可定义的任务寄存器，不同于CPU 寄存器。错误检测uC/OS-III 能检测指针是否为NULL、在ISR 中调用的任务级服务是否允许、参数在允许范围内、配置选项的有效性、函数的执行结果等。每一个uC/OS-III 的API 函数返回一个对应于函数调用结果的错误代号。内置的性能测量uC/OS-III 有内置性能测量功能。能测量每一个任务的执行时间,每个任务的堆栈使用情况，任务的执行次数，CPU的使用情况，ISR 到任务的切换时间,任务到任务的切换时间，列表中的峰值数，关中断、锁调度器平均时间等。可优化uC/OS-III 被设计于能够根据CPU 的架构被优化。uC/OS-III 所用的大部分数据类型能够被改变，以更好地适应CPU 固有的字大小。优先级调度法则可以通过编写一些汇编语言而获益于一些特殊的指令如位设置、位清除、计数清零指令（CLZ）,find-first-one(FF1)指令。死锁预防uC/OS-III 中所有的挂起服务都可以有时间限制，预防死锁。任务级的时基处理uC/OS-III 有时基任务，时基ISR 触发时基任务。uC/OS-III 使用了哈希列表结构，可以大大减少处理延时和任务超时所产生的开支。用户可定义的钩子函数uC/OS-III 允许程序员定义hook 函数，hook 函数被uC/OS-III 调用。hook 函数允许用户扩展uC/OS-III 的功能。有的hook 函数在任务切换的时候被调用，有的在任务创建的时候被调用，有的在任务删除的时候被调用。时间戳为了测量时间，uC/OS-III 需要一个16 位或者32 位的时时间戳计数器。这个计数器值可以在运行时被读取以测量时间。例如：当ISR 提交消息到任务时，时间戳计数器自动读取并保存作为消息。当接收者接收到这条消息，时间戳被提供在消息内。通过读取现在的时间戳，消息的响应时间可以被确定。嵌入的内核调试器这个功能允许内核调试器查看uC/OS-III 的变量和数据结构通过一个用户定义的通道。（但是只能在调试器遇到断点的时候查看）。uC/OS-III 内核也支持uC/Probe（探针）在运行时显示信息。对象名称每个uC/OS-III 的内核对象有一个相关联的名字。这样就能很容易的识别出对象所指定的作用。分配一个ASCII 码的名字给任务、信号量、互斥信号量、事件标志组、消息队列、内存块、软件定时器。对象的名字长度没有限制，但是必须以空字符结束。