简介

如果把数据缓冲区的指针赋给一个事件控制块的成员 OSEventPrt,同时使事件控制块的成员 OSEventType 为常数 OS_EVENT_TYPE_MBOX,则该事件控制块就叫做消息邮箱,消息邮箱是在两个需要通信的任务之间通过传递数据缓冲区指针的方法来通信的。

邮箱的数据结构

创建邮箱

创建邮箱需要调用函数 OSMboxCreate ( ),这个函数的原型为:

OS_EVENT  *OSMboxCreate (
void *msg //消息指针
);

函数中的参数 msg 为消息的指针,函数的返回值为消息邮箱的指针。

调用函数 OSMboxCreate ( ) 需先定义 msg 的初始值。在一般的情况下,这个初始值为 NULL。

向邮箱发送消息

任务可以通过调用函数 OSMboxPost ( ) 向消息邮箱发送消息,这个函数的原型为:

INT8U  OSMboxPost (
OS_EVENT *pevent, //消息邮箱指针
void *msg //消息指针
);

请求邮箱

当一个任务请求邮箱时需要调用函数 OSMboxPend( ),这个函数的主要作用就是查看邮箱指针 OSEventPtr 是否为 NULL,如果不是 NULL 就把邮箱中的消息指针返回给调用函数的任务,同时用 OS_NO_ERR 通过函数的参数 err 通知任务获取消息成功;如果邮箱指针 OSEventPtr 是 NULL,则使任务进入等待状态,并引发一次任务调度。

函数 OSMboxPend( ) 的原型为:

void  *OSMboxPend (
OS_EVENT *pevent, //请求消息邮箱指针
INT16U timeout, //等待时限
INT8U *err //错误信息
);

μC/OS-II 任务的同步与通信 --- 消息邮箱的更多相关文章

  1. μC/OS-II 任务的同步与通信 --- 消息队列

    简介 使用消息队列可以在任务之间传递多条消息.消息队列由三个部分组成:事件控制块.消息队列和消息. 当把事件控制块成员 OSEventType 的值置为 OS_EVENT_TYPE_Q 时,该事件控制 ...

  2. uC/OS II原理分析及源码阅读(一)

    uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...

  3. US/OS2之任务同步与通信

    嵌入式系统中的各个任务都是以并发的方式来运行的,并为同一个大的任务服务,它们不可避免地要共同使用一些共享资源,并且在处理一些需要多个任务共同协作来完成的工作时,还需要相互的支持和限制.因此,对于一个完 ...

  4. C++同步串口通信

    问题描述:     C++串口通信,设置同步串口通信 问题解决:     (1)打开串口 注:     使用串口需要添加<Windows.h>头文件,打开串口主要是使用CreateFile ...

  5. uCos-II中任务的同步与通信

    任务的同步与通信 任务间的同步 在多任务合作工作过程中,操作系统要解决两个问题: 各任务间应该具有一种互斥关系,即对某些共享资源,如果一个任务正在使用,则其他任务只能等待,等到该任务释放资源后,等待任 ...

  6. 【原创】uC/OS II 任务切换原理

    今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...

  7. μC/OS-II 任务的同步与通信 --- 信号量

    任务间通信 系统中的多个任务在运行时,经常需要互相无冲突地访问同一个共享资源,或者需要互相支持和依赖,甚至有时还要互相加以必要的限制和制约,才保证任务的顺利运行.因此,操作系统必须具有对任务的运行进行 ...

  8. Python 多线程、多进程 (二)之 多线程、同步、通信

    Python 多线程.多进程 (一)之 源码执行流程.GIL Python 多线程.多进程 (二)之 多线程.同步.通信 Python 多线程.多进程 (三)之 线程进程对比.多线程 一.python ...

  9. Qt 多线程同步与通信

    Qt 多线程同步与通信 1 多线程同步 Qt提供了以下几个类来完成这一点:QMutex.QMutexLocker.QSemphore.QWaitCondition. 当然可能还包含QReadWrite ...

随机推荐

  1. Java Web服务器的联机交易

    我们知道服务器可以对外部的请求进行应答 ,在BS架构中,通过浏览器可以向Apache Tomcat或者WebSphere服务器发送请求.但是可能存在请求的渠道不是浏览器的情况,他有可能是另外一个jav ...

  2. 计算机网络六:无线局域网、IEEE 802.11、WIFI和蓝牙

    无线局域网.IEEE 802.11.WIFI和蓝牙 ㈠无线局域网 1.定义       无线局域网络(Wireless Local Area Networks),简称WLAN.它是相当便利的数据传输系 ...

  3. ie的用户名密码输入框右侧提示去掉

    ::-ms-clear,::-ms-reveal{display:none;} //用户名 密码

  4. 记录一次Service被注入mapper实例的错误

    在一个搭建框架为SSM的项目中,有一个需求是数据库更新同步Solr索引库的数据. 在使用ActiveMQ作为中间件,实现这个需求时却发生了一个错误. 在Listener实现类里我想注入一个Servic ...

  5. 第十一章 DNS服务器管理与配置

    1.如何在WindowsServer 2008 系统中使用IIS进行多站点配置与管理? 1)运行“开始”–“程序”–“管理工具”–“服务器管理器”打开: 选择“WEB服务器(IIS)”,注意:首次安装 ...

  6. 起步:Proteus 8 仿真 Arduino 1.8.2

    一.环境准备 1.从Arduino官网或中文社区下载并安装 Arduino IDE 当前最新版1.8.2:http://www.arduino.cn/thread-5838-1-1.html 2.下载 ...

  7. 安装Pangolin

    Pangolin是一个用于OpenGL显示/交互以及视频输出的一个轻量级 快速开发库 一:安装必要的库 1.Glew sudo apt-get install libglew-dev 2.Cmake ...

  8. Logistic回归Cost函数和J(θ)的推导----Andrew Ng【machine learning】公开课

    最近翻Peter Harrington的<机器学习实战>,看到Logistic回归那一章有点小的疑问. 作者在简单介绍Logistic回归的原理后,立即给出了梯度上升算法的code:从算法 ...

  9. Core 读取配置文件

    新建控制台 static void Main(string[] args) { Console.WriteLine("Hello World!"); //获取应用程序的当前工作目录 ...

  10. 【MySQL】percona-toolkit工具包

    [说明] percona-toolkit工具包同percona-xtrabackup一样都是用Perl写的工具包,percona-toolkit工具包是一组高级的管理mysql的工具包集,可以用来执行 ...