首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Contiki:使用Rime接收到的打印数据

Contiki:使用Rime接收到的打印数据
EN

Stack Overflow用户
提问于 2017-08-09 17:07:45
回答 1查看 599关注 0票数 1

如何在recv_uc函数中打印接收到的数据?在本例中,是var的值。我使用packetbuf_copyfrom(&var, 5)var放在发送的数据包中。

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-09 18:23:07

一种方法是使用packetbuf_dataptr()函数访问内容。

代码语言:javascript
复制
int var;
memcpy(&var, packetbuf_dataptr(), sizeof(var));
printf("var=%d\n", var);

您的发送代码有一个与var大小相关的错误。根据平台的不同,它是2、4或8个字节。它从来不是5,所以这是错误的:

代码语言:javascript
复制
packetbuf_copyfrom(&var, 5); // Undefined behavior!

如果尺寸重要,请始终使用int16_t / uint16_tint32_t / uint32_t!它们是在每个Contiki文件中有效包含的报头中的ty胡枝子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45596769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档