基于μC/OS-Ⅲ的多任务间邮箱机制分析与应用
3 邮箱的灵活应用
3.1 用邮箱作为二值信号量
邮箱可以当作二值信号量用,邮箱中有消息表示资源可以使用,而空邮箱表示资源已经被其他资源占用。首先,在初始化时将邮箱设置为一个非空指针(eg.void*1),这样,一个任务可以调用OSMboxPend()函数请求信号量,然后通过调用OSMboxPost()函数释放信号量。若只需要二值信号量和邮箱,采用这种方法可以节省代码空间。此时,需将OS_MBOX_EN置1,而将OS_SEM_EN清0,即只用邮箱,而不是同时使用邮箱和信号量。同样,给出了一个邮箱传递二值信号量的简单示例。

3.2 邮箱实现延时,而不使用OSTimeDly()
邮箱的超时等待功能可以用作延时,模仿OS-TimeDly()函数功能。示例代码如下:


在程序执行过程中,若在指定的时间TIMEOUT内没有消息到来,则TaskC继续执行,这显然与OSTimeDly(TIMEOUT)功能类似;但是,如果TaskD在指定的时间结束之前,向邮箱发送一个dummy消息,则可以中止任务1中的延时,使TaskC提前继续执行,这与调用函数OSTimeDly Res ume()的功能一致。
4 结语
本文基于嵌入式操作系统μC/OS-Ⅲ探讨了邮箱在任务间通信中的应用方法及注意事项,分析了各邮箱函数的关系及使能/屏蔽方法,并给出示例实现2个任务的全双工通信;在此基础上,还研究了邮箱在二值信号量和延时功能中的灵活应用,并给出实例代码验证,这在嵌入式系统开发过程中有一定的参考价值。本文引用地址:https://www.eepw.com.cn/article/153463.htm
评论