我有一个
uint8_t *C = malloc(24*sizeof(uint8_t));
我需要将一些整数和这个 *C 发送到另一个节点(在 ad hoc 网络中)。所以我将使用一个结构
struct fulMsg { int msgType; int msgCount; //uint8_t *CC; } fulMsg_t; typedef struct fulMsg fulMsg_tt;`
packetbuf_copyfrom(X, sizeof(X));
在我的 api(contiki) 中有一个方法调用。如果我像这样创建结构,struct fulMsg *fmsg = &fulMsg_t;
我可以像这样使用上面的方法packetbuf_copyfrom(fmsg, 8);
,从另一端我可以很容易地得到这两个值。所以我的问题是,当我要对该指针应用相同的东西时,它无法正常工作,我正在使用的网络模拟器突然崩溃(我认为存在分段错误)。我无法在结构号中初始化 *C 的大小。以及如何正确地做到这一点
fmsg->CC = C;
在另一端,这就是我收到这个结构的方式是
struct fulMsg *r_fmsg = &fulMsg_t;
和rfmsg = (fulMsg_tt *)(packetbuf_dataptr());
。所以我可以很容易地从另一端获取值。(不需要ntoh和hton,但如果真的需要也可以)简单来说,我想做的是将 *C contains 的值和其他一些整数发送到另一个节点。我怎样才能正确地做到这一点。
问问题
218 次
1 回答
1
我对 contiki 不熟悉,而且似乎没有太多方便的文档,但从我发现的情况来看,该函数看起来不够聪明,无法知道结构的哪些部分是指针,所以我的猜测是它不是为此而设计的。我认为您必须创建一个直接包含完整数组的结构,例如,
struct fulMsg {
int msgType;
int msgCount;
uint8_t CC[24];
} fulMsg_t;
typedef struct fulMsg fulMsg_tt;
fulMsg_tt msg;
uint8_t *C = malloc(24*sizeof(uint8_t));
// Do whatever with this array, then
msg.msgCount = 24; // or whatever
memcpy(&msg.CC, C, 24*sizeof(uint8_t));
packetbuf_copyfrom(&msg, sizeof(fulMsg_tt));
于 2012-10-12T00:33:55.177 回答