- 打卡等级:以坛为家II
- 打卡总天数:435
- 最近打卡:2025-05-04 20:54:20
荣誉版主
- 积分
- 4275
|
发表于 2024-5-6 01:06:04
|
显示全部楼层
本帖最后由 CosyOS 于 2024-5-6 07:42 编辑
是的也不是。
说“是的”,是因为传输的的确是指针:(void *)类型;
说“不是”,是因为在满足特定条件时,也可传输数据;
特定条件是:
C51下,sizeof(数据类型) <= 3;
C251、MDK下,sizeof(数据类型) <= 4;
并且,传输的数据必须为真值。
示例一 - 传输指针
uCreateMailbox( mbox_2 );
发送线程:
static xxx_t m; // xxx_t 可为任意类型,m 可为任意值
uSendMail( mbox_2, &m );
接收线程:
xxx_t *m = (xxx_t *)uRecvMail( mbox_2, ~0 );
if(m){ 使用 *m; }
示例二 - 传输数据
uCreateMailbox( mbox_2 );
发送线程:
uSendMail( mbox_2, (void *)m ); // m可以是立即数,必须为真值。
接收线程:
uint m = (uint)uRecvMail( mbox_2, ~0 );
if(m){ 使用m; }
如果仅传输真值数据,可考虑采用“飞信”,比邮箱效率高。
飞信传输的数据类型:
C51:u8
C251:u16
MDK:u32
详情请查阅相关说明。
如果还有疑虑,也不必着急,下节课中会重点讲解!
|
|