你好,我有一个使用这个芯片分配相对较大的阵列的一点问题,我正在使用SDK 5.0.4,我有2个结构,
typedef结构{uint8_t x,uint8_t y;} s1;
typedef struct {
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堆栈引起的动态内存分配有任何限制,或者这可能是我的程序组织中的问题。谢谢你的帮助。
设备:
嗨Uched41,
我复制了你的问题,以及你的代码崩溃的原因是,在长度超过70时,结构的初始化需要太长的时间,因此WDOG到期。请尝试在其他功能中添加初始化代码。例如,我添加了长度100的结构的初始化,代码没有崩溃。您可以找到我使用的代码片段。
谢谢,PM_DIALOG.
好的,谢谢很多我会尝试这个。是否建议禁用看门狗或至少增加触发时间?
它最终是一个堆问题,默认情况下,堆大小设置为0x100,即使是平均应用程序也很小。亚博国际官网平台网址任何具有动态内存分配问题的任何人都应该尝试增加boot_vector.s文件中的堆大小。
嗨Uched41,
很高兴你识上你的问题。谢谢你的迹象。
谢谢,PM_DIALOG.