你好,我有一个小问题分配相对较大的数组使用这个芯片,我使用SDK 5.0.4,我有2个结构体,
typef struct{uint8_t x, uint8_t y;} s1;
typedef struct {
uint8_t c;
s1 *缓冲区;//指向第一个结构体数组的指针
} s2;
然后为第二个结构s2动态分配内存,
S2 * mys2 = malloc(sizeof(S2));
然后在struct s2的初始化式中,为struct 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