μC/OS-II 介绍
μC /OS-II是一个完整的、可移植、可固化、可裁剪的占先式实时多任务内核。μC/OS-II绝大部分的代码是用ANSI的C语言编写的,包含一小部分汇编代码,使之可供不同架构的微处理器使用。至今,从8位到64位,μC/OS-II已在超过40种不同架构上的微处理器上运行。μC/OS-II已经在世界范围内得到广泛应用,包括很多领域, 如手机、路由器、集线器、不间断电源、飞行器、医疗设备及工业控制上。实际上,μC/OS-II已经通过了非常严格的测试,并且得到了美国航空管 理局(Federal Aviation Administration)的,可以用在飞行器上。这说明μC/OS-II是稳定可靠的,可用于与人性命攸关的安全紧要(safety critical)系统。除此以外,μC/OS-II 的鲜明特点就是源码公开,便于移植和维护。
μC/OS-II 是一种基于优先级的抢占式多任务实时操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量,邮箱,消息 队列)和内存管理等功能。它可以使各个任务独立工作,互不干涉,很容易实现准时而且无误执行,使实时应用程序的设计和扩展变得容易,使应用程序的设计过程大为减化。
1 总线式数据采集系统的组成与功能
μC/OS-II采用总线巡检方式系统,硬件以模块化结构,实现32/64/128路模拟或数字量的集中监测,整机采用微机处理技术和通信控制技术,并采用嵌入式内核,智能化程度高,工作性能稳定,测量高,通用性强。
1.1 系统组成
该系统的硬件组成如图1所示。
现场监测通道状态以总线方式,通过总线处理单元传送到中央控制单元进行数据采集与处理,其中MCU采用具有10位A/D转换器的80C196KB。
1.2 系统功能
μC/OS-II可以对各通道的工作参数、状态进行即时修改设定,并可以通过面板LED实时显示32/64/128路通道的工作状态,同时各通道的实时参数通过LCD进行逐屏显示。对发生报警的信道可以通过打印处理单元进行打印输出、声光报警及显示。μC/OS-II采用总线巡检方式,对各信道工作状态进行远程数据采集并进行集中数据处理。为进一步满足智能化管理的需要,具有和计算机通信的功能,可以实现监测数据的共享。同时,也可以通过计算机对各信道的工作状态进行设置,进一步增强了该系统的智能化管理能力。
2 μC/OS-II在系统中的应用
μC/OS-II是一个源码开放的实时内核,且又有许多成功的先例可供参考,可针对不同的MCU/MPU,通过条件编译裁减其内核的大小,以满足系统要求。μC/OS-II是占先式内核,总是运行就绪条件下优先级的任务。可以管理64个任务,其中保留8个给系统,故应用程序多可以有56个任务。鉴于许多成功先例和系统成本,采用了80C196KB作为系统的MCU。通过实验,基本满足了系统所要求的实时性。
2.1 开发实时内核的流程
开发实时内核的流程如图2所示。
2.2 内核的移植
内核的移植也就是使实时内核能够在某个微处理器或微控制器上正常运行。移植工作包括以下几个内容:
(1)在OS_CPU.H中用#define定义三个宏,声明C96中能够识别的数据类型和堆栈的增长方向。
(2)在OS_CPU.C中用C语言重新编写以下几个函数:OSTaskStkInit、OSStartHighRdy、OSTaskCreateHook、OSTaskSwHook、OSTaskDelHook、OSTaskStatHook、OSTimeTickHook。
(3)在OS_CPU.ASM中编写几个汇编语言函数LoadCtx()、OSCtxSw()、OSIntCtxSw()、OSTickISR()。
2.3 实时内核在应用中应注意的问题
一个实时系统的软件由操作系统和应用程序构成。应用程序与操作系统的接口通过系统调用来实现。用80C196KB作为系统的MCU,只能用内部RAM作为TCB和所有系统存储器以及各个任务的工作和数据单元。因此一定要注意以下几点:
(1)为各个任务分配各自的堆栈区,该堆栈区既作为任务的工作单元,也作为任务控制块的保护单元。
(2)系统的任务控制块只存放各任务的堆栈指针,而任务的状态均存放于任务堆栈中。在一个任务退出运行时,通过中断把它的状态进栈,然后把它的堆栈指针保存于系统的TCB中;再根据优先级取出优先级的已就绪任务的堆栈指针SP映象值送入SP中;执行中断返回指令转去执行新任务。
(3)各任务的数据和工作单元尽量用堆栈实现,这样可以允许各任务使用同一个子程序。使用堆栈实现参数传递并作为工作单元,而不使用地址的RAM,可实现可重入子程序。该子程序既可为各个任务所调用,也可以实现递归调用。
2.4 应用μC/OS-II实时内核的主要部分
(1)任务的分配
实时系统中的任务是个动态的概念。μC/OS-II相对于其它产品不同点在于允许多个任务并行。根据该系统的性能指标和技术要求,将系统划分成八个任务。
(2)任务的调度
μC/OS-II的任务调度是按优先级进行的,根据各任务的实时性要求及重要程度,分别置它们的优先级为4、9、8、7、6、11、10、5。其中0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO这几个优先级保留以被系统使用。优先级号越低,任务的优先级越高。这样程序之间的通信可以通过按键中断置标志来实现,其中按键中断的优先级。当其它任务运行时,按键中断将使得系统服务转向运行按键中断处理子程序ISR。当中断处理子程序运行完后,转向判断就绪状态任务的优先级别。如果发现有比中断前任务优先级更高的任务,则转向执行该任务。先判断其运行标志,如果是‘非’,再重复上述过程。如果在执行完ISR后发现没有比中断前任务优先级更高的,则转向中断前的子程序继续运行。该系统的软件处理没有采用优先级转换的方法,而是采用状态置位判断的方法,这样可以减少程序的复杂性。
(3)任务间的通信
任务间通信简便的方法是使用共享数据结构。虽然共享数据区法简化了任务间的信息交换,但是必须保证每个任务在处理共享数据时的排它性,以避免竞争和数据的破坏。通常与共享资源打交道时,使之满足互斥条件一般的方法有以下几种:
·关中断;
·使用测试并置位;
·禁止任务切换;
·利用信号量。
在本系统中采用了前两种。关中断是一种简单快捷的方式,也是在中断服务子程序中处理共享数据结构的方法。要注意的是:关中断的时间要尽量短,以免影响操作系统的中断处理。其应用模式如下:
void Function(void)
{
OS_ENTER_CRITICAL();
…… /*在此处理共享数据*/
OS_EXIT_CRITICAL();
}
测试并置位方式需要有一个全局变量,约定好先测试该变量;如果是约定的数值,则执行该任务,否则不执行该任务。这种方法称测试并置位,或TAS。其应用程序如下:
Disable interrupts /*关中断*/
If ('Access Variable' is 0){ /*若资源不可用,标志为0*/
Set variable to 1; /*置资源不可用,标志为1*/
Reenable interrupts; /*重开中断*/
Access the resource; /*处理该资源*/
Disable interrupts; /*关中断*/
Set the 'Access Variable' back to 0;/*清资源不可使用,标志为0*/
Reenable interrupts; /*重新开中断*/
}else { /*否则*/
Reenable interrupts; /*开中断*/
/*资源不可使用,以后再试*/
}
(4)时钟节拍
时钟节拍是特定的周期性中断,根据本系统的性能指标,取1毫秒。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。另外,系统信息的定时显示需要系统每隔一定的时钟节拍显示。
(5)存储空间的分配
为了减少操作系统的体积,只应用操作系统的任务调度、任务切换、信号量处理、延时及超时服务几部分。这样可使该操作系统的大小减小到3~5KB,再加上应用程序可达50KB左右。
因为每个任务都是独立运行的,每个任务都具有自己的栈空间。这样可以根据任务本身的需求来分配其RAM空间。
3 系统运行的实时性分析
在该系统中应用μC/OS-II实时内核,一是增强了系统运行的稳定性,更重要的是满足了系统测量所需的实时性要求。系统采用12MHz晶振,一条指令的周期是1微秒。以下时间的统计是将C语言编译为汇编语言后,根据其指令的多少而计算出来的。经统计如下:
·中断管理:共需3毫秒;
·内存管理:共需800微秒;
·信号量管理:共约4.5毫秒;
·任务管理:共需8毫秒;
·时钟管理:共需约20毫秒;
·杂项:约需1毫秒。
上述时间均是运行时间的大概统计,也就是均考虑有任务切换情况下的时间统计结果。在整个内核的应用上对一些函数进行了裁减,没有用的服务在预编译时屏蔽掉了,因此未计入统计时间。
用户定义函数:按键中断处理15毫秒,LCD显示一屏30毫秒,串行通信10毫秒,打印及声光报警400毫秒,信道巡检A/D采样与数据处理20毫秒,系统信息显示10毫秒,系统工作参数测量150毫秒,电源的切换与充电50毫秒。通过采用实时内核,在很大程度上保证了实时性要求。
μC/OS-II相对于其它产品具有明显的优势,相信它将会在未来大展宏图。
[1]. 80C196KB datasheet https://www.dzsc.com/datasheet/80C196KB_103574.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。