资源描述:
《嵌入式操作系统freertos的原理与实现_刘滨》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、嵌入式操作系统FreeRTOS的原理与实现u中国海洋大学刘滨王琦刘丽丽FreeRTOS是一个源码公开的免费的嵌入式实时操作系统,通过研究其内核可以更好地理解嵌入式操作摘要系统的实现原理。本文主要阐述FreeRTOS系统中的任务调度机制、时间管理机制、任务管理机制以及内存分配策略的实现原理,并指出FreeRTOS在应用中的优缺点。关键词RTOSFreeRTOS任务调度内存管理在嵌入式领域中,嵌入式实时操作系统正得到越来越念,也是其核心技术。对于可剥夺型内核,优先级高的任广泛的应用。采用嵌入式实时操作系统(RTOS)
2、可以更务一旦就绪就能剥夺优先级较低任务的CPU使用权,提合理、更有效地利用CPU的资源,简化应用软件的设计,高了系统的实时响应能力。不同于LC/OSII,Free缩短系统开发时间,更好地保证系统的实时性和可靠性。RTOS对系统任务的数量没有限制,既支持优先级调度算由于RTOS需占用一定的系统资源(尤其是RAM资源),法也支持轮换调度算法,因此FreeRTOS采用双向链表而只有LC/OSII、embOS、salvo、FreeRTOS等少数实时操不是采用查任务就绪表的方法来进行任务调度。系统定作系统能在小RAM单片机
3、上运行。相对于LC/OSII、义的链表和链表节点数据结构如下所示:embOS等商业操作系统,FreeRTOS操作系统是完全免费typedefstructxLIST{//定义链表结构的操作系统,具有源码公开、可移植、可裁减、调度策略灵unsignedportSHORTusNumberOfItems;活的特点,可以方便地移植到各种单片机上运行,其最新//usNumberOfItems为链表的长度,为0表示链表为空版本为2.6版。volatilexListItem*pxHead;//pxHead为链表的头指针volat
4、ilexListItem*pxIndex;//pxIndex指向链表当前结点的指针1FreeRTOS操作系统功能volatilexListItemxListEnd;//xListEnd为链表尾结点作为一个轻量级的操作系统,FreeRTOS提供的功能}xList;包括:任务管理、时间管理、信号量、消息队列、内存管理、structxLIST_ITEM{//定义链表结点的结构记录功能等,可基本满足较小系统的需要。FreeRTOS内portTickTypexItemValue;核支持优先级调度算法,每个任务可根据重要程度
5、的不同//xItemValue的值用于实现时间管理被赋予一定的优先级,CPU总是让处于就绪态的、优先级//portTickType为时钟节拍数据类型,最高的任务先运行。FreeRTOS内核同时支持轮换调度//可根据需要选择为16位或32位算法,系统允许不同的任务使用相同的优先级,在没有更volatilestructxLIST_ITEM*pxNext;高优先级任务就绪的情况下,同一优先级的任务共享//指向链表的下一个结点CPU的使用时间。volatilestructxLIST_ITEM*pxPrevious;Fre
6、eRTOS的内核可根据用户需要设置为可剥夺型//指向链表的前一个结点内核或不可剥夺型内核。当FreeRTOS被设置为可剥夺void*pvOwner;//指向此链表结点所在的任务控制块型内核时,处于就绪态的高优先级任务能剥夺低优先级任void*pvContainer;//指向此链表结点所在的链表务的CPU使用权,这样可保证系统满足实时性的要求;当};FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高FreeRTOS中每个任务对应于一个任务控制块优先级任务只有等当前运行任务主动释放CPU的使用权(TCB),其定
7、义如下所示:后才能获得运行,这样可提高CPU的运行效率。typedefstructtskTaskControlBlock{portSTACK_TYPE*pxTopOfStack;2FreeRTOS操作系统的原理与实现//指向任务堆栈结束处2.1任务调度机制的实现portSTACK_TYPE*pxStack;任务调度机制是嵌入式实时操作系统的一个重要概//指向任务堆栈起始处8200517unsignedportSHORTusStackDepth;//定义堆栈深度signedportCHARpcTaskName[ts
8、kMAX_TASK_NAME_LEN];//任务名称unsignedportCHARucPriority;//任务优先级xListItemxGenericListItem;//用于把TCB插入就绪链表或等待链表xListItemxEventListItem;//用于把TCB插入事件链表(如消息队列)unsignedportCHARucTCBNumber;//用于记录功能}