动态内存分配的问题

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

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

设备:
PM_Dialog
离线
最后看到:5小时2分钟前
工作人员
加入:2018-02-08 11:03
嗨uched41,

嗨uched41,

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

谢谢,PM_Dialog

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

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

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

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

PM_Dialog
离线
最后看到:5小时2分钟前
工作人员
加入:2018-02-08 11:03
嗨uched41,

嗨uched41,

很高兴你把问题解决了。谢谢你的指点。

谢谢,PM_Dialog