uCOS 邮箱的使用
2022/3/5 23:16:41
本文主要是介绍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.正确情况应该是在下次发送前,邮件已经被取出。
搜索
复制
OSMboxPost(Beep_Mbox, (void *)2);OSMboxPost(Beep_Mbox, (void *)2);OSMboxPost(Beep_Mbox, (void *)2);这篇关于uCOS 邮箱的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享