3.1-uC/OS-III的特点:

1.C/OS-III是一个可扩展的, 可固化的, 抢占式的实时内核, 它管理的任务个数不受限制。 它是第三代内核, 提供了现代实时内核所期望的所有功能包括资源管理、同步、内部任务交流等。 uC/OS-III也提供了很多特性是在其他实时内核中所没有的。比如能在运行时测量运行性能, 直接得发送信号或消息给任务, 任务能同时等待多个信号量和消息队列。
2.特点
(1).源代码: uC/OS-III完全根据 ANSI-C标准写的。
(2).用程序接口( API): uC/OS-III是很直观的。
(3).抢占式多任务处理: uC/OS-III是一个抢占式多任务处理内核, 因此, uC/OS-III正在运行的经常是最重要的就绪任务.
(4).时间片轮转调度: uC/OS-III允许多个任务拥有相同的优先级。 当多个相同优先级的任务就绪时,并且这个优先级是目前最高的。uC/OS-III会分配用户定义的时间片给每个任务去运行。每个任务可以定义不同的时间片。当任务用不完时间片时可以让出 CPU给另一个任务.
(5).快速响应中断: uC/OS-III 有一些内部的数据结构和变量。uC/OS-III保护临界段可以通过锁定调度器代替关中断。因此关中断的时间会非常少。这样就使 uC/OS-III可以响应一些非常快的中断源了。
(6).确定性的: uC/OS-III的中断响应时间是可确定的, uC/OS-III提供的大部分服务的执行时间也是可确定的.
(7).扩展的:根据应用的需求,代码大小可以被调整。 编译时通过调整uC/OS-III源代码中的大约40个#define(见 OS_CFG.H)可以在添加或移除一些功能。 uC/OS-III的服务还提供一些实时检查功能。特别的, uC/OS-III能检传递的参数是否为NULL指针, ISR是否就绪了任务级服务。 参数有允许范围, 指定选项都是有用的。 检测功能可以被关闭(在编译时)以提供更好的性能和缩减代码大小。实际上,可扩展的uC/OS-III支持更广泛的应用和项目。
(8).易移植的: uC/OS-III可以被移植到大部分的 CPU架构中。大部分的支持uC/OS-II的器件通过改动就能支持uC/OS-III。
(9).可固化的: uC/OS-III专为嵌入式系统设计, 它可以跟应用程序代码一起被固化。
(10).可实时配置的: uC/OS-III允许用户在运行时配置内核。特别的,所有的内核对象如任务、堆栈、信号量、事件标志组、消息队列、消息、互斥信号量、内存分区、软件定时器等都是在运行时分配的,以免在编译时的过度分配。
(11).任务数无限制: uC/OS-III对任务数量无限制。 实际上, 任务的数量限制于处理器能提供的内存大小。每一个任务需要有自己的堆栈空间, uC/OS-III在运行时监控任务堆栈的生长。 uC/OS-III对任务的大小无限制.
(12).优先级数无限制: uC/OS-III对优先级的数量无限制。 然而, 配置uC/OS-III的优先级在32到256之间已经满足大多数的应用了。
(13).内核对象数无限制: uC/OS-III支持任何数量的任务、信号量、 互斥信号量、 事件标志组、 消息队列、 软件定时器、 内存分区。 用户在运行时分配所有的内核对象。
(14).服务: uC/OS-III提供了高档实时内核所需要的所有功能, 例如任务管理、时间管理、信号量、事件标志组、互斥信号量、消息队列、软件定时器、内存分区等。
(15).互斥信号量( Mutexes): 互斥信号量用于资源管理。它是一个内置优先级的特殊类型信号量, 用于消除优先级反转。 互斥信号量可以被嵌套,因此,任务可申请同一个互斥信号量多达250次。当然,互斥信号量的占有者需要释放同等次数。
(16).嵌套的任务停止: uC/OS-III允许任务停止自身或者停止另外的任务。停止一个任务意味着这个任务将不再执行直到被其他的任务恢复。 停止可以被嵌套到250级。 换句话说, 一个任务可以停止另外的任务多达250次。 当然, 这个任务必须被恢复同等次数才有资格再次获得CPU。
(17).软件定时器: 可以定义任意数量的一次性的、周期性的、或者两者兼有的定时器。 定时器是倒计时的, 执行用户定义的行为一直到计数减为0。 每一个定时器可以有自己的行为, 如果一个定时器是周期性的,计数减为0时会自动重装计数值并执行用户定义的行为。
(18).挂起多个对象: uC/OS-III允许任务等待多个事件的发生。特别的,任务可以同时等待多个信号量和消息队列被提交。等待中的任务在事件发生的时候被唤醒.
(19).任务信号量: uC/OS-III允许ISR(中断服务程序)或者任务直接地发送信号量给其它任务。这样就避免了必须产生一个中间级内核对象如一个信号量或者事件标志组只为了标记一个任务。提高了内核性能。
(20).任务消息: uC/OS-III允许ISR或者任务直接发送消息到另一个任务。这样就避免产生一个消息队列,提高了内核性能。
(21).任务寄存器:每一个任务可以拥有用户可定义的任务寄存器,不同于CPU寄存器。
(22).错误检测: uC/OS-III能检测指针是否为NULL、 在ISR中调用的任务级服务是否允许、 参数在允许范围内、 配置选项的有效性、 函数的执行结果等。每一个uC/OS-III的API函数返回一个对应于函数调用结果的错误代号。
(23).内置的性能测量: uC/OS-III有内置性能测量功能。 能测量每一个任务的执行时间,每个任务的堆栈使用情况,任务的执行次数, CPU的使用情况, ISR到任务的切换时间,任务到任务的切换时间, 列表中的峰值数,关中断、锁调度器平均时间等。
(24).可优化: uC/OS-III 被设计于能够根据 CPU 的架构被优化。uC/OS-III所用的大部分数据类型能够被改变, 以更好地适应CPU固有的字大小。
(26).死锁预防: uC/OS-III中所有的挂起服务都可以有时间限制, 预防死锁。
(27).任务级的时基处理: uC/OS-III有时基任务,时基 ISR触发时基任务。 uC/OS-III使用了哈希列表结构,可以大大减少处理延时和任务超时所产生的开支。
(28).用户可定义的钩子函数: uC/OS-III允许程序员定义 hook函数,hook函数被uC/OS-III调用。 hook函数允许用户扩展 uC/OS-III的功能。有的 hook函数在任务切换的时候被调用,有的在任务创建的时候被调用,有的在任务删除的时候被调用。
(29).时间戳:为了测量时间, uC/OS-III需要一个 16位或者 32位的时时间戳计数器。这个计数器值可以在运行时被读取以测量时间。例如: 当ISR提交消息到任务时, 时间戳计数器自动读取并保存作为消息。 当接收者接收到这条消息, 时间戳被提供在消息内。 通过读取现在的时间戳,消息的响应时间可以被确定。
(30).嵌入的内核调试器:这个功能允许内核调试器查看uC/OS-III的变量和数据结构通过一个用户定义的通道。(但是只能在调试器遇到断点的时候查看)。 uC/OS-III内核也支持uC/Probe( 探针) 在运行时显示信息。
(31).对象名称: 每个uC/OS-III的内核对象有一个相关联的名字。这样就能很容易的识别出对象所指定的作用。分配一个ASCII码的名字给任务、 信号量、 互斥信号量、 事件标志组、 消息队列、 内存块、 软件定时器。对象的名字长度没有限制,但是必须以空字符结束。

 

posted @ 2018-07-16 19:48  西贡小傻  Views(174)  Comments(0Edit  收藏  举报