仅使用静态内存的资源大小调整

时间:2017-07-10 19:12:34

标签: gcc resources arm embedded stm32

对于我的嵌入式应用程序,我们使用的是STM32F411芯片。该芯片具有512kb的闪存和128kb的RAM。 我想做一个资源调整exersize所以我可以监控我在资源上的做法(FLASH和RAM)

我只静态分配没有Malloc()调用的内存。用gcc调整大小给了我:

text      data     bss     dec    hex     filename
230868   11236   74048  316152   4d2f8   application.elf

从我已经完成的读数(https://mcuoneclipse.com/2013/04/14/text-data-and-bss-code-and-data-size-explained/)我明白,因为没有动态分配的资源,上面的信息应该能够让我清楚地了解我将运行的RAM使用的深度。

我可以期望RAM的使用最终成为上面链接上每个摘要的数据部分+ bss部分吗?所以在这种情况下为85284字节。

Flash大小为文本+数据部分。在这种情况下:242104?

3 个答案:

答案 0 :(得分:1)

  

我能否期望RAM最终成为数据部分+ bss   每个链接上面的链接部分?所以在这种情况下85284   字节。

取决于您的链接描述文件。特别是堆栈和堆配置。同样是文本段和&数据段。

有关详细信息,您需要查看.map文件。

答案 1 :(得分:0)

是的,但也要考虑即使你没有在代码中明确使用动态内存,库函数也可能。如果你试图保持对内存使用的超级严密控制,并且你有一个使用接近你的总RAM的应用程序,你需要考虑到这一点。如果不这样做,您可能会遇到讨厌的运行时问题。

答案 2 :(得分:-1)

简而言之,是的。由于需要为初始化数据部分存储初始化器,因此“数据”部分在内存使用中计数两次 - 一次用于闪存,一次用于RAM。这也是为什么非常努力将常量数据声明为“const”非常重要的原因。然后将该数据置于闪存中,并且仅在整个内存使用中计数一次。