Tinyos 1.x 内消息为 TOS_Msg , TInyos 2.x 消息为message_t.
在tinyos2.x下,我们应当如下访问数据:
假设
MultihopMsg 为自定义消息格式
如下:
typedef nx_struct MultihopMsg {
nx_uint32_t seqnum;
nx_uint8_t hops;
nx_uint8_t type;
nx_uint16_t data;
nx_uint16_t max;
nx_uint16_t min;
nx_uint16_t source;
} MultihopMsg;
message_t msg;
(nx_struct MultihopMsg * pack
访问方式为:
pack = (nx_struct MultihopMsg *)(call RadioPacket.getPayload(&msg, sizeof(nx_struct MultihopMsg)));
但是如果我们仍用1.x的方法访问:
pack = (nx_struct MultihopMsg *)msg.data; 发现之后也可以访问pack->hops 等数据域内数据,但经过个人实验结果,非常不建议这种方式访问,因为在实验中发现消息经过传播后如此访问有些数据域便丢失了或无法访问了,因此建议用tinyos 2.x的方式,相比tinyos1.x 很多访问字段的方法都采用了函数间接访问方式,也就时封装了,应该更加安全吧。
如有不对的地方,敬请指正。