FreeRTOS与μC/OS—III内核分析及选型研究
2018-01-03杨玥邵浩然张索非
杨玥 邵浩然 张索非
【摘 要】FreeRTOS与μC/OS-III是当今主流实时操作系统的代表,使用量位于嵌入式应用前列。从任务管理、同步与通信、时间管理及软件定时器、内存管理、中断管理等方面分析FreeRTOS与μC/OS-III内核。介绍了FreeRTOS和μC/OS-III授权方式,并说明了μC/OS-III符合行业认证标准情况。分析了行业因素、自身开发实力、可利用资源以及成本等方面的影响,为实时操作系统选型提供思路。
【关键词】FreeRTOS;μC/OS-III;实时操作系统
中图分类号: TP316.2 文献标识码: A 文章编号: 2095-2457(2018)24-0011-003
DOI:10.19694/j.cnki.issn2095-2457.2018.24.005
【Abstract】Today,FreeRTOS and μC/OS-III are the representatives of the mainstream real-time operating systems, and they are used by many embedded projects.FreeRTOS and μC/OS-III kernels are analyzed from the aspects of task management,synchronization and communication,time management and software timer,memory management and interrupt management.The licensing methods of FreeRTOS and μC/OS-III are introduced,and the situation of μC/OS-III compliance with some certification standards is explained.This paper analyzes the influence of industry factors, development ability,available resources and cost,and provides ideas for the selection of real-time operating system.
【Key words】FreeRTOS;μC/OS-III;RTOS
0 引言
嵌入式系统相关技术在当今发展迅速,嵌入式设备渗透到生产、生活的方方面面。很多嵌入式系统也是实时系统,实时系统不仅要求计算结果正确,而且要求结果具有时效性[1]。嵌入式系统包括硬件和软件,其硬件主要依赖各种类型处理器,包括微控制器(Microcontroller Unit,MCU)、微处理器(Microprocessor Unit,MPU)、数字信号处理器(Digital Signal Processor,DSP)等。
嵌入式系统软件,对于简单系统控制逻辑不复杂、计算复杂度较小,可以采用前臺/后台系统(Foreground/Background System)[2],即一个应用包含一个无限循环,这个循环调用模块执行相应操作(后台),而中断服务例程(Interrupt Service Routine,ISR)处理异步事件(前台)。显然对于复杂的嵌入式实时系统仅采用前台/后台系统设计方式是无法实现的,因此需要采用嵌入式实时操作系统(Embedded Real-time Operation System,RTOS)。RTOS是嵌入式系统中的核心软件,包括系统内核、底层驱动软件、设备驱动接口、通信协议处理软件等,甚至还包括交互界面[3]。RTOS用于管理处理器的时间和资源,采用RTOS使得应用软件开发更加容易,软件便于维护的同时提高了系统稳定性和可靠性。
当前的RTOS种类很多,比较常用的有FreeRTOS、μC/OS-II(III)、RT Linux、VxWorks等等。FreeRTOS是开源软件,而μC/OS-II(III)是商业软件。FreeRTOS和μC/OS-III用户数量领先[4]并且各具特色,因此针对这两种嵌入式实时操作系统进行分析,对新入门的嵌入式软件开发人员理解RTOS内核有一定帮助。嵌入式应用软件开发之初还存在RTOS选型问题,论文通过对影响选型的几个因素进行分析,为RTOS选型提供依据。
1 FreeRTOS、μC/OS-III内核分析
RTOS内核的基本功能包括任务管理、同步与通信、时间管理及软件定时器、内存管理、中断管理等。下面在阅读文献[5,6]并理解两种操作系统内核源码的基础上从各个功能方面分析FreeRTOS和μC/OS-III内核。
1.1 任务管理
“任务(task)”是RTOS中的术语,这里的“任务”类似于通用操作系统中的进程或线程[7]。RTOS中任务管理包括任务创建、改变任务优先级、任务删除、任务挂起、任务恢复,μC/OS-III和FreeRTOS都有相应函数用于任务管理。FreeRTOS的任务创建函数xTaskCreate()有6个参数:任务函数、任务名字、任务堆栈大小、传递给任务函数的参数、任务优先级、任务句柄。然而,μC/OS-III的任务创建函数OSTaskCreate()有13个参数,这些参数中除了与xTaskCreate()前5个基本相同的参数外,还有任务控制块指针、任务堆栈基地址指针、堆栈水印限制、任务可接受消息最大数量、时间份额、用作任务控制块扩展的内存地址指针、选项标志位、错误代码指针。任务创建函数参数数量的不同其实反映了两种RTOS实现细节的差异。
嵌入式实时系统通常运行多个任务,因此存在“调度”问题,这也是内核的主要职责之一,即决定轮到哪个任务运行。调度机制分为优先级抢占式调度和时间片轮转调度,FreeRTOS与μC/OS-III内核调度都支持这两种机制。对于不同优先级任务采用优先级抢占式调度,而对于相同优先级任务采用时间片轮转调度,并且对于优先级数量、相同优先级任务数量都不做限制。
1.2 同步与通信
应用系统包含若干任务和ISR,任务之间、任务与ISR以及ISR之间必须协调配合,为此RTOS提供任务同步与通信机制。FreeRTOS和μC/OS-III内核提供的同步与通信机制如表1所示。
表1中“√”表示具有该项机制,“╳”表示无该项机制。虽然从表1中可以看出μC/OS-III没有邮箱功能,但是μC/OS-III内核设计人员认为不需要邮箱,因为可以利用其它机制实现与邮箱等同的功能。
1.3 时间管理及软件定时器
操作系统都需要一个系统时钟,每个系统时钟周期都会触发内核执行一些系统调用。处理器硬件提供系统节拍定时器,英文名字为SysTick,内核则有ISR完成相应操作。此外,内核还必须维持相对时间和日历时间,而这些都属于内核时间管理的范畴。FreeRTOS和μC/OS-III内核都有相应函数实现获取当前节拍、设置节拍、相对延时、绝对延时等功能。
处理器都有硬件定时器,虽然功能强大,但是数量受限。FreeRTOS和μC/OS-III内核提供软件定时器,与硬件定时器或计数器没有关系。相比于硬件定时器,软件定时器的定时精度不太高,但是对于普通的、精度要求不高的周期性处理任务足够了。FreeRTOS和μC/OS-III内核对软件定时器的绝对数量没有限制,仅仅受限于内存大小,因为软件定时器需要占用一定的内存。
1.4 内存管理
应用程序可以使用标准C编译器提供的malloc()和free()函数分配和释放动态内存,但是在小型嵌入式实时系统中使用这两个函数比较危险,最终可能因为碎片而无法获得单个连续的内存区域。因此,μC/OS-III和FreeRTOS都有替代函数用于内存管理,但是两者思路和方法又有所不同。
在μC/OS-III中将一片连续内存区域作为一个分区,每个分区又分成整数个相同大小的内存块。一个应用可以有多个内存分区,每个分区有不同数量的内存块,不同分区的内存块大小可以不同。应用程序能够基于需求获得不同大小的内存块,但是特定内存块释放时必须还回到分配它的分区。这种内存管理方法不会产生碎片,除非程序运行溢出内存块。
而FreeRTOS内核设计者认为:不同嵌入式系统对于存分配和时序要求不同,某个具体的动态内存分配方案仅适用于一部分应用。因此,FreeRTOS将动态内存分配函数从内核代码库中移除,使得内存管理成为可移植层的一部分,允许应用程序编写者提供特定的动态内存管理实现代码。此外,FreeRTOS提供了5个实现案例,分别对应5个不同的内存分配机制和算法。
1.5 中断管理
中断是硬件机制,用于通知处理器发生了异步事件。当处理器识别到中断,保护现场并跳转到ISR中执行。ISR处理完事件,要么返回原先被中断的任务继续执行,要么执行更高优先级的任务。处理器通过开、关中断从而达到响应、忽略中断的目的。
在实时环境中,内核最重要指标之一是总的关中断时间。中断关闭时间尽可能短,因为关中断可能会影响中断响应时间并导致中断信号丢失。然而,实时系统中进入临界区必须关闭中断。另一个方面,ISR尽可能短,它的主要作用最好只是发送信号或者消息给相应任务去处理具体事务,从而减少中断处理时间。此外,某些处理器支持多个中断优先级并允许中断嵌套,还有处理器所有中断的向量对应唯一的中断处理程序,有些则每个中断向量对应一个中断处理程序。
FreeRTOS和μC/OS-III不强加特定的事件处理策略于应用设计,但是提供一组函数和机制使应用开发工程师以简单和可维护的方式实现某种中断管理策略。μC/OS-III内核提供了从ISR向任务发送信号、标志、消息的函数,而发送模式有两种:直接发布和延迟发布。FreeRTOS则提供延迟中断处理机制,即ISR仅记录中断原因并清除中断,而大量与中断相关的处理则通知相应任务完成,利用系统函数提高该任务的优先级,从而保证在中断退出后该任务最先得到执行。
2 版权及认证
2.1 内核、中间件版权
FreeRTOS内核是开源软件,内核采用GPL授权方式,并做了修改给出一个例外条件[8]:“即這些独立模块如果使用的是FreeRTOS API与FreeRTOS进行通信,并且这些独立模块不涉及内核和内核调度,也没有对任务、任务通信和信号量等内核功能作出改动,这些模块可以不按照GPL方式公开源代码。”FreeRTOS还开发了附在内核上的中间件FreeRTOS+TCP和FreeRTOS+FAT,这些同样是开源软件。而其他第三方公司开发的中间件,其授权不在FreeRTOS内核授权范围,授权方式由软件开发方确定。
μC/OS系列RTOS内核是商用软件产品,Micrium公司对其拥有知识产权。这些产品以源代码方式提供给客户,具有极大的适用性。但是,该产品不是免费软件,也不是开源软件,因此,不能免费使用。Micrium公司还提供μC/OS相关中间件μC/GUI、μC/FS、μC/TCP-IP、μC/USB、μC/Probe等,这些也是商业软件。
2.2 认证
FreeRTOS内核没有经过认证,然而FreeRTOS内核衍生出另一个系统SAFERTOS支持广泛的国际设计安全标准,但是SAFERTOS是商用软件。
μC/OS-III内核符合航空电子设备DO-178B Level E至Level A、工业控制IEC 61508 SIL 3、医药IEC 62304 Class A到Class C[FDA 510(k)]的认证标准。
3 嵌入式实时操作系统选型考虑因素
从以上分析来看,μC/OS-III和FreeRTOS作为RTOS内核,具备的功能基本相当。虽然不尽相同,但是纯粹从技术角度选择哪一种操作系统并没有太大差别。因此,行业因素、自身开发实力、可利用资源以及成本等方面成为选型的决定因素。
a)行业因素
除了通用产品,对于某些特定的行业应用产品,需要调查了解这些行业产品需要遵守哪些标准?需要做哪些认证?获得这些信息后,对照μC/OS-III和FreeRTOS所获得认证以及遵守的标准,然后做出选择。当然,行业中的主流选择也应该是考虑因素之一。
b)自身开发实力
如果自身开发能力有限,需要技术支持无疑需要选择商业软件μC/OS-III。而自主开发能力强,同时希望节省软件许可费用,可以选择开源FreeRTOS。开源软件没有技术支持,因此对自身技术实力要求较高。
c)可利用资源
对于产品开发,尽可能利用现有参考案例的设计代码、操作系统附加组件或者第三方组件,从而能够压缩开发周期,尽早将产品推向市场。因此,开发具体产品时优选具有更多可利用资源的RTOS。
d)成本
成本包括多个方面,软件许可费用仅是其中一部分,其他方面还应该包括开发时间成本、影响产品上市时间的间接成本。
4 结束语
FreeRTOS和μC/OS-III是当今主流的嵌入式实时操作系统内核,从内核功能角度对这两种操作系统进行分析可以看出两者实现思想和方式上的异同。因为FreeRTOS是开源软件,而μC/OS-III是商业软件,所以两者的授权方式不同,μC/OS-III还符合多种行业认证标准。两个实时操作系统内核虽然有差异,但是选型时应该主要考虑行业因素、自身开发实力、可利用资源以及成本等方面。
【参考文献】
[1]Abraham Silberschatz,Peter Baer Galvin,Greg Gagne. Operating System Concepts(Seventh Edition)[M].郑扣根译.北京: 高等教育出版社,2010.
[2]李志明,檀永,徐石民.STM32嵌入式系统开发实战指南FreeRTOS与LwIP联合移植[M].北京:机械工业出版社,2013.
[3]刘俞,刘恒,章懿雯.嵌入式实时操作系统中優先级反转问题的研究[J].齐齐哈尔大学学报(自然科学版),2017,33(1):5-8.
[4]2017 Embedded Markets Study Integrating IoT and Advanced Technology Designs,Application Development & Processing Environments[EB/OL].www.embedded.com.
[5]Mastering the FreeRTOS Real Time Kernel[EB/OL].www.freertos.com.
[6]μC/OS-III The Real-Time Kernel Users Manual[EB/OL].www.micrium.com.
[7]Raj Kamal.嵌入式系统体系结构、编程与设计(第3版)[M].郭俊凤译.北京:清华大学出版社,2017.
[8]何小庆.谈谈FreeRTOS及其授权方式[J].单片机与嵌入式系统应用,2015,10:3-4.