专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

uCosIII 学习

作者:佚名   来源:本站原创   点击数:  更新时间:2014年08月17日   【字体:

本人前言: 

很久没有练习英语了,本想发点时间在工作之余,翻译一下μC/OS III用户手册,发现还是有点吃力,于是乎,参见网络上的嘉兴学院的屈环宇同学的译本,谢谢!

前言
做为Micrium 公司推出的第三代操作系统, μC/OS III支持现代的实时内核所期待的大部分功能;
μC/OS III是一个可裁剪、可固化、基于优先级的实时内核,支持例如资源管理、同步、任务间的通信等等。同时μC/OS III也具备一些很有特色的功能,是很多的其他的实时内核所不具备的,比如完备的实际测量性能、直接发送信号或消息到任务、任何可同时等待多个内核对象等。
与第二代μC/OS II相比,μC/OS III更加优秀,μC/OS III中删除或更新了μC/OS II中很少使用的一些功能;添加了更高效的功能和服务,比如时间片轮转调度(round robin)等,μC/OS II最多支持64个任务,而μC/OS III在理论上任务数量没有限
 

第一章  介绍

  实时系统
软实时系统和硬实时系统的区别在于一旦没有在规定的时间内完 成任务所导致后果的严重性。超过时限后所得到的结果即使正确也可 能是毫无作用的。 硬实时系统中,运算超时是不允许发生的。在很多情况下,超时 会导致巨大的灾难,会威胁人们的生命安全。但是在软实时系统中, 超时不会导致严重后果。
 
  前后台系统
简单的小型系统设计一般是基于前后台的或者无限循环的系统。 包含一个无限循环的模块实现需要的操作(后台)。中断处理程序实 现异步事件(前台)。前台也叫做中断级,后台也叫作任务级。
  多数高产量低成本微控制器的应用软件(例如微波炉,电话玩具等)都是基于前后台系统的。
  
  实时内核
  实时内核是一个能管理MPU、MCU、DSP时间和资源的软件。
  实时内核的应用包括迅速地响应,可靠地完成工作的各个部分。任务(也叫做线程)是一段简单的程序,运行时完全地占用CPU。在单CPU中,任何时候只有1个任务被执行。
  内核的责任是管理任务,也做多任务处理。多任务处理的作用是协调和切换多个任务依次享用CPU。多任务处理最大化CPU的功能同时会让我们感觉是多个CPU在同时运行。多任务处理也有利于处理模块化的应用。多任务处理一个最重要的方面在于它允许程序员管理复杂的实时应用。在多任务处理中程序员可以简单的维护和升级产品。
  uC/OS-III是一个抢占式内核,这意味着uC/OS-III总是执行最重要的就绪任务,
  uC/OS-III内核也负责管理任务间的交流,系统的资源(内存和I/O)。
  系统中加入内核需要额外的支出,因为内核提供服务时需要时间去处理。大多数的额外支出取决于服务的调用频繁度。在一个优秀的设计中,内核占用CPU的时间介于2%到4%之间。因为uC/OS-III是一个软件,添加到目标系统中需要额外的ROM和RAM。低档的单片机很有可能不支持像uC/OS-III那样的实时内核,因为它只有很少的RAM可供访问。uC/OS-III内核需要1K到4K之间的RAM,加上每个任务自己所需的堆栈空间。至少有4K大小RAM的处理器才有可能成功移植uC/OS-III。最后,为了更好地使用CPU,uC/OS-III提供了大约70种常用的服务。当用过像uC/OS-III那样的具有实时内核的系统后,你将不会再去使用前后台系统了。
  实时系统(RTOS)
  一个实时系统通常包括一个实时内核以及其他高级的服务,例如:文件管理,堆栈协议,图形用户接口等等。大多数服务都是跟I/O有关的。
  Micrium提供了RTOS一套完整的组件,包括uC/FS、uC/TCP-IP、uC/GUI、uC/USB等。这些组件大部分都可以单独执除了uC/TCP-IP。实时内核在应用中不是必须的。事实上,用户可以单独选择您的应用所需用的组件。
  uC/OS-III
  uC/OS-III是一个可扩展的,可固化的,抢占式的实时内核,它管理的任务个数不受限制。它是第三代内核,提供了现代实时内核所期望的所有功能包括资源管理、同步、内部任务交流等。uC/OS-III也提供了很多特性是在其他实时内核中所没有的。比如能在运行时测量运行性能,直接得发送信号或消息给任务,任务能同时等待多个信号
量和消息队列。
  以下列出uC/OS-III的特点:
  源代码、应用程序接口(API)、抢占式多任务处理、时间片轮转调度、快速响应中断、确定性的、可扩展的、易移植的、可固化的、可实时配置的、任务数无限制、优先级数无限制、内核对象数无限制、各种系统服务、互斥信号量(Mutexes)、嵌套的任务停止、软件定时器、挂起多个对象、任务信号量、任务消息、任务寄存器、错误检测、内置的性能测量、可优化、死锁预防、任务级的时基处理、用户可定义的钩子函数、时间戳、嵌入的内核调试器、对象名称。
  时间片轮转调度uC/OS-III允许多个任务拥有相同的优先级。当多个相同优先级的任务就绪时,并且这个优先级是目前最高的。uC/OS-III会分配用户定义的时间片给每个任务去运行。每个任务可以定义不同的时间片。当任务用不完时间片时可以让出CPU给另一个任务。
  任务数无限制uC/OS-III对任务数量无限制。实际上,任务的数量限制于处理器能提供的内存大小。每一个任务需要有自己的堆栈空间,uC/OS-III在运行时监控任务堆栈的生长。uC/OS-III对任务的大小无限制,
  优先级数无限制uC/OS-III对优先级的数量无限制。然而,配置uC/OS-III的优先级在32到256之间已经满足大多数的应用了
  内核对象数无限制uC/OS-III支持任何数量的任务、信号量、互斥信号量、事件标志组、消息队列、软件定时器、内存分区。用户在运行时分配所有的内核对象
  互斥信号量(Mutexes):互斥信号量用于资源管理。它是一个内置优先级的特殊类型信号量,用于消除优先级反转。互斥信号量可以被嵌套,因此,任务可申请同一个互斥信号量多达250次。当然,互斥信号量的占有者需要释放同等次数。
  嵌套的任务停止:uC/OS-III允许任务停止自身或者停止另外的任务。停止一个任务意味着这个任务将不再执行直到被其他的任务恢复。停止可以被嵌套到250级。换句话说,一个任务可以停止另外的任务多达250次。当然,这个任务必须被恢复同等次数才有资格再次获得CPU。
  软件定时器:可以定义任意数量的一次性的、周期性的、或者两者兼有的定时器。定时器是倒计时的,执行用户定义的行为一直到计数减为0。每一个定时器可以有自己的行为,如果一个定时器是周期性的,计数减为0时会自动重装计数值并执行用户定义的行为。
  挂起多个对象:uC/OS-III允许任务等待多个事件的发生。特别的,任务可以同时等待多个信号量和消息队列被提交。等待中的任务在事件发生的时候被唤醒。
  任务信号量:uC/OS-III允许ISR或者任务直接地发送信号量给其它任务。这样就避免了必须产生一个中间级内核对象如一个信号量或者事件标志组只为了标记一个任务。提高了内核性能
  任务消息:uC/OS-III允许ISR或者任务直接发送消息到另一个任务。这样就避免产生一个消息队列,提高了内核性能。
  内置的性能测量:uC/OS-III有内置性能测量功能。能测量每一个任务的执行时间,每个任务的堆栈使用情况,任务的执行次数,CPU的使用情况,ISR到任务的切换时间,任务到任务的切换时间,列表中的峰值数,关中断、锁调度器平均时间等。
  任务寄存器:每一个任务可以拥有用户可定义的任务寄存器,不同于CPU寄存器。
  可优化:uC/OS-III有内置性能测量功能。能测量每一个任务的执行时间,每个任务的堆栈使用情况,任务的执行次数,CPU的使用情况,ISR到任务的切换时间,任务到任务的切换时间,列表中的峰值数,关中断、锁调度器平均时间等。
  用户可定义的钩子函数: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(探针)在运行时显示信息。
 





μC/OS III 的目录和文件:



F2-1(1)应用代码包括与工程、产品相关文件。为了方便,这些被简单地叫做APP.C和APP.H。Main()函数应该在APP.C代码中
F2-1(2)半导体厂家通常会提供库函数以控制那些CPU或MCU的外设。这些库非常有用并且高效。因为对这些文件没有规定。所以假定为*.C,*.H。
F2-1(3)板级支持包通常被用来初始化目标板。例如打开或关闭LED、继电器、读取开关值、读取温度传感器等。
F2-1(4)这些是uC/OS-III的与处理器无关的代码。这些代码都是高度遵循ANSIC标准。
F2-1(5)这些uC/OS-III代码用于适应不同架构的CPU,在名为port的文件夹中。uC/OS-III源于uC/OS-II。uC/OS-II能移植成功的,只要稍有改动便能移植uC/OS-III。详见附录C。
F2-1(6)在Micrium,我们喜欢去总结CPU的功能。这些包括中断的使能和除能。CPU_???类型的文件都是独立于CPU的,在编译时用到,而且可能非常有用。
F2-1(7)uC/LIB是一系列的源文件,提供了常用基本的功能如内存拷贝,字符串,ASCII相关的函数。一些可以代替编译器提供的stdlib的功能。这些文件是应用与应用间,编译器与编译器间可移植。uC/OS-III不需要这些文件,但是uC/CPU需要。
F2-1(8)uC/OS-III功能的配置文件(OS_CFG.H)包含在应用中,OS_CFG_APP.H定义了uC/OS-III所需的变量类型大小、数据的结构、空闲任务堆栈的大小、时钟速率、内存池大小等。
 
 
应用代码
 
如果Micrium提供了例子。那么它将被包含在如下的目录结构。
\Micrium
\Software
\EvalBoards
\
\
\
\
\*.*
\Micrium
这是我们存放软件或工程的地方,通常位于电脑的根目录。
\Software
子目录中是软件成分。
\EvalBoards
子目录中包含了评估版的工程。
\
制造商的名字名字中不包括"<"和">"。
\
评估板的名字。Micrium通常命名为uC-Eval-xxxx。用CPU或MCU
类型替代''xxxx''。
\
代码所用编译器的名字
\
工程名。例如,uC/OS-III工程会被命名为"OS-Ex1"。"-Ex1"表明
工程中值包含uC/OS-III。命名为OS-Probe-Ex1表示工程中包含
uC/OS-III和uC/Probe。
\*.*
这些是工程的源文件,main文件可以被命名为APP*.*。目录中也
包括配置文件OS_CFG.H,OS_CFG_APP.H以及其它需要的源文件。
 
CPU
在这个目录中,你会找到半导体厂商提供的外设库文件。
\Micrium
  \Software
    \CPU
       \
          \
\*.*
板级支持包(BSP)
板级支持包通常是目标器件的特殊配置。实时上,写得好的话,
BSP将适用于多个工程
\Micrium
\Software
\EvalBoards
\
\
\
\BSP
\*.*
各目录中有哪些文件都可以参考用户手册,加以了解。
关闭窗口