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;