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

Creating new memory regions for heap / stack for voracious algorithm

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

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

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

我还发现内存配置中有很多 SFR 类型的块(每个大约 256 Mb!)标记为 ExtDev*。 'Special function register'怎么会是回忆呢?这个内存区是什么意思,我可以写吗?

谢谢

How to get as much memory as possible on the chip in case it will perform only mathematical calculations on standard library functions set?

如果不换用内存更大的芯片,就无法更改微控制器内部的 RAM 容量。因此,您需要以最佳方式使用您拥有的 RAM。

allocated in dynamic memory now (e.g. heap), is it a proper way on embedded systems?

不,因为在微控制器上使用它没有任何意义。 See this.

The data is dynamic, e.g. we don't know the size of arrays and can't statically preallocate it.

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

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