一、什么是 FreeRTOS ?

在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用 CPU 的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。

 

在嵌入式领域,FreeRTOS 是不多的同时具有实时性,开源性,可靠性,易用性,多平台支持等特点的嵌入式操作系统。目前,FreeRTOS 已经发展到支持包含 X86,Xilinx,Altera 等多达 30 种的硬件平台,其广阔的应用前景已经越来越受到业内人士的瞩目。

 

FreeRTOS 是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。由于 RTOS 需占用一定的系统资源(尤其是 RAM 资源),只有μC/OS-II、embOS、salvo、FreeRTOS 等少数实时操作系统能在小 RAM 单片机上运行。相对μC/OS-II、embOS 等商业操作系统,FreeRTOS 操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为 10.3.1 版。

 


作为一个轻量级的操作系统,FreeRTOS 提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS 内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU 总是让处于就绪态的、优先级最高的任务先运行。FreeRTOS 内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享 CPU 的使用时间。

 

FreeRTOS 的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当 FreeRTOS 被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的 CPU 使用权,这样可保证系统满足实时性的要求;当 FreeRTOS 被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放 CPU 的使用权后才能获得运行,这样可提高 CPU 的运行效率。

 

二、为什么要学习 RTOS?

作为基于 ARM7、Cortex-M3 硬件开发的嵌入式工程师,我一直反对使用 RTOS。不仅因为不恰当的使用 RTOS 会给项目带来额外的稳定性风险,更重要的是我认为绝大多数基于 ARM7、Cortex-M3 硬件的项目,还没复杂到使用 RTOS 的地步,使用状态机就足够了。

 

对于现代的微处理器,特别是资源相对丰富 ARM7、Cortex-M3 硬件来说,RTOS 占用的硬件资源已经越来越可以忽略。所以在当今环境下,我们无需担心 RTOS 会拖累性能。相反,RTOS 提供的事件驱动型设计方式,使得 RTOS 只是在处理实际任务时才会运行,这能够更合理的利用 CPU。在实际项目中,如果程序等待一个超时事件,传统的无 RTOS 情况下,要么在原地一直等待而不能执行其它任务,要么使用复杂(相对 RTOS 提供的任务机制而言)的状态机机制。如果使用 RTOS,则可以很方便的将当前任务阻塞在该事件下,然后自动去执行别的任务,这显然更方便,并且可以高效的利用 CPU。

 

三、安全地连接、编程、部署和管理低功耗设备

FreeRTOS 支持传输层安全性 (TLS v1.2),可以帮助您的设备安全连接到 AWS。您还可以轻松将常用的 IoT 功能编程到设备中,其中包括使用 Wi-Fi 或以太网等常见连接选项来帮助将设备配置到本地网络的软件库,或者使用低功耗蓝牙技术连接到移动设备。FreeRTOS 还提供了一个无线 (OTA) 更新库,通过增强功能或安全补丁来远程更新设备。它还具备代码签名功能,可以确保您的设备代码在部署和 OTA 更新过程中不会泄露。

 

四、几点初学者建议

第一点:初学者学习操作系统,那必须是先学习内核,学习内核处理的思想,跳出裸机处理的思想,那么选择的内核必然是由简单到深入。

 

第二点:学习内核的话,文档说明必须要丰富,目前有很多书是写 ucos 跟 FreeRTOS 的,很多人都觉得这两个 rtos 非常好,那人家做了那么多年,确实也是非常好的啦,ucos 上过火星;FreeRTOS 开源免费,是全球最多人使用的 rtos,我肯定不否认这些不好啦。但是我还是推荐国内的。ucos 实现太臃肿,安全做的非常好,很多情况都考虑了,但是作为初学者,你会有那么多情况产生吗,肯定不会的,没必要学。FreeRTOS 实现几乎都是通过宏定义提供给开发者,实现过程也是很直观明了,但是内核代码行数还是太多了,我不推荐(即使我的第一个 rtos 也是学习 FreeRTOS)。

 

第三点:目前 rt-thread 的书籍与例程非常丰富了,比如野火的《rt-thread 内核实现与应用开发实战指南》,比如 rt-thread 官方出版的《RT-Thread 编程指南》,都是很不错的资料。而 TencentOS tiny 资料较少,说不定我能给它整一个全网首发 TencentOS tiny 内核实现的系列文章

 

第四点:关于 rtos 内核,真的是一通百通的!!!各种 ICP 通信的同步、互斥、阻塞机制,真的是一样的处理思想,大同小异的实现过程,相信我。

 

五、工业应用程序

工业客户利用基于微控制器的设备,这些设备会生成关于业务关键型工作负载的数据。工业传感器、致动器、泵和自动化组件均使用微控制器,因为它们成本低、功耗低,并且可以执行实时操作。例如,石油钻塔上的单个泵由微控制器控制,如果出现故障,则可能会完全关闭。借助 FreeRTOS,这些客户可以通过直接连接到云来收集系统性能和压力方面的数据,并通过 AWS IoT Greengrass 在本地实时采取关键措施来防止出现此类破坏性中断。

 

FreeRTOS 可以帮助电器、可穿戴技术或智能照明制造商等消费产品公司针对各种产品和型号,将基于微控制器的设备开发、交付和维护过程标准化。FreeRTOS 提供单个微控制器操作系统,它可以支持具有不同功率和容量的各种微控制器硬件。这样,这些公司便可以专注于产品创新,无需面对跨多个产品线开发软件的复杂性。此外,通过 OTA 更新功能,FreeRTOS 还能安全更新使用中的现有消费产品的功能。