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.正确情况应该是在下次发送前,邮件已经被取出。

 

 

posted @ 2022-03-05 22:17  上官梦舞  阅读(150)  评论(0编辑  收藏  举报