uCOS-II任务间通信之邮箱 [转载]

本文详细介绍了uCOS-II任务间通信机制中的邮箱功能。创建邮箱与创建信号量类似,通过设置事件控制块类型为OS_EVENT_TYPE_MBOX。OSMboxPost()函数在发送消息时会检查是否有任务等待,如有则唤醒最高优先级任务并进行调度。若无等待任务,消息将存入邮箱,供后续任务获取。
摘要由CSDN通过智能技术生成
uCOS-II任务间通信之邮箱
学过信号量之后再来看邮箱,发现它们是非常相似的,甚至有时候邮箱可以当做信号量来使用,邮箱相对信号量而言,只是多传递了一个指针变量。
和信号量很相似,ucos II提供了5个对邮箱进行操作的函数。它们是:
1. 建立一个邮箱 -- OSMboxCreate()
2. 等待一个邮箱中的消息 -- OSMboxPend()
3. 发送一个消息到邮箱中 -- OSMboxPost()
4. 无等待地从邮箱中得到一个消息 -- OSMboxAccept()
5. 查询一个邮箱的状态 -- OSMboxQuery()
使用邮箱之前,必须先建立该邮箱。该操作可以通过调用OSMboxCreate()函数来完成,并且要指定指针的初始值。一般情况下,这个初始值是NULL,但也可以初始化一个邮箱,使其在最开始就包含一条消息。如果使用邮箱的目的是用来通知任务某一个事件已经发生(发送一条消息),那么就要初始化该邮箱为NULL。如果用户用邮箱来共享某些资源,那么就要初始化该邮箱为一个非NULL的指针。在这种情况下,邮箱被当成一个二值信号量使用。

下面来看看创建一个邮箱函数的实现代码:
OS_EVENT *OSMboxCreate (void *msg)
{
    OS_EVENT *pevent;
 
 
    OS_ENTER_CRITICAL();
    pevent = OSEventFreeList;
    if (OSEventFreeList != (OS_EVENT *)0) {
        OSEventFreeList = (OS_E
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值