动态内存分配的问题

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
5个职位/ 0个新
最后发表
uched41
离线
最后看到:2年9个月前
加入:2018-08-17 23:02
动态内存分配的问题

你好,我有一个小问题分配相对较大的数组使用这个芯片,我使用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堆栈,或者这可能是我的程序组织的问题。谢谢你的帮助。

设备:
PM_Dialog
离线
最后看到:1周前1天前
工作人员
加入:2018-02-08 11:03
嗨uched41,

嗨uched41,

我复制了你的问题,你的代码崩溃的原因是,当长度超过70时,结构的初始化花费了太长时间,所以WDOG过期。请尝试将初始化代码添加到另一个函数中。例如,我添加了长度为100的结构的初始化,代码没有崩溃。您可以在附件中找到我使用的代码片段。

谢谢,PM_Dialog

uched41
离线
最后看到:2年9个月前
加入:2018-08-17 23:02
好的,非常感谢,我会努力的

好的,非常感谢,我会试试的。是否建议禁用看门狗或至少增加触发时间?

uched41
离线
最后看到:2年9个月前
加入:2018-08-17 23:02
最后变成了一堆

这最终变成了一个堆问题,默认情况下,堆大小被设置为0x100,即使对于一般应用程序,这个值也非常小。雷竞技安卓下载任何有动态内存分配问题的人都应该尝试在boot_vector中增加堆大小。年代文件。

PM_Dialog
离线
最后看到:1周前1天前
工作人员
加入:2018-02-08 11:03
嗨uched41,

嗨uched41,

很高兴你想通了。谢谢你的提示。

谢谢,PM_Dialog