私は
uint8_t *C = malloc(24*sizeof(uint8_t));
いくつかの整数とこの *C を別のノード (アドホック ネットワーク内) に送信する必要があります。だから私は構造体を使うつもりです
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);
、反対側からこれら 2 つの値を簡単に取得できます。したがって、私の問題は、そのポインターに同じことを適用しようとすると、使用しているネットワークシミュレーターが突然クラッシュすることです (セグメンテーション違反があると思います)。構造体番号で *C のサイズを初期化できません。そして、これをどのように正しく行うか
fmsg->CC = C;
もう一方の端では、これは私がこの構造体を受け取る方法です
struct fulMsg *r_fmsg = &fulMsg_t;
andrfmsg = (fulMsg_tt *)(packetbuf_dataptr());
. そのため、相手から簡単に値を取得できます。(ntoh と hton を実行する必要はありませんが、これが本当に必要な場合は問題ありません)簡単に言えば、*C の値とその他の整数を別のノードに送信することです。どうすればこれを正しく行うことができますか。
質問する
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 に答える