消息指针中获取参数指针的理解

背景:因为本内核基于消息驱动,因此消息的建立与携带参数的修改是非常重要的。
消息的结构体定义

struct msg{
msg_id_t msg_id;
task_id_t src_id;
task_id_t dest_id;
uint16_t param_len;
uint16_t param[LENTH];
};

为了扩展消息的使用范围,因此不能限制消息携带的参数类型和长度。所以参数都会放在param[LENTH]数组中。
因此,消息的生成函数需要建立消息指针,并将通用的消息参数填入后,返回消息结构体的参数(如上面代码部分的param)部分的指针返回。调用消息的生成函数后获得的指针,可以将需要传递的参数填入。最终在消息接收的函数中,可以直接从消息的参数指针中获取需要传递的参数。
如下代码就是获取消息的参数部分的指针

void * msg2param(struct msg_t const *msg){
return (void*) (((uint8_t*) msg) + offsetof(struct msg_t, param));
}

即以msg指针为起点,获取其中param在msg_t结构体中的偏移,即为param的地址。其中offsetof在这篇文章中有所阐述:
Offsetof宏详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值