基站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%ANCHOR_MAX_NUM != ANCHOR_IND)
continue;
对于测距的时候,上述方法可以很好的实现多基站多标签功能。
定位功能中,标签也会将收集到的数据发送给基站0,同样也有一个自增序列号,这条信息所有基站都会收到,只是基站0做反映。同样会走上面的判断
if(rx_buffer%ANCHOR_MAX_NUM != ANCHOR_IND)
continue;
此时,出现问题了,如果基站0收到信息序列号取模ANCHOR_MAX_NUM 不等于0,基站0 就不做处理,不会将这些信息发送给串口,违背了我们的意愿。所以观察到的结果是串口比OLED刷新慢。
解决方法: 标签在发送距离统计信息的时候讲序列号强制设置为0,基站0 就不会忽略这条信息了。
代码做如下修改:
//only anthor0 recive angle message
angle_msg =0;
angle_msg = TAG_ID;
dwt_writetxdata(sizeof(angle_msg), angle_msg, 0);
dwt_writetxfctrl(sizeof(angle_msg), 0);
优化2:
从上面代码中可以看到一个比较重要的宏定义ANCHOR_MAX_NUM ,这个设定值不要小与实际基站数量。 最佳方案等于实际基站数量。
假如实际有2个基站,而这个宏定义为3,那么会出现如下情况:
对于tag 发来的信息序列号为01 2 3 4 ,0/3 1/4 分别有基站0和基站1接收, 而标记为2的数据谁也没有接收,白白浪费标签时间了。
混个金币哈哈哈 不错,期待测试 厉害啊,谢谢分享
混个金币哈哈哈 我也是混个金币,谢谢 感谢楼主的代码 混个金币哈哈哈 非常好用!感謝樓主的資訊分享! 厉害啊,谢谢分享
页:
[1]