- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
uCOSIII任务间通信研究
uCOSIII任务间通信研究
摘要:uC/OS-III是Micrium公司于2011年8月1日发布的占先式硬实时系统,uC/OS-III任务间的通信可以通过全局变量、信号量、任务内建消息队列、外部消息队列、事件标志组实现。
关键词:uC/OS-III;uC/OS-III任务间通信;嵌入式系统
中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)02-0306-03
Communication between uC/OS-III ’s tasks
QU Huan-yu,CHEN Li-ping,WANG Ji-xin
(School of Mathematics,Physics and Informaiton Engineering ,Jiaxing University,Jiaxing 314001, China)
Abstract: uC/OS-III is a preemptive real-time system published by Micrium at August 1,2011. uC/OS-III’s inter-tasks communication through global variables,semaphores,task built-in message queues,external message queues,event flags group.
Key words: uC/OS-III;uC/OS-III inter-task communication;embedded system
这几年年来,数字化技术飞速发展,嵌入式产品应用在我们生活中的各个方面。而操作系统作为嵌入式产品的核心,起着越来越不可或缺的作用。嵌入式产品的实时性、容错能力等关键因素很大程度都决定于嵌入式操作系统的性能。本文主要研究了最近发布的硬实时系统uC/OS-III及其任务间的通信方式。
uC/OS-III任务间的通信方式相对于其它实时系统有较大的改变。尤其是任务内建消息队列后,中断程序可以直接发送消息给任务而不通过消息队列,这在一些采集信号频繁的应用中能大大提高其实时处理能力,从而提高整个系统的效率。
1内核对象的结构分析
1.1信号量
typedef struct os_sem OS_SEN;(1)
struct os_sem{
OS_OBJ_TYPEType;(2)
CPU_CHAR*NamePtr;(3)
OS_PEND_LISTPendList;(4)
OS_SEM_CTR Ctr;(5)
CPU_TSTS; };(6)
struct OS_PEND_LIST{
OS_PEND_DATA*HeadPtr;
OS_PEND_DATA*TailPtr;
OS_OBJ_QTY NbrEntries;};
在uC/OS-III中,所有的结构体都会有特定的数据类型。
信号量结构体中的第一个变量是Type域,表明该内核对象是一个信号量,从而保证通过引用调用信号量的函数也能够识别所传入的参数是信号量的地址而非其他。
信号量被赋予一个用户自定义的名字,便于调试。
若有多个任务等待该信号量,这些任务就会被放入挂起队列中。OS_PEND_LIST是一个结构体,它控制挂起队列,其内部的三个变量分别指向挂起队列的头部和尾部,以及挂起队列的长度。
信号量计数值,定义为该信号量可以被访问的次数。
信号量中包含了一个时间戳变量,存储了上一次信号量被提及时的时间戳。
用户代码不能直接访问信号量结构体,必须通过uC/OS-III所定义的API,否则会导致一些数据的丢失。
1.2消息及消息队列
图1消息队列
结构体OS_MSG构成一个消息
.NextPtr指向下一个消息
.MsgSize存放消息所指向数据域的大小
.MsgTS存放消息最后一次被提交的时间戳
.MsgPtr指向消息所对应的数据域
结构体OS_MSG_Q用于控制队列中的消息,它由5个域组成:
.InPtr队列首指针
.OutPtr队列尾指针
.NbrEntriesSize队列的最大消息数
.NbrEntries队列当前时刻的消息数
.NbrEntriesMax迄今为止队列中存放的最大消息数。
OS_MSG_Q通常包含在两种结构体中:OS_Q和OS_TCB。创建消息队列时就会建立一个OS_MSG_Q。当置位OS_CFG.H中的OS_CFG_TASK_Q_EN时,每个任务都有其内建的消息
文档评论(0)