
FreeRTOS是一个迷你的实时操作系统内核,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器和协程等,可基本满足较小系统的需要。
由于RTOS需占用一定的系统资源,尤其是存储(RAM)资源,只有µC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小内存(RAM)单片机上运行。相对于 µC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁剪和调度策略灵活的特点,可以方便地移植到各种单片机上运行。
FreeRTOS操作系统是完全开源的操作系统,该操作系统已经在数百万设备上部署,号称是“市场上领先的嵌入式实时操作系统”,能够为微控制器和微处理器提供很好的解决方案。
FreeRTOS在嵌入式开发平台中可以与Linux相匹敌,它特别适用于开发物联网终端设备。FreeRTOS缺少Linux功能,比如设备驱动程序、用户账户以及高级的网络和内存管理。然而,它占用的资源比Linux少得多,更不用说与VxWorks这样的主流实时操作系统相比了,它还提供开源GPL许可证。FreeRTOS可以在内存小于0.5KB, ROM为5~10KB的设备上运行,不过其与TCP/IP架构结合使用也很常见,这种场景下它需要24KB内存和60KB闪存。
FreeRTOS任务可选择是否共享堆栈,并且没有任务数量限制,多个任务可以分配相同的优先权。相同优先级任务的轮转调度,同时可设成可抢夺内核或不可抢夺内核。
FreeRTOS的移植主要需要改写3个文件:portmacro.H、port.c和port.asm。
早期的嵌入式开发没有嵌入式操作系统的概念,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念。通常把程序分为两部分:前台系统和后台系统。简单的小系统通常是前后台系统,这样的程序包括一个死循环和若干个中断服务程序:应用程序是一个无限循环,循环中调用API函数完成所需的操作,这个大循环就叫做后台系统;中断服务程序用于处理系统的异步事件,也就是前台系统。前台是中断级,后台是任务级。

裸机软件工作过程
比如现在我在运行Task3,突然又想马上运行Task1,该怎么办?前后台程序会让后面的任务执行之后,再去执行Task1,这样实时性会受到影响。如果是裸机,要实现也可以,使用中断来实现,可是这样会让程序结构变得复杂,因为想什么时候跳过就跳过,想什么时候执行就执行,所以固定的中断触发方式虽然也可以实现一些简单的跳转功能,但是当程序复杂之后,这样的裸机程序难以阅读和维护。这样在有操作系统的任务调度之后,就会让系统响应更具有实时性。
RTOS(Real Time Open System,实时操作系统),强调的是实时性。实时操作系统又分为硬实时操作系统和软实时操作系统。硬实时操作系统要求在规定的时间内必须完成操作,不允许超时,在软实时操作系统里面处理过程超时的后果就没有那么严格。在实时操作系统中,我们可以把要实现的功能划分为多个任务,每个任务负责实现其中的一部分,每个任务都是一个很简单的程序,通常是一个死循环。
RTOS操作系统的核心内容在于实时内核。
RTOS的内核负责管理所有的任务,内核决定了运行哪个任务,何时停止当前任务切换到其他任务,这个是内核的多任务管理能力。多任务管理给人的感觉就好像芯片有多个CPU,实现了CPU资源的最大化利用,有助于实现程序的模块化开发,实现复杂的实时应用。
可剥夺内核,顾名思义就是可以剥夺其他任务的CPU使用权,它总是运行就绪任务中的优先级最高的那个任务。

内核可剥夺型软件运行过程
FreeRTOS是一个可裁剪、可剥夺型的多任务内核,而且没有任务数限制,其提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。FreeRTOS是用C语言和汇编语言来写的,其中绝大部分都是用C语言编写的,只有极少数与处理器密切相关的部分代码才是用汇编语言写的。FreeRTOS结构简洁,可读性很强,最主要的是非常适合初次接触嵌入式实时操作系统的学生、嵌入式系统开发人员和爱好者学习。为什么需要学习这个操作系统,主要原因有以下几点:
● 因为FreeRTOS开源、免费,完全可以免费用于商业产品,开放源码更便于学习操作系统原理,从全局掌握FreeRTOS运行机理,以及对操作系统进行深度裁剪以适应自己的硬件。
● FreeRTOS是很多第三方组件指定系统。
● FreeRTOS普及度较高,占有率约22%,有大量开发者在使用,并保持高速增长趋势。据2011年至2017年的EEtimes杂志嵌入式系统市场报告显示,FreeRTOS在RTOS内核使用榜和RTOS内核计划使用排行榜上都名列前茅。更多的人使用FreeRTOS,可以及时发现BUG,增强稳定性。
● SafeRTOS便是基于FreeRTOS而来,前者是经过安全认证的RTOS,因此对于FreeRTOS的安全性也比较有信心。
● 简单。FreeRTOS内核只有3个.c文件,全部围绕着任务调度,没有任何其他干扰,便于理解和学习。而且,FreeRTOS根本不需要其他繁多的功能,只要任务调度就够了。
● 文档齐全,在FreeRTOS官方网站上,可以找到所有需要的资料。FreeRTOS学习方法建议如下:
● 多练,不要只看书,或者只看资料。一定要实际动手写代码练习,多在开发板上练习。
● 在学习的过程中难免会遇到看不懂的地方,先学会怎么调用FreeRTOS的API函数。等以后有时间了再回过头来重新学习。
● 对C语言的要求,需要了解指针、结构体、数据结构中的链表等。
● 学习的资料来源主要是FreeRTOS的官方网站(www.freertos.org)和源代码。
FreeRTOS的创始人RichardBarry编写了大量的移植代码和配套文档,沿着Richard Barry铺好的路前进,没什么是困难的。随着物联网的发展,未来的嵌入式产品必然更为复杂、连接性更强,需要更丰富的用户界面。


