FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为10.3.1版。
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
任务调度机制是嵌入式实时操作系统的一个重要概念,也是其核心技术。对于可剥夺型内核,优先级高的任务一旦就绪就能剥夺优先级较低任务的CPU使用权,提高了系统的实时响应能力。不同于μC/OS-II,FreeRTOS对系统任务的数量没有限制,既支持优先级调度算法也支持轮换调度算法,因此FreeRTOS采用双向链表而不是采用查任务就绪表的方法来进行任务调度。
系统定义的链表和链表节点数据结构如下所示:
//定义链表结构 typedef struct xLIST{ unsigned portSHORPT usNumberOfItems; //usNumberOfItems为链表的长度,为0表示链表为空 volatile xListItem *pxHead; //pxHead为链表的头指针 volatile xListItem *pxIndex; //pxIndex指向链表当前结点的指针 volatile xListItem xListEnd; //xListEnd为链表尾结点 }xList; //定义链表结点的结构 struct xLIST_ITEM{ port Tick type; //port Type为时针节拍数据类型 xItem Value; //xItem Value的值用于实现时间管理,可根据需要选择为16位或32位 volatile struct xLIST_ITEM *pxNext; //指向链表的前一个结点 void *pvOwner; //指向此链表结点所在的任务控制块 void *pvContainer; //指向此链表结点所在的链表 };
什么情况下可以用 FreeRTOS ?
单片机也要用操作系统?如果以日常用的Windows, Linux, BSD这些,甚至是DOS,来代表操作系统的话,在单片机上运行操作系统时候个很荒诞的想法——因为对大多数单片机,RAM实在太少了。而 FreeRTOS 并不是要提供一个在单片机上运行软件的平台,把软件一个个安装到它上面,供用户选择运行什么,它没有用户界面;它不是一个管家,也不带任何硬件驱动程序,也没有文件系统服务提供。FreeRTOS只是一个操作系统内核,它首先提供了操作系统最重要的特性:任务调度。
也就是说,有了FreeRTOS,在单片机上实现多任务会容易一些。这里至少有两层含义,一是多任务是否一定要用RTOS才可以实现? 当然不是。对于单片机开发来讲,所有系统资源都是你的,在不同中断服务里面处理不同的任务并不是很困难的事情。第二,是否没有多任务就完全用不着RTOS? 这也得看具体情况,如何界定“任务”的概念了,一件复杂的事情在程序中也有可能划分为几个任务来处理。
开源的免费的小型实时内核,支持的处理器内核:ARM7,ARM9,CortexM3,ATMEL AVR32,AVR,MSP430等
功能介绍:
FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。
FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。
任务可以选择是否共享堆栈,并且任务没有数量限制。
消息队列,二值信号量,计数信号量。
时间管理
内存管理
FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行效率。
嵌入式系统基本概念:多任务,调度,上下文切换,实时应用和调度。
FreeRTOS与UCOS比较:
1:与ucosii不同,它是free的,ucosii不是free的,虽然它的代码是公开的。
2:它支持同优先级任务时间片调度,轮换调度算法,UCOS不允许任务使用相同优先级。
3:任务数目FREERTOS没有限制,UCOS有限制,一般64个。
4:freertos既可以配置为可抢占内核也可以配置为不可抢占内核。 UCOS是可抢占。
5:内核ROM和耗费RAM都比uCOS 小,特别是RAM。 这在单片机里面是稀缺资源,uCOS至少要5K以上,而freeOS用2~3K也可以跑的很好。
6:freeRTOS 可以用协程(Co-routine),减少RAM消耗(共用STACK)。uCOS只能用任务(TASK,每个任务有一个独立的STACK)。
7:比uSOS简单,任务间通讯freeRTOS只支持Queque, Semaphores, Mutex。 uCOS除这些外,还支持Flag, MailBox.
8:uCOS可靠性更高,而且耐优化,freeRTOS 在我设置成中等优化的时候,就会出问题。
9:freertos的任务挂起与ucosii也不大一样。它把 所有挂起的任务加到xSuspendedTaskList中,而且一旦调用vTaskSuspend()函数挂起一个任务,该任务就将从所有它原先连入的链表中删除(包括就绪表,延时表和它等待的事件链表),也就是说,和 ucosii不同,一旦一个任务被挂起,它将取消先前它的延 时和对事件的等待。ucosii中是不同的,在ucosii里 面一个任务被挂起仅仅是把任务的状态或上一个OS_STAT_SUSPEND并从就绪表中删除,如果先前这个任务正在等待某事件,则并不取消等待。
FreeRTOS是一个迷你操作系统内核的小型嵌入式系统。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。
功能和特点
混合配置选项
提供一个高层次的信任代码的完整性
目的是小,简单易用
以开发C,非常便携代码结构
支持两项任务和共同例程
强大的执行跟踪功能
堆栈溢出检测
没有软件任务的限制数量
没有软件优先事项的限制数量
没有施加的限制,优先转让,多个任务可以分配相同的优先权
队列,二进制信号量,计数信号灯和递归通信和同步的任务
Mutexes优先继承权
免费开发工具
免费嵌入式软件的源代码
从一个标准的Windows主机交叉发展