你好,我有一个小问题分配相对较大的数组使用这个芯片,我使用SDK 5.0.4,我有一个2结构体,
Typedef struct{uint8_t x, uint8_t y;} s1;
typedef struct {
uint8_t c;
s1 *缓冲区;//指向第一个结构体数组的指针
} s2;
然后动态地为第二个结构s2分配内存,
mys2 = malloc(sizeof(S2));
然后在结构体s2的初始化式中,我为结构体s1分配内存
S2 ->buf = malloc(sizeof(s1)*length);
如果内部数组的长度相对较小(70),那么一切工作正常,但如果我将长度增加到这个长度以上,程序就会崩溃,看起来像内存错误。我已经看了文档,DA15580有足够的RAM和ROM (82KB ROM, 42KB SRAM)。
我的代码是基于SDK的模板,内存分配在我的初始化函数中被调用,它被传递给.app_on_init。我想知道是否有任何限制对动态内存分配造成的BLE堆栈,或者这可能是我的程序组织的问题。谢谢你的帮助。
设备:
嗨uched41,
我复制了你的问题,你的代码崩溃的原因是,当长度超过70时,结构的初始化花费了太长时间,所以WDOG过期。请尝试将初始化代码添加到另一个函数中。例如,我添加了长度为100的结构的初始化,代码没有崩溃。您可以在附件中找到我使用的代码片段。
谢谢,PM_Dialog
好的,非常感谢,我会试试的。是否建议禁用看门狗或至少增加触发时间?
这最终变成了一个堆问题,默认情况下,堆大小被设置为0x100,即使对于一般应用程序,这个值也非常小。雷竞技安卓下载任何有动态内存分配问题的人都应该尝试在boot_vector中增加堆大小。年代文件。
嗨uched41,
很高兴你想通了。谢谢你的提示。
谢谢,PM_Dialog