TOS的原理与实现.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式操作系统FreeRTOS的原理与实现 在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统 (RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保 证系统的实时性和可靠性。由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、 embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对于C/OS-II、embOS等 商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度 策略灵活的特点,可以方便地移植到各种单片机上运行,其必威体育精装版版本为2.6版。 1 FreeRTOS操作系统功能 作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列 、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS内核支持优先级调度算法,每个 任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运 行。 FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级 任务就绪的情况下,同一优先级的任务共享CPU的使用时间。 FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当FreeRTOS被设置为可剥 夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实 时性的要求;当FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行 任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行效率。 2 FreeRTOS操作系统的原理与实现 2. 1任务调度机制的实现 任务调度机制是嵌入式实时操作系统的一个重要概念,也是其核心技术。对于可剥夺型内核,优先 级高的任务一旦就绪就能剥夺优先级较低任务的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 por

文档评论(0)

***** + 关注
实名认证
文档贡献者

本账号下所有文档分享可拿50%收益 欢迎分享

1亿VIP精品文档

相关文档