为贪婪算法

时间:2017-03-23 19:42:02

标签: memory embedded iar

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

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

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

  

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

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

  

现在在动态内存中分配(例如堆),它是否适用于嵌入式系统?

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

  

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

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

如果你要使用堆,你仍然需要为最坏的情况提供那么多内存,所以堆在这里没有用,也没有为你节省任何内存。完全摆脱堆并以更好的方式使用该内存。