51uwb.cn
标题:
基站0串口数据刷新慢解决方案【代码优化】
[打印本页]
作者:
tuzhuke
时间:
2019-4-10 23:37
标题:
基站0串口数据刷新慢解决方案【代码优化】
@all 在最新版代码已经更新,可以直接使用最新版代码测试。 代码关注公众号即可下载。
有同学反映串口数据发送间隔时间比OLED刷新慢,Review 代码发现这里有limitation,可以简单修改优化达到与OLED一样的刷新频率。
首先解释部分代码,代码为了实现多基站多标签功能,使用了类似分时复用以及锁的功能,具体可以参见我的博客:cnblogs.com/tuzhuke/p/10004456.html
优化1
对于基站,每个基站都有一个ID,从0开始,假如系统中有3个基站,就将代码中的宏定义ANCHOR_MAX_NUM 修改为3
#define ANCHOR_MAX_NUM 3
复制代码
在实际工作中,标签发送数据给基站,实际上每个基站都可以收到标签的数据,只是有些基站不做反馈。 具体做法是这样的:标签发送数据带有序列号,序列号对
ANCHOR_MAX_NUM 取模,例如序列号为10,取模后为1,那么只有ANCHOR1 处理这条信息
具体代码实现如下,即不符合的不执行。
if(rx_buffer[ALL_MSG_SN_IDX]%ANCHOR_MAX_NUM != ANCHOR_IND)
continue;
复制代码
对于测距的时候,上述方法可以很好的实现多基站多标签功能。
定位功能中,标签也会将收集到的数据发送给基站0,同样也有一个自增序列号,这条信息所有基站都会收到,只是基站0做反映。同样会走上面的判断
if(rx_buffer[ALL_MSG_SN_IDX]%ANCHOR_MAX_NUM != ANCHOR_IND)
continue;
复制代码
此时,出现问题了,如果基站0收到信息序列号取模
ANCHOR_MAX_NUM 不等于0,基站0 就不做处理,不会将这些信息发送给串口,违背了我们的意愿。所以观察到的结果是串口比OLED刷新慢。
解决方法: 标签在发送距离统计信息的时候讲序列号强制设置为0,基站0 就不会忽略这条信息了。
代码做如下修改:
//only anthor0 recive angle message
angle_msg[ALL_MSG_SN_IDX] =0;
angle_msg[ALL_MSG_TAG_IDX] = TAG_ID;
dwt_writetxdata(sizeof(angle_msg), angle_msg, 0);
dwt_writetxfctrl(sizeof(angle_msg), 0);
复制代码
优化2:
从上面代码中可以看到一个比较重要的宏定义
ANCHOR_MAX_NUM
,这个设定值不要小与实际基站数量。 最佳方案等于实际基站数量。
假如实际有2个基站,而这个宏定义为3,那么会出现如下情况:
对于tag 发来的信息序列号为0 1 2 3 4 ,0/3 1/4 分别有基站0和基站1接收, 而标记为2的数据谁也没有接收,白白浪费标签时间了。
作者:
gardenTED
时间:
2021-4-27 23:15
混个金币哈哈哈
作者:
gdzqltkj
时间:
2021-4-29 18:36
不错,期待测试
作者:
藏丶宝
时间:
2021-5-12 09:27
厉害啊,谢谢分享
作者:
13764295318
时间:
2021-6-9 10:16
混个金币哈哈哈
作者:
szmcumcu
时间:
2021-9-30 13:57
我也是混个金币,谢谢
作者:
sd196821
时间:
2021-10-15 18:02
感谢楼主的代码
作者:
Aran
时间:
2021-10-21 08:20
混个金币哈哈哈
作者:
Ialab2023
时间:
2023-3-9 16:29
非常好用!感謝樓主的資訊分享!
作者:
微风
时间:
2023-3-15 16:04
厉害啊,谢谢分享
欢迎光临 51uwb.cn (http://51uwb.cn/)
Powered by Discuz! X3.3