• uCOS邮箱的使用


    邮箱存储的是一个void类型的指针

    新建的时候

    OS_EVENT  *Key_Mbox;//声明OS_EVENT 类型的指针,指针名字是Key_Mbox,按键值邮箱

    Key_Mbox = OSMboxCreate((void *)0);//创建邮箱

    OSMboxPost(Beep_Mbox, (void *)2);//发送一个邮件

    这里分析一下,把原本一个数字二强制转为一个void类型的指针值。

    等效于下面

    void *p;//p是一个指针变量,变量里面存储的值是4字节的地址

    p = 2;//p变量值改为0x0000 0002

    OSMboxPost(Key_Mbox, p);//发送一个邮件,就是把0x0000 0002存进去

    void *msg;

    msg = (void *)(OSMboxPend(Key_Mbox, 0, &err));//等待邮件

    如果等到了

    msg = p;

    这时候它俩都是指针类型的变量

    可以这样得到p的值

    val = (u32)msg;//强制类型转换

    这就可以得到p的值是2了

    实际上下面这样更容易理解

    char msg1[]="cmd1";

    char msg1[]="cmd2";

    OS_EVENT  *cmd_Mbox;//声明OS_EVENT 类型的指针,指针名字是cmd_Mbox,命令字符串邮箱

    cmd_Mbox = OSMboxCreate((void *)0);//创建邮箱

    OSMboxPost(Beep_Mbox, (void *)msg1);//发送一个邮件,把msg1的地址发出去了

    char *msg;

    msg = (char *)(OSMboxPend(Key_Mbox, 0, &err));//等待邮件

    等到的邮件转换为char类型指针

    那msg[0] = 'c'; msg[1] = 'm'; msg[1] = 'd';

    那如果,我邮件发出去后

    有某个地方msg1[0] = 'd';操作

    过一会儿邮件才收到

    那么收到的时候得到的msg[0] = 'd';

    所以邮箱传递的是地址,地址上的数据值在任何时候都是可以改变的。使用中要注意发送和接收处理的速度

    上面两种方式我们可以总结

    1.我们可以把邮箱记住的哪个指针值作为一个四字节的空间来用

    2.正确情况应该是在下次发送前,邮件已经被取出。

  • 相关阅读:
    [转]HTML5 classList API
    高质量CSS编写规范
    CSS Hack
    谈谈JSON数据格式
    Eclipse启动时报需要安装"Java SE 6 Runtime"致无法启动解决方案
    站长问题纠结
    做站长的经验
    网站如何提高PR值
    Progit Update Check Page
    WPF随手小记之二 ——改变DataGrid样式
  • 原文地址:https://www.cnblogs.com/IdeaMing/p/15969667.html
Copyright © 2020-2023  润新知