【发布时间】:2019-01-09 02:08:58
【问题描述】:
我正在努力在网关(RPI3 + LoRa hat)和节点(RPi3 + LoRa hat)之间建立 lora 通信。由于我想建立没有TTN的通信通道,我尝试了以下示例来设置两者之间的通信:https://github.com/dragino/rpi-lora-tranceiver/blob/master/dragino_lora_app/main.c
代码在发送方和接收方两端都运行良好。这意味着在发送方,要发送的消息正在控制台上打印。而在接收方,正在显示接收到的消息。
这适用于短消息。但是,我想发送一条 600 字节长的消息。为了发送这条长消息,我编辑了 writeBuf() 参数的 typedef 如下:
static void writeBuf(byte addr, byte *value, unsigned short len) {
我做出这个改变是因为byte len 限制了发送到 255 的消息(由于 unsugned char 的范围是 0-255)。所以我需要扩大这个范围,以便我可以发送更长的消息。进行此更改后,控制台中不会打印任何消息。 writeBuf() 中的 for 循环从 0-n 开始,然后连续从 99-n 开始,没有在控制台上打印发送消息。因此,接收者永远不会收到任何消息。我了解unsigned short 和unsigned char 之间的区别。但是,在这种情况下,我无法理解 unsigned short 和 unsigned char 之间的区别。任何帮助/指导将不胜感激。我也想知道我是否正在做出正确的改变或寻找正确的方向。
谢谢
【问题讨论】:
-
仅仅因为您将函数参数的类型更改为可以容纳更大值的类型,并不意味着函数实现适用于更大的值。
-
但我们通常只回答关于此处提供的代码的问题,在问题中,最好以minimal reproducible example 的形式。到外部存储库的超链接是不够的,因为一旦代码被更改或删除或其他任何事情,问题的上下文就会丢失。
-
OP 试图解决的推断的潜在问题的答案是:不,不要尝试发送更长的消息;而是将长消息拆分成短消息。最简单的选择是使用字符来指示消息的结束。在接收端,连接消息,然后在该字符处拆分它们。通常会使用换行符/换行符 (
'\n'),但这完全取决于您。 -
网络使用受限。因此,您不允许按顺序发送大量消息。如果您的数据不适合每隔几分钟 51 个字节,则您可能使用了错误的网络。想想 WLAN 或移动设备。
-
实现细节,变量的类型,无论是 unsigned short 还是 unsigned char,都与 LoRa 通信无关。
标签: c raspberry-pi3 unsigned-char lora