- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第章 任务间通信与同步
使用举例 __task void AppTaskMsgPro(void) { uint8_t *pMsg; OS_RESULT xResult; const uint16_t usMaxBlockTime = 200; /* 延迟周期 */ while (1){ xResult = os_mbx_wait(mailbox, (void *)pMsg, usMaxBlockTime); switch (xResult){ case OS_R_OK: printf(无需等待,pMsg = %d\r\n, *pMsg); break; case OS_R_MBX: printf(消息邮箱空,等待时间从消息邮箱内获得数据,pMsg = %d\r\n, *pMsg); break; case OS_R_TMO: bsp_LedToggle(1); bsp_LedToggle(4); break; default: break; } } } 函数 isr_mbx_check OS_RESULT isr_mbx_check( OS_ID mailbox); /*消息邮箱的ID标识*/ 函数描述: 用来检测消息邮箱剩余空间可以存储的消息个数。建议配合isr_mbx_send 一起使用。 第 1 个参数填写消息邮箱的 ID 标识,即函数 os_mbx_declare 第一个参数。 函数返回消息邮箱剩余空间可以存储的消息个数。 注意: 1. 使用此函数前一定要调用函数 os_mbx_init 进行初始化。 2. 此函数只能在中断服务程序中调用。 使用举例 #include rtl.h /* 声明一个支持10个消息的消息邮箱 */ os_mbx_declare(mailbox, 10); static void AppObjCreate(void) { /* 创建消息邮箱 */ os_mbx_init(mailbox, sizeof(mailbox)); } void EXTI0_IRQHandler(void) { if (isr_mbx_check(mailbox) != 0) { isr_mbx_send(mailbox, msg); } } 在中断服务程序中仅发一个消息 使用举例 在中断服务程序中发多个消息 #include rtl.h os_mbx_declare(mailbox, 10); /* 声明一个支持10个消息的消息邮箱 */ static void AppObjCreate(void) { os_mbx_init(mailbox, sizeof(mailbox)); /* 创建消息邮箱 */ } void EXTI0_IRQHandler(void) { int i, free; free = isr_mbx_check(mailbox1); for (i = 0; i 16; i++){ if (free 0) { free--; isr_mbx_send(mailbox1, msg); } } } 函数 isr_mbx_send void isr_mbx_send( OS_ID mailbox, /*消息邮箱的ID标识*/ void* message_ptr); /* 消息指针,即数据的地址*/ 函数描述: 用于向消息邮箱存放数据指针,或者说数据地址。如果消息邮箱已经满了,再次调用此函数会造成消息邮箱溢出。所以调用此函数前,建议调用函数 isr_mbx_check 进行检测,检测是否还有空间可用。 第 1 个参数填写消息邮箱的 ID 标识,即函数 os_mbx_declare 第一个参数。 第 2 个参数填写消息指针,即数据的地址。 注意以下问题: 使用此函数前一定要调用函数 os_mbx_init 进行初始化。 在中断服务程序中仅发一个消息举例 #include rtl.h os_mbx_declare(mailbox, 10); /* 声明一个支持10个消息的消息邮箱 */ static void AppObjCreate(void) { os_mbx_init(mailbox, sizeof(mailbox)); /* 创建消息邮箱 */ } void EXTI0_IRQHandler(void) { if (isr_mbx_check(mailbox) != 0) { isr_mbx_send(mailbox, msg); } } 在中断服务程序中发多个消息举例 #include
文档评论(0)