我需要广播一个半径为1的数据包,接收到这个数据包的设备返回一个带有这次通讯的LQI和RSSI的包回来,然后接收设备把发送方的短地址、发送的LQI和RSSI、接收的LQI和RSSI通过串口打印出来,从而知道该点的信号强度。
串口数据包的格式为:
包头(2字节) + 命令字(1) + 数据长度(1) + 短地址(2) + 设备识别码(1) + 发送LQI(1) + 发送RSSI(1) + 接收LQI(1) + 接收RSSI(1) + 校验和(1) + 包尾(2)
一共14个字节。
目前串口使用的是协议栈默认的DMA发送,缓存大小也是默认的128字节。发现周边节点一多,串口就发不全了。
128 / 14 ≈ 9,也就是最多只能发送9个数据包。
解决猜想:
一、 手动调用HalUARTPoll(),这样是否会发生DMA没发送完成导致的丢数据?
二、 关闭RF中断,等串口发送完再打开。这样是否会出现无线丢包?
三、 是否有其他更好的方法?
YiKai Chen:
方便把你的程序貼上來看看你怎樣做的嗎?
Susan Yang:
您可以尝试修改默认串口接收发送缓冲区MT_UART_DEFAULT_MAX_RX_BUFF及MT_UART_DEFAULT_MAX_TX_BUFF
另外您现在大约有多少节点?
Dandjinh:
回复 Susan Yang:
周边大概有20+设备。
扩大缓冲区我也想过,不过我不认为这是个好方法。如果最后迫不得已我会用这方法,现在最好的就是能直接触发串口的DMA发送而不用等下次osal循环。
user5342508:
回复 Dandjinh:
你有找到直接触发串口DMA的方法了吗?现在有个问题也需要在一次osal循环内多次发送串口。