你好,
我尝试修改ble_app_peripheral示例。我想用一部分数字信号处理系统代码进行串行通信。在文件user_buffer.c中有函数user_buffer_create(…)。
在执行以下行之后:
buffer->data_ptr = ke_malloc((long)(buffer->buffer_size)*sizeof(uint8_t), KE_MEM_NON_RETENTION);
执行在wrap_platform_reset时停止。
我认为内存分配有问题。
你有解决方案吗?
致以最亲切的问候
贝恩德•
设备:
嗨beckel,
内存分配没有问题,但它取决于你试图分配多少内存,显然你试图分配比可用内存更多的内存,然后你得到那个断言。需求方,你作为一个参考设置不同大小的堆为了管理分配的缓冲区,检查da1458x_config_advanced.h文件和检查的值MSG_HEAP_SZ NON_RET_HEAP_SZ,如果这些定义不存在SDK将默认值为您的实现显然是不够的。
由于MT_dialog
嗨MT_dialog,
我已经将MSG_HEAP_SZ和NON_RET_HEAP_SZ的值更改为与DSPS中使用的相同的值。我还尝试将malloc大小减小到10。但错误是一样的。是否可以查看保留的RETENTION MEMORY的大小?如果某些定义是错误的,那么条件编译可能有问题。
谢谢
贝恩德•
嗨beckel,
ke_malloc不仅仅从RETENTION memory中保留内存,用于环境、消息和数据库的堆(heap_env_area、heap_msg_area和heap_db_area)存储在保留内存中,非保留堆存储在sysram中,您可以在已构建的应用程序的.map文件中检查这些堆的大小。如果您试图分配大小为10字节的内存,并且最终出现分配断言失败,那么可能在您的实现上存在内存泄漏。在ble_app_peripheral上测试ke_malloc,分配2048字节(在堆大小中使用适当的mods),没有问题。
由于MT_dialog
嗨MT_dialog,
你如何在ble_app_peripheral上测试ke_malloc ?你把ke_malloc放哪了?我认为调用ke_malloc有问题。如果我使用malloc保留空间,那么它就可以工作。
由于贝恩德•
嗨beckel,
为了适应分配的空间,我扩展了堆,并在user_app_adv_start()中调用了ke_malloc。
由于MT_dialog