2. FreeRTOS与CMSIS标准¶
2.1. FreeRTOS¶
FreeRTOS由美国的Richard Barry于2003年发布,Richard Barry是FreeRTOS的拥有者和维护者,在过去的十多年 中FreeRTOS历经了十几个版本,与众多半导体厂商合作密切,累计开发者数百万,是目前市场占有率最高的RTOS。
FreeRTOS于2018年被亚马逊收购,改名为AWS FreeRTOS,版本号升级为V10,且开源协议也由原来的GPLv2+修改为 MIT,与GPLv2+相比,MIT更加开放,你完全可以理解为是为所欲为的免费。V9以前的版本还是维持原样,V10版本相 比于V9就是加入了一些物联网相关的组件,内核基本不变。亚马逊收购FreeRTOS也是为了进军眼下炒的火热的物联网 和人工智能。
2.1.1. FreeRTOS收费问题¶
2.1.1.1. FreeRTOS¶
FreeRTOS是一款“开源免费”的实时操作系统,这里说到的开源,指的是你可以免费得获取到FreeRTOS的源代码, MIT许可协议赋予了我们更大的权利与更少的限制,无论是个人还是公司,都可以免费地使用,不需要掏一分钱。
2.1.1.2. OpenRTOS¶
FreeRTOS 和 OpenRTOS 拥有的代码是一样的,但是可从官方获取到的服务却是不一样的。FreeRTOS免费, OpenRTOS收费,它们的具体区别见表1-1。
表1-1FreeRTOS开源授权与OpenRTOS商业授权的区别
比较的项目 |
FreeRTOS |
OpenRTOS |
---|---|---|
是否免费 |
是 |
否 |
可否商业使用 |
是 |
是 |
是否需要版权费 |
否 |
否 |
是否提供技术支持 |
否 |
是 |
是否被法律保护 |
否 |
是 |
2.1.1.3. SaveRTOS¶
SaveRTOS也是基于FreeRTOS,但是SaveRTOS为某些特定的领域做了安全相关的设计,有关SaveRTOS获得的安全验证 具体见表1‑2。当然,SaveRTOS也是需要收费,人家这些安全验证可不是白做的。
表1‑2SaveRTOS获得的安全方面的验证
行业类目 |
验证编号 |
---|---|
工控 |
IEC 61508 |
铁路 |
EN 50128 |
医疗 |
IEC 62304/FDA 510K |
Nuclear |
IEC 61513、IEC62138、ASME NQA-1 |
汽车电子 |
ISO 26262 |
Process |
IEC 61511 |
航空 |
DO178B |
2.2. CMSIS标准¶
Cortex系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核, 不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的Cortex微控制器软件的兼容性问题, ARM与芯片厂商建立了CMSIS标准(Cortex MicroControllerSoftware Interface Standard)。
所谓CMSIS标准,实际是新建了一个软件抽象层。见图 CMSIS架构 。
CMSIS标准中最主要的为CMSIS核心层,它包括了:
内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由ARM公司提供。
设备外设访问层:提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供。
CMSIS实时系统API层: 封装并统一了各个实时操作系统的内核操作接口,主要由ARM公司提供。
CMSIS层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层, 可以为接口外设、实时操作系统提供简单的处理器软件接口,屏蔽了硬件差异,这对软件的移植是有极大的好处的。
市面上RTOS的种类很多,除了FreeRTOS还有uCOS、RTX、RT-thread等等,每个RTOS操作系统都有自己的API接口, 它们的内核组件功能都是类似的,ARM公司为了统一操作系统、降低嵌入式开发的门槛提供了CMSIS-RTOS, CMSIS-RTOS将各个RTOS的接口统一起来,提供CMSIS-RTOS的接口供使用者使用,从而提高代码的移植性以及开发效率。
CMSIS-RTOS的官方地址:https://www.keil.com/pack/doc/CMSIS/RTOS2/html/index.html
本教程主要使用STM32CubeIDE作为我们的集成开发环境,其中包含了由CMSIS-RTOS封装的FreeRTOS的中间件, 在使用STM32CubeIDE配置FreeRTOS方便快速,仅凭借这点我们完全有理由去掌握CMSIS-RTOS相关的API, 在FreeRTOS的基础上封装CMSIS-RTOS接口(在实现上也是用过调用FreeRTOS接口), 不仅提高代码的移植性以及开发效率,在未来当越来越多的RTOS适配了CMSIS-RTOS接口之后, 我们就能够在不同的实时操作系统内核上无缝切换了。
经过CMSIS-RTOS封装后的API,并不能完全展示出FreeRTOS的全部特性,只是封装RTOS共性的内容。 FreeRTOS具有一些自己的特性,如任务通知、内存池管理等,等到具体的章节时我们再详细介绍。