您好,我在使用该芯片分配相对较大的阵列时遇到了一个小问题,我使用的是SDK 5.0.4,我有一个2结构,
typedef结构{uint8_t x,uint8_t y;}s1;
类型定义结构{
uint8_t c;
s1*buf;//指向第一个结构的数组的指针
}s2;
然后我为第二个结构s2动态分配内存,
s2*mys2=malloc(sizeof(s2));
然后在结构s2的初始值设定项中,我为结构s1分配内存
s2->buf=malloc(sizeof(s1)*长度);
如果内部数组的长度相对较小(70),则一切正常,但如果我将大小增加到该长度以上,程序将崩溃,看起来像是内存错误。我看过文档,DA15580有足够的RAM和ROM(82KB ROM,42KB SRAM)。
我的代码基于SDK中的模板,内存分配在我的初始化函数中调用,该函数传递给.app_on_init。我想知道BLE堆栈对动态内存分配是否有任何限制,或者这可能是我的程序组织中的问题。感谢您的帮助。
设备:
嗨,41,
我复制了您的问题,您的代码崩溃的原因是,当长度超过70时,结构的初始化需要太长时间,因此WDOG过期。请尝试在另一个函数中添加初始化代码。例如,我添加了长度为100的结构的初始化,但代码未获得cr你可以在附件中找到我使用的代码片段。
谢谢,下午好
好的,非常感谢。我会试试这个。禁用看门狗或者至少增加触发时间是明智的吗?
这最终是一个堆问题,默认情况下,堆大小设置为0x100,即使对于一般应用程序,这也非常小。任何在动态内存分配方面存在此类问题的人都应该尝试在boot_vector.s文件中增加堆大小。亚博国际官网平台网址
嗨,41,
很高兴你解决了你的问题。谢谢你的提示。
谢谢,下午好