1
  • 私は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;and rfmsg = (fulMsg_tt *)(packetbuf_dataptr());. そのため、相手から簡単に値を取得できます。(ntoh と hton を実行する必要はありませんが、これが本当に必要な場合は問題ありません)

  • 簡単に言えば、*C の値とその他の整数を別のノードに送信することです。どうすればこれを正しく行うことができますか。

4

1 に答える 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 に答える