Mounch
SDK版本:GR551x_SDK_V1.7.0
开发环境:gcc
问题描述:
这几天调试代码的时候,发现程序无线电相关的有且只有扫描的情况下, 在一个扫描窗口内会出现多个radio_event_active_start_handler、radio_event_active_end_handler 回调!
我为确保我代码的“干净”,直接去跑SDK的范例(有适当增加调试代码),但依旧会有这种情况。
但是,我今天调试,一样的代码,一样的硬件,结果却不一样了。一个扫描窗口有且只有一个radio_event_active_start_handler、radio_event_active_end_handler 回调! 这是结果是我期望的结果,我的应用也是依赖这个结果。
我想尝试复现“问题”,抓取日志找贵司咨询什么情况会出现,我好做适配,但现已无法复现了。
多补充一句:出问题的时候,并不是有且只有扫描的情况下才会出现问题,启动广播或者连接,也会出现。但是我观察广播和连接的事件优先级更高,有事件来时也会打断扫描,做完高优先级的事后恢复扫描,导致一个窗口有多个回调。但是出现问题的时候,在广播和连接事件没有来时,扫描一样会被打断,难道这里还存在其他的无线电事件在活跃?
我想得到的解答为:什么情况会出现,有且只有扫描的情况下, 在一个扫描窗口内会出现多个radio_event_active_start_handler、radio_event_active_end_handler 回调呢?
测试代码,剔除了相对应的测试代码,其中APP_LOG_INFO,是经我重新映射过的,打印数据是丢到缓存,在主循环一次性打印,确认不会占用回调时间。
void radio_event_active_start_handler(gap_activity_role_t role,uint8_t index)
{
if(role == GAP_ACTIVITY_ROLE_SCAN_INIT)
{
APP_LOG_INFO("GAP_ACTIVITY_ROLE_SCAN_INIT - START");
}
}
void radio_event_active_end_handler(gap_activity_role_t role,uint8_t index)
{
if(role == GAP_ACTIVITY_ROLE_SCAN_INIT)
{
APP_LOG_INFO("GAP_ACTIVITY_ROLE_SCAN_INIT - END");
}
}
ble_activity_start_notify_cb_register(radio_event_active_start_handler);
ble_activity_end_notify_cb_register(radio_event_active_end_handler);
zhongchengzhi
和客户沟通,问题暂未复现。
打开微信,使用“扫一扫”即可关注