zoukankan      html  css  js  c++  java
  • μC/OS-II 任务的同步与通信 --- 消息邮箱

    简介

    如果把数据缓冲区的指针赋给一个事件控制块的成员 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			//错误信息
    ); 
    
  • 相关阅读:
    Andrew Ng机器学习 五:Regularized Linear Regression and Bias v.s. Variance
    cadence时各种焊盘层的定义
    cadence 关于PCB封装的设计
    candence 关于焊盘的描述
    cadence 关于DRC设置
    cadence的关于封装层叠
    cadence 学习
    stm32的一些参数
    无刷电机的FOC理解
    wait()、notify、notifyAll()的使用
  • 原文地址:https://www.cnblogs.com/GyForever1004/p/8724265.html
Copyright © 2011-2022 走看看