gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:22:15 25 4
gpt4 key购买 nike

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

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();
}

最佳答案

一种方法是使用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_tint32_t/uint32_t!它们在有效地包含在每个 Contiki 文件中的 header 中是类型定义的。

关于Contiki:使用 Rime 打印接收到的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45596769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com