LoRa 通信中 unsigned short 和 unsigned char 的区别
Posted
技术标签:
【中文标题】LoRa 通信中 unsigned short 和 unsigned char 的区别【英文标题】:Difference between unsigned short and unsigned char in LoRa communication 【发布时间】: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 通信无关。
【参考方案1】:
对于欧洲 863-870MHz 频段,应用数据包大小在 51 字节(最慢数据速率)和 222 字节(更快速率)之间变化。参照。 https://www.thethingsnetwork.org/forum/t/limitations-data-rate-packet-size-30-seconds-uplink-and-10-messages-downlink-per-day-fair-access-policy/1300
您的消息中绝对不能超过 255 个字节,包括标头字节。
【讨论】:
以上是关于LoRa 通信中 unsigned short 和 unsigned char 的区别的主要内容,如果未能解决你的问题,请参考以下文章
C语言 请问signed char,unsigned char,short,unsigned sh
怎样把unsigned short 转换为 unsigned char
整数的二进制存储问题(以 short 和 unsigned short 为例)
在 C++ 中将 unsigned char (byte) 数组转换为 unsigned short