用户中心

资讯 > 嵌入式系统

嵌入式操作系统FreeRTOS的原理与实现

来源:www.eaw.com.cn2008.03.27阅读 6883

   在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(rtos)可以更合理、更有效地利用cpu的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。由于rtos需占用一定的系统资源(尤其是ram资源),只有μc/os-ii、embos、salvo、freertos等少数实时操作系统能在小ram单片机上运行。相对于c/os-ii、embos等商业操作系统,freertos操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行CONTROL ENGINEERING China版权所有,其最新版本为2.6版。

1 freertos操作系统功能

     作为一个轻量级的操作系统www.cechina.cn,freertos提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。freertos内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,cpu总是让处于就绪态的、优先级最高的任务先运行。freert0s内核同时支持轮换调度算法,系统允许不同的任

务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享cpu的使用时间。

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

2 freertos操作系统的原理与实现

2. 1任务调度机制的实现

     任务调度机制是嵌入式实时操作系统的一个重要概念,也是其核心技术。对于可剥夺型内核www.cechina.cn,优先级高的任务一旦就绪就能剥夺优先级较低任务的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 xitem value;

//xitem value的值用于实现时间管理

//port tick type为时针节拍数据类型,

//可根据需要选择为16位或32位

volatile struct xlist_item * pxnext;

//指向链表的前一个结点

void * pvowner;//指向此链表结点所在的任务控制块

void * pvcontainer;//指向此链表结点所在的链表};

freertos中每个任务对应于一个任务控制块(tcb),其定义如下所示:

typedef struct tsktaskcontrolblock {

portstack_type  * pxtopofstack;

//指向任务堆栈结束处

portstack_type  * pxstack;

//指向任务堆栈起始处

unsigned portshort  usstackdepth;  //定义堆栈深度

signed portchar  pctaskname[tskmax_task_name_len];//任务名称

unsigned portchar  ucpriority;  //任务优先级

xlistitem xgenericlistitem;

//用于把tcb插入就绪链表或等待链表

xlistitem xeventlistitem;

//用于把tcb插入事件链表(如消息队列)

unsigned portchar 

版权声明:版权归控制工程网所有,转载请注明出处!
继续阅读

频道推荐

关于我们

控制工程网 & CONTROL ENGINEERING China 全球工业控制、自动化和仪器仪表领域的先锋媒体

CE全球

联系我们

商务及广告合作
任小姐(北京)                 夏小姐(上海)
电话:010-82053688      电话:18616877918
rendongxue@cechina.cn      xiashuxian@cechina.cn
新闻投稿:王小姐

关注我们的微信

关于我们 | 网站地图 | 联系我们
© 2003-2020    经营许可编号:京ICP证120335号
公安机关备案号:110102002318  服务热线:010-82053688