为贪婪算法的堆/堆栈创建新的内存区域



在IAR内存配置设置中使用手动范围,并在所有可用的静止内存上创建了一个新的读/写区域(直到0xFFFFFFFF)。然后将此区域附加到堆/堆栈的链接器中。扩展STM32芯片(IAR编译器)上程序内存资源的可用性是否正确?

如何在芯片上获得尽可能多的内存,以防它只对标准库函数集执行数学计算?

该算法使用了很多现在在动态内存中分配的中间缓冲区(例如堆),这是嵌入式系统上的正确方法吗?我想数组太大了,以至于 C VLA 会占用太多的堆栈位置。数据是动态的,例如,我们不知道数组的大小,也无法静态预分配它。

我还发现内存配置中有很多SFR类型的块(每个大约256 Mb!)标记为ExtDev*。如果是"特殊功能寄存器",它怎么能成为存储器?这个记忆区域的意义是什么,我可以写信给他们吗?

谢谢

如何在芯片上获得尽可能多的内存,以防它只对标准库函数集执行数学计算?

如果不切换具有更多内存的芯片,则无法更改微控制器内的RAM数量。因此,您需要以最佳方式使用您拥有的 RAM。

现在在动态内存中分配(例如堆),这在嵌入式系统上是正确的方法吗?

不,因为在微控制器上使用它没有任何意义。看到这里。

数据是动态的,例如,我们不知道数组的大小,也无法静态预分配它。

当然,您事先知道数组的大小。大小小于芯片上可用的 RAM。因此,您需要指定允许的最大值。这反过来意味着您可以并且必须静态地预分配空间,因为您需要处理数组大小 == 最大允许的情况。

如果要使用堆,则在最坏的情况下,您仍然需要有那么多内存可用,因此堆在这里没有帮助,也不会为您节省任何内存。完全摆脱堆并以更好的方式使用该内存。

最新更新