【问题标题】:Contiki: broadcast integer-arrayContiki:广播整数数组
【发布时间】:2015-11-09 11:50:55
【问题描述】:

我想使用 Contiki OS 中的广播功能广播一个整数数组。但是,当将整数数组作为输入时,packetbuf_copyfrom() 函数似乎对我不起作用。当通过 Cooja 的“无线电消息工具”监控消息时,数据包似乎是空的。

This 是使用 char 数组作为参数时的样子,而 like that 尝试做完全相同的事情时,只是使用整数数组。

根据 Contiki 文档,该函数需要一个 void 指针并调用 memcpy 函数,这对于整数应该不是问题?

int packetbuf_copyfrom(const void *from, uint16_t len)
{   
    uint16_t l; 
    packetbuf_clear();
    l = len > PACKETBUF_SIZE? PACKETBUF_SIZE: len;
    memcpy(packetbufptr, from, l);
    buflen = l;
    return l;
}

我正在使用

/contiki/examples/rime/example-broadcast.c

使用 contiki 2.7 在 Cooja 模拟器中的 Z1 Motes 上归档。

我的错误可能在哪里?

【问题讨论】:

  • 如果你尝试 memcpy(packetbufptr, from, len); 会发生什么? ?只是一个建议,作为检查上一行是否良好的一种方式。

标签: c arrays embedded contiki


【解决方案1】:

我不知道 Contiki,但代码看起来没问题,只要您正确调用 packetbuf_copyfrom。请注意,该工具会尝试将数据包内容解码为 ASCII,因此显示 Hello67890,但整数不是 ASCII,因此显示为 ........

调用函数为:

int myArray[10]= {1,2,3,4,5,6,7,8,9,0};
packetbuf_copyfrom(myArray, sizeof(myArray));

【讨论】:

  • 谢谢!这些数字实际上存储在数据包中,只是工具没有显示,因为它们不是有效的 ASCII 符号。我的另一个问题是,我试图用 printf("%s", (uint8_t *)packetbuf_dataptr()); 读取传入的数据包。这对字符串工作得很好(将返回的 void 指针转换为 char *),但显然没有办法在不循环的情况下一次打印整数数组的完整内容?
  • 似乎在您的包中,您必须在数据之前加上一个指示符,无论是 ASCII 还是整数,然后相应地阅读。不,没有办法通过一次调用打印函数来打印整数数组 - 您必须循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 2021-07-23
  • 1970-01-01
  • 2013-09-27
  • 2012-06-26
相关资源
最近更新 更多