chap10-消息邮箱管理.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chap10-消息邮箱管理

用户要在OS_CFG.H中将OS_MBOX_EN 开关量常数置成1,这样μC/OS-II 才能支持消息邮箱。 10.00 建立一个邮箱,OSMboxCreate 10.01 删除一个邮箱,OSMboxDel 10.02 等待邮箱中的消息,OSMboxPend 10.03 向邮箱发送一则消息,OSMboxPost 10.04 向邮箱发送一则消息,OSMboxPostOpt 10.05 无等待地从邮箱中得到一个消息, OSMboxAccept 应用程序也可以以无等待的方式从邮箱中得到消息。 如果邮箱为空,则应用程序也可以从邮箱中得到消息,而不必使任务进入睡眠状态。 10.06查询一个邮箱的状态, OSMboxQuery OSMboxQuery 函数使应用程序可以随时查询一个邮箱的当前状态。 它需要两个参数: 一个是指向邮箱的指针pevent。该指针是在建立该邮箱时,由OSMboxCreate 函数返回的; 另一个是指向用来保存有关邮箱的信息的OS_MBOX_DATA(见uCOS_II.H)数据结构的指针pdata。 10.07 用邮箱作二值信号量 一个邮箱可以被用作二值的信号量。首先,在初始化时,将邮箱设置为一个非零的指针(如void *1)。这样,一个任务可以调用OSMboxPend 函数来请求一个信号量,然后通过调用OSMboxPost 函数来释放一个信号量。下面程序清单说明了这个过程是如何工作的。如果用户只需要二值信号量和邮箱,这样做可以节省代码空间。这时可以将OS_SEM_EN设置为0,只使用邮箱就可以了。 10.08 用邮箱实现延时,而不使用OSTimeDly 邮箱的等待超时功能可以被用来模仿OSTimeDly 函数的延时,如程序清单 L6.20所示。如果在指定的时间段TIMEOUT 内,没有消息到来,Task1 函数将继续执行。这和OSTimeDly TIMEOUT 功能很相似。但是,如果Task2 在指定的时间结束之前,向该邮箱发送了一个“哑”消息,Task1 就会提前开始继续执行。这和调用OSTimeDlyResume 函数的功能是一样的。注意,这里忽略了对返回的消息的检查,因为此时关心的不是得到了什么样的消息。 if pevent- OSEventPtr ! void * 0 /* Make sure mailbox doesnt already have a msg */ OS_EXIT_CRITICAL ; return OS_MBOX_FULL ; pevent- OSEventPtr msg; /* Place message in mailbox */ OS_EXIT_CRITICAL ; return OS_NO_ERR ; void *OSMboxAccept OS_EVENT *pevent #if OS_CRITICAL_METHOD 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif void *msg; #if OS_ARG_CHK_EN 0 if pevent OS_EVENT * 0 /* Validate pevent */ return void * 0 ; if pevent- OSEventType ! OS_EVENT_TYPE_MBOX /* Validate event block type */ return void * 0 ; #endif OS_ENTER_CRITICAL ; msg pevent- OSEventPtr; pevent- OSEventPtr void * 0; /* Clear the mailbox */ OS_EXIT_CRITICAL ; return msg ; /* Return the message received or NULL */ INT8U OSMboxQuery OS_EVENT *pevent, OS_MBOX_DATA *pdata #if OS_CRITICAL_METHOD 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif INT8U *psrc; INT8U *pdest; #if OS_ARG_CHK_EN 0 if pevent OS_EVENT * 0 /* Validate pevent */ return OS_ERR_PEVENT_NULL

文档评论(0)

sd44055 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档