主题中讨论的其他器件: CC2640
嗨、大家好、
在调试基于基本 BLE 项目的持久应用模型 OAD 片上项目时、我想知道 SDK 7_40版本中的默认代码是否存在意外问题:
该代码位于 [OADService_SetParameter (oadServiceChar_e srvChar、uint8 len、void * value)的 bStatus_t OADService_SetParameter (oadServiceChar_e srvChar、len、void * value)函数中、似乎是为通知结构分配的内存
attHandleValueNoti_t 通知;
使用这行代码:
notification.pValue = GATT_BM_alloc (ACTIVeOadCxnHandle、ATT_Handle_Value_Noti、 len、NULL);
如果你检查函数中的错误路径、有两条路径、其中分配的内存(在本例中是应用发出 BLK 大小请求时)可能无法返回堆。
其中一种情况可能会导致泄漏:
pAttr = GATTclg App_Find 11ntr (oadAttrTbl、GATT_NUM_ATTRS(oadAttrTbl)、 oadCharVals+srvChar);
if (pAttr == NULL)
{
//如果找不到属性,则报告错误
返回(ATT_ERR_ATTR_NOT_FOUND);
}
另一个是在这里、其中在 free 函数中使用了错误的指针:
状态= GATT_Notification (activeOadCxnHandle、¬ification、false);
if (状态!=成功)
{
//堆栈将为我们释放内存,如果
//通知成功,否则我们
//手动释放内存
GATT_BM_FREE ((gattMsg_t *)&NOTIFICATION、ATT_Handle_Value_Noti);
}
在后一种情况下,调用 GATT_BM_FREE()会尝试传递在栈上创建的本地地址,而 FREE 命令最有可能避免对其执行操作(这可能会导致另一个泄漏)。
问:我在这里遗漏了什么? 是否需要修改此源文件的本地工作副本以更正这两个错误路径?
提前感谢。
路径 C:\ti\simplelink_lowpower_f3_sdk_7_40_00_64\source\ti\bleapp\services\oad\oad_service.c