工具与软件:
您好!
我将一个 CC2340R5工程配置为中央工程、并连接到另一个 CC2340R5作为外设。 外设本质上实现了数据流示例、但它通过发布 GATT 通知定期从 ADC 发送数据。 发送的数据为8字节、频率为1。 我运行代码、可以从中央读取 ADC 的值、但随着时间的推移、器件停止接收通知。
现在、在中央设备上、我会注意到每次从外设收到通知时、可用堆都会递减、这表明栈没有释放这些 GATT 通知。 我的理解是、如果这些消息由堆栈创建和分配、我们不应在 GATT 事件处理程序中释放、但 ROV 显然表明此处存在内存泄漏。
您应该如何处理通知消息、还是应该在用户应用程序中释放这些消息?
以下是 app_data.c 中我的 ATT_Handle_Value_Noti 案例的代码片段:
case ATT_HANDLE_VALUE_NOTI: { uint32_t remoteVal1, remoteVal2; attHandleValueNoti_t *rsp = (attHandleValueNoti_t*) &gattMsg->msg.handleValueInd; if(rsp->len == 8) { GPIO_toggle( CONFIG_GPIO_LED_GREEN ); remoteVal1 = BUILD_UINT32( rsp->pValue[0], rsp->pValue[1], rsp->pValue[2], rsp->pValue[3]); remoteVal2 = BUILD_UINT32( rsp->pValue[4], rsp->pValue[5], rsp->pValue[6], rsp->pValue[7]); MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE1, 0, "Notification received = val1 = %d, val2 = %d", remoteVal1, remoteVal2); } break; }
下面是一个简短的视频,介绍了应用程序运行时的堆视图,其中显示了可用堆的数量正在稳步下降:
e2e.ti.com/.../cc2340_5F00_notification_5F00_mem_5F00_leak_5F00_v1.mp4
Munan