在同时开启mesh和ble从机时,节点接收配网器发送来的长数据(数据长度为20个字节,配网器使用sig标准广播长度,每包有效数据8个字节,因此长数据会进行底层分包发送)时会重启,当关闭ble从机时,则可以正常接收,请问这是什么原因?例程用的是adv_ali_light_with_peripheral。
mesh、ble的收发包都在BLE_MEMHEAP_SIZE这个宏定义划分的内存中申请。如果是内存不足的问题,可以做如下尝试:
①尝试加大BLE_MEMHEAP_SIZE的数值(注意要是4的倍数)。
②将BLE的MTU改小,减小收发BLE数据时需要的内存。
③减小BLE、mesh的发包队列,预分配的缓存减小。
针对BLE通信,可以先发1个字节的BLE数据包,看能否保持连接,应用层发包负载字节数超过MTU也会导致通信问题。
默认代码中char1~char4默认通信数据长度都是1,char5是5。
BLE从机例程中注意修改如下几处
1.config.h中BLE_BUFF_MAX_LEN改为最大值251
2.gattprofile.h中SIMPLEPROFILE_CHARn_LEN(n=1~5)改为最大值243(char4默认使用notify,协议开销少一个字节,故MTU可以到244)
3.如果需要使用notify且发包负载大于20个字节,peripheralMTU变量或者CH58xBLE_LIB.h中的ATT_MTU_SIZE需要被扩大为最大负载+3即247(V208中只读,只能修改peripheralMTU变量)
BLE主机如果是手机APP,要看APP的是否对MTU有调整。如果手机APP是BLE调试助手,连接后要在APP右上角修改MTU为251(最大值视情况而定)
你好,根据你给出的上述方案“①尝试加大BLE_MEMHEAP_SIZE的数值(注意要是4的倍数)。”我进行了尝试,发现若按照你所说的加大方式依旧是无法解决问题,但是进行数值减少却意外的解决了。如下图:
请问这样修改是否还会带来其他方面的影响?(目前我的系统运行正常,但是当快速发送长数据时(间隔1-2s),偶尔还是会出现重启线程),是否还有别的地方需要修改呢?感谢你的回复
加大BLE_MEMHEAP_SIZE还是会进硬件错误中断,那么检查一下mesh库的版本。更新一下最新EVT,mesh库版本1.76,用最新的SRC、HAL、及mesh库文件测试看看。
尝试使用最新版sdk依旧无法通过加大BLE_MEMHEAP_SIZE解决问题,由于问题只在收发分包长数据时出现,或者是带应答的配置(如配置分组)等需要应答的消息,因此我怀疑是否和时长有关?ble是否在某处有时长需求,两者因此出现不兼容情况?