uc/os-ii消息邮箱

本文介绍了μC/OS-II操作系统中的消息邮箱机制,作为通信工具,消息邮箱用于任务间发送指针指向的数据结构。内容包括消息邮箱的初始化、应用场景、特点以及相关操作函数OSMboxPend()和OSMboxPost()的功能描述,强调了其在事件通知和资源共享中的作用。
摘要由CSDN通过智能技术生成

消息邮箱是一种通信机制,它能使任务或中断服务向另一个任务发送一个指针型的变量,这个指针指向一个包含指定“消息”的数据结构。消息邮箱发送的不是消息本身,而是消息的地址指针。使用消息邮箱之前,必须先建立消息邮箱,并且要指定指针的初始值。一般情况下,这个初始值是NULL,但也可以在初始化时,就使其在最开始就包含一条消息。   
消息邮箱主要用于两种目的:① 通知一个事件的发生;② 作二值信号量用。

  • 消息邮箱初始值的设置方法如下:
    (1) 如果使用消息邮箱是用于通知一个事件的发生(发送一条消息),那么就要初始化该消息邮箱为NULL,因为在开始时,事件还没有发生。  
    (2) 如果作二值信号量用,即用于共享某些资源,那么就要初始化该消息邮箱为一个非NULL的指针。

  • 消息邮箱具有如下特点:  
    (1) 消息邮箱中的内容是一个指向消息的指针,指针指向的内容即是消息;  
    (2) 消息邮箱为满时,消息邮箱只包含一个指向消息的指针;消息邮箱为空时,消息邮箱的指针指向NULL;  
    (3) 消息邮箱只能接收和发送一则消息,消息邮箱为满时,将丢弃新消息,保留旧消息。

µC/OS-Ⅱ提供了七种对消息邮箱的操作,消息邮箱函数所属文件是OS_MBOX.C。
这里写图片描述

  • OSMboxPend()函数用于任务等待消息邮箱中的消息。任务或者中断发出的消息是指针型的变量,在不同的应用中消息的使用也可能不同。该函数具有如下特点:

    1. 如果调用时消息邮箱中已有消息,那么该消息被返回给调用者,并从消息邮箱中清除该消息。
    2. 调用时,如果消息邮箱中没有消息,则OSMboxPend()函数挂起当前任务直到得到需要的消息或等待超时期满。
    3. 该函数的调用者只能是任务,中断不能调用。
    4. OSMboxPend()函数返回接收的消息指针。
void  *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr)
{
    void      *pmsg;
#if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
    OS_CPU_SR  cpu_sr = 0;
#endif
#if OS_ARG_CHK_EN > 0
    if (perr == (INT8U *)0) {                         /* Validate 'perr'                               */
        return ((void *)0);
    }
    if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
        *perr = OS_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值