邮箱使用总结
1. 数据的存放
邮箱一般用来传递数据,不管何种类型都可以传递。在传递时,先把数据数据用 void *进行 类型变化,化为 void *这种万用类型,而在接收邮箱的数据时,再还原成本身的数据类型。
比如以下的两个例子:
一是传递指向一个数组的指针。
发端采用如下方式: OSMboxPost(ComSendMbox, (void *)ComBufRec);
其中的 ComBufRec 就是数组名,也表示指向该数组的指针,将原来的字符型数组名(或指 针)变成(void *)类型,
而接收端,利用 send_ptr = (uint8 *)OSMboxPend(ComSendMbox, 0, &err);
将(void *)类型还原为指针。
二是传递一个字符型变量。
发端采用如下方式: OSMboxPost(KeyMbox, (void *)key_value); 其中的 key_value 就是字符型(char)变量,将原来的字符型变量变成(void *)类型,
而接收端,利用 key = (INT8U)OSMboxPend(KeyMbox, 0, &err);
将(void *)类型还原为字符型变量。
2、关于在邮箱中不能存放传递 0 值的问题
在邮箱的传递中,如果把一个 0 值放入邮箱,经过 void *类型变化后,变成了 void *0,而 判断邮箱中是否有数据正是通过判断邮箱中指向 Message 的指针是否为 0 来判断, 这样虽然 放入了一个 0 变量,但邮箱中却无法判断这个 0 值,认为
1. 数据的存放
邮箱一般用来传递数据,不管何种类型都可以传递。在传递时,先把数据数据用 void *进行 类型变化,化为 void *这种万用类型,而在接收邮箱的数据时,再还原成本身的数据类型。
比如以下的两个例子:
一是传递指向一个数组的指针。
发端采用如下方式: OSMboxPost(ComSendMbox, (void *)ComBufRec);
其中的 ComBufRec 就是数组名,也表示指向该数组的指针,将原来的字符型数组名(或指 针)变成(void *)类型,
而接收端,利用 send_ptr = (uint8 *)OSMboxPend(ComSendMbox, 0, &err);
将(void *)类型还原为指针。
二是传递一个字符型变量。
发端采用如下方式: OSMboxPost(KeyMbox, (void *)key_value); 其中的 key_value 就是字符型(char)变量,将原来的字符型变量变成(void *)类型,
而接收端,利用 key = (INT8U)OSMboxPend(KeyMbox, 0, &err);
将(void *)类型还原为字符型变量。
2、关于在邮箱中不能存放传递 0 值的问题
在邮箱的传递中,如果把一个 0 值放入邮箱,经过 void *类型变化后,变成了 void *0,而 判断邮箱中是否有数据正是通过判断邮箱中指向 Message 的指针是否为 0 来判断, 这样虽然 放入了一个 0 变量,但邮箱中却无法判断这个 0 值,认为