Part Number:CC2340R5
在Uart的readCallback中调用BLEAppUtil_advStop、BLEAppUtil_initAdvSet、BLEAppUtil_advStart会卡死。
我的需求是在Uart的readCallback中读取到某一个字符更新scanResData1内容。请问正确的操作流程应该是怎样的?
Yolande Wang:
Xuefeng said:在Uart的readCallback中调用BLEAppUtil_advStop、BLEAppUtil_initAdvSet、BLEAppUtil_advStart会卡死。
BLE操作通常需要在BLE协议栈线程中进行,将BLE操作与UART回调函数结合使用可能引发并发问题。
正确操作可以考虑如下流程:
1.在readCallback中读取UART数据,不要在此执行BLE操作
2.当UART收到某个字符后,触发事件(事先定义好),然后在主应用程序线程中处理BLE操作(如更新scanResData1)
3.不要在UART回调中直接调用BLEAppUtil函数,这样容易引起程序阻塞
,
Xuefeng:
定义了事件BLEAPPUTIL_ADV_MANUL_START,数据打包使用了BLEAppUtil_ScanEventData_t 结构。
在BLEAppUtil_Task中获取(BLEAppUtil_ScanEventData_t *)pMsgData)->pBuf->pAdvReport的pData和dataLen,但是获取到data和len都是错的。在UART回调中触发事件我应该如何正确发送数据?
,
Yolande Wang:
如果你在BLEAppUtil任务中获取到的data和len是不正确的,这可能是由于数据的复制或内存管理问题引起的。
Xuefeng said:在UART回调中触发事件我应该如何正确发送数据?
请确保以下几点:
1.在UART回调中,检查数据的起始地址和长度是否正确,以确保数据被正确传递给BLEAppUtil任务。
2.在BLEAppUtil任务中,使用合适的指针和长度,确保正确地提取数据。验证数据的指针是否指向正确的位置,并且数据长度正确。
3.在BLEAppUtil任务中,确保不会在处理数据时发生分配和释放内存的问题。如果您在这些方面都没有问题,还是无法正确获取正确的数据和长度,您可能需要通过使用调试工具或看日志的方式来帮助诊断问题。