2017-08-09 12 views
1

受信データをrecv_uc機能で印刷するにはどうすればよいですか?この場合、varの値があります。私はを使って、varを送信パケットに入れました。Contiki:Rimeを使用して受信した印刷データ

PROCESS(sending_rand, "Sending rand"); 
AUTOSTART_PROCESSES(&sending_rand); 

static void 
recv_uc(struct unicast_conn *c, const rimeaddr_t *from) 
{ 
    printf("unicast message received from %d.%d\nreceived data: %d\n", 
      from->u8[0], from->u8[1], /* print data received */); 
} 

static const struct unicast_callbacks unicast_call = {recv_uc}; 
static struct unicast_conn unicast; 

PROCESS_THREAD(sending_rand, ev, data) 
{ 
    static struct etimer et;//oggetto di tipo etimer 
    int var; 

    PROCESS_EXITHANDLER(unicast_close(&unicast);) 

    PROCESS_BEGIN(); 

    unicast_open(&unicast, 129, &unicast_call); 

    while(1) { 

     /* Delay 2-4 seconds */ 
     etimer_set(&et, CLOCK_SECOND * 4 + random_rand() % (CLOCK_SECOND * 4)); 

     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); 

     var = random_rand(); 

     packetbuf_copyfrom(&var, 5); 
     addr.u8[0] = 1; 
     addr.u8[1] = 0; 
     if(!rimeaddr_cmp(&addr, &rimeaddr_node_addr)) { 
      unicast_send(&unicast, &addr); 
     } 

     printf("unicast message sent\n"); 
    } 

    PROCESS_END(); 
} 

答えて

0

便宜上、packetbuf_dataptr()機能を使用してコンテンツにアクセスします。

int var; 
memcpy(&var, packetbuf_dataptr(), sizeof(var)); 
printf("var=%d\n", var); 

あなたの送信コードには、varというサイズに関するバグがあります。プラットフォームによっては、2,4,8バイトのいずれかです。それは5ことはないので、これは間違っている:サイズの問題ならば

packetbuf_copyfrom(&var, 5); // Undefined behavior! 

は必ずint16_t/uint16_tまたはint32_t/uint32_tを使用します!それらはヘッダーにtypedefされ、各Contikiファイルに効果的に含まれます。

+0

ありがとうございました:-) – vrizz

関連する問題