动态内存分配的问题

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
5个帖子/ 0新
最后一篇
Uched41
离线
最后一次露面:2年5个月前
加入:2018-08-17 23:02
动态内存分配的问题

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

设备:
PM_DIALOG.
离线
最后一次露面:2小时20分钟前
职员
加入:2018-02-08 11:03
嗨Uched41,

嗨Uched41,

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

谢谢,PM_DIALOG.

Uched41
离线
最后一次露面:2年5个月前
加入:2018-08-17 23:02
好的,非常感谢我会尝试

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

Uched41
离线
最后一次露面:2年5个月前
加入:2018-08-17 23:02
它最终是一堆

它最终是一个堆问题,默认情况下,堆大小设置为0x100,即使是平均应用程序也很小。亚博国际官网平台网址任何具有动态内存分配问题的任何人都应该尝试增加boot_vector.s文件中的堆大小。

PM_DIALOG.
离线
最后一次露面:2小时20分钟前
职员
加入:2018-02-08 11:03
嗨Uched41,

嗨Uched41,

很高兴你识上你的问题。谢谢你的迹象。

谢谢,PM_DIALOG.