主题中讨论的其他器件:LAUNCHXL-CC26X2R1
工具与软件:
您好、TI!
我在使用 名为"DMM 15.4 Collector + BLE 远程显示"的 DMM 示例时遇到了一个奇怪的问题。 我正在使用中 LaunchXL-CC26X2R1 和 Simple Link SDK 7.40.0.77
在蓝牙堆栈初始化之前、我需要分配并使用一些动态分配的内存。 这会导致一个问题-示例代码停止工作、并且可能会进入一些有效的处理程序(不显示日志、蓝牙不再广播、UART 控制台不响应输入)。 此处、您可以看到一个简单的示例、该示例演示了如何触发问题:
/* Update User Configuration of the stack */
user0Cfg.appServiceInfo->timerTickPeriod = Clock_tickPeriod;
user0Cfg.appServiceInfo->timerMaxMillisecond = ICall_getMaxMSecs();
#ifdef BLE_START
/* Initialize ICall module */
ICall_init();
uint8_t *data = ICall_malloc(8196);
if(NULL != data) {
memset(data, 0xAB, 8096);
ICall_free(data);
}
/* Start tasks of external images */
ICall_createRemoteTasks();
pBleTaskHndl = ICall_getRemoteTaskHandle(0);
RemoteDisplay_createTask();
如上所示、我正在分配相当大的存储器块并将其设置为0xAB 的值(这非常重要!)。 该存储器立即被取消分配、但存储器值仍为0xAB -这会导致无线电 MCU 停止正常运行。
但是、如果我修改 memset 以将此内存区域设置为0x00、则一切都将正常运行、就像什么都没有发生一样。 这最终导致在蓝牙初始化之前无法分配和使用任何存储器。
问题:
- 我还没有看到过任何提到在蓝牙初始化前不能使用 iCall_malloc 的文档-是正确的吗? 在调用 iCall_createRemoteTasks 之前使用 iCall_malloc 吗
- 为什么蓝牙堆栈不能抗扰动态分配块中的初始存储器值? 这似乎是 一个错误

