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标准中最主要的为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

CMSIS_RTOS

本教程主要使用STM32CubeIDE作为我们的集成开发环境,其中包含了由CMSIS-RTOS封装的FreeRTOS的中间件, 在使用STM32CubeIDE配置FreeRTOS方便快速,仅凭借这点我们完全有理由去掌握CMSIS-RTOS相关的API, 在FreeRTOS的基础上封装CMSIS-RTOS接口(在实现上也是用过调用FreeRTOS接口), 不仅提高代码的移植性以及开发效率,在未来当越来越多的RTOS适配了CMSIS-RTOS接口之后, 我们就能够在不同的实时操作系统内核上无缝切换了。

经过CMSIS-RTOS封装后的API,并不能完全展示出FreeRTOS的全部特性,只是封装RTOS共性的内容。 FreeRTOS具有一些自己的特性,如任务通知、内存池管理等,等到具体的章节时我们再详细介绍。