FreeRTOS与uCOS II均为嵌入式实时操作系统,各有优劣,本文为你仔细分析。
目前嵌入式主流实时系统(RTOS)有uCOS、FreeRTOS,之所以很多第三方库都有在FreeRTOS上的应用Demo,是因为FreeRTOS免费。
一、FreeRTOS比uCOS II优胜的地方:
1。内核ROM和耗费RAM都比uCOS 小,特别是RAM。这在单片机里面是稀缺资源,uCOS至少要5K以上, 而FreeRTOS用2~3K也可以跑的很好。
2。FreeRTOS 可以用协程(co-routine),减少RAM消耗(共用STACK)。uCOS只能用任务(TASK,每个任务有一个独立的STACK)。
3。FreeRTOS 可以有优先度一样的任务,这些任务是按时间片来轮流处理,uCOSII 每个任务都只有一个独一无二的优先级。因此,理论上讲,FreeRTOS 可以管理超过64个任务,而uCOS只能管理64个。
4。FreeRTOS 是在商业上免费应用。uCOS在商业上的应用是要付钱的。
二、FreeRTOS 不如uCOS的地方:
1。比uSOS简单,任务间通讯FreeRTOS只支持Queque, Semaphores, Mutex。uCOS除这些外,还支持Flag, MailBox。
2。uCOS的支持比FreeRTOS 多。除操作系统外,FreeRTOS只支持TCP/IP, uCOS则有大量外延支持,比如FS, USB, GUI, CAN等的支持。
3。uCOS可靠性更高,而且耐优化,FreeRTOS 在设置成中等优化的时候,就会出问题。
总结:
FreeRTOS功能更丰富、更易用;uC/OS-II的实时性更好、效率更高、健壮性更好。
后记补充说明:
早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念。通常把程序分为两部分:前台系统和后台系统。简单的小系统通常是前后台系统,这样的程序包括一个死循环和若干个中断服务程序:应用程序是一个无限循环,循环中调用API函数完成所需的操作,这个大循环就叫做后台系统。中断服务程序用于处理系统的异步事件,也就是前台系统。前台是中断级,后台是任务级。
这里就是平时我们裸机的运行结果,现在比如我在运行task3,突然又想马上运行task1,这怎么办?前后台程序就会让后面的任务执行之后,再去执行task1,这样实时性受到影响。如果是裸机,要实现也可以,用中断,可是这样会让程序结构变得复杂,因为我想什么时候跳过就跳过,想什么时候执行就执行,所以固定的中断触发方式虽然也可以实现一些简单的跳转功能,但是当程序复杂之后,这样的裸机程序难以阅读和维护。这样在有操作系统的任务调度之后,就会让系统响应更具有实时性。
RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性。
实时操作系统又分为硬实时和软实时。硬实时要求在规定的时间内必须完成操作 ,硬实时系统不允许超时,在软实时里面处理过程超时的后果就没有那么严格。
在实时操作系统中,我们可以把要实现的功能划分为多个任务,每个任务负责实现其中的一部分,每个任务都是一个很简单的程序,通常是一个死循环。RTOS操作系统:FreeRTOS,UCOS,RTX,RT-Thread,DJYOS等。RTOS操作系统的核心内容在于:实时内核。
可剥夺型内核:
RTOS的内核负责管理所有的任务,内核决定了运行哪个任务,何时停止当前任务切换到其他任务,这个是内核的多任务管理能力。多任务管理给人的感觉就好像芯片有多个CPU,多任务管理实现了CPU资源的最大化利用,多任务管理有助于实现程序的模块化开发,能够实现复杂的实时应用。
可剥夺内核顾名思义就是可以剥夺其他任务的CPU使用权,它总是运行就绪任务中的优先级最高的那个任务。
FreeRTOS是一个可裁剪、可剥夺型的多任务内核,而且没有任务数限制。
FreeRTOS提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。FreeRTOS是用C和汇编来写的,其中绝大部分都是用C语言编写的,只有极少数的与处理器密切相关的部分代码才是用汇编写的,FreeRTOS结构简洁,可读性很强!最主要的是非常适合初次接触嵌入式实时操作系统学生、嵌入式系统开发人员和爱好者学习。
为什么需要学习这个操作系统: