对于我的嵌入式应用程序,我们使用的是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?
答案 0 :(得分:1)
我能否期望RAM最终成为数据部分+ bss 每个链接上面的链接部分?所以在这种情况下85284 字节。
取决于您的链接描述文件。特别是堆栈和堆配置。同样是文本段和&数据段。
有关详细信息,您需要查看.map文件。
答案 1 :(得分:0)
是的,但也要考虑即使你没有在代码中明确使用动态内存,库函数也可能。如果你试图保持对内存使用的超级严密控制,并且你有一个使用接近你的总RAM的应用程序,你需要考虑到这一点。如果不这样做,您可能会遇到讨厌的运行时问题。
答案 2 :(得分:-1)
简而言之,是的。由于需要为初始化数据部分存储初始化器,因此“数据”部分在内存使用中计数两次 - 一次用于闪存,一次用于RAM。这也是为什么非常努力将常量数据声明为“const”非常重要的原因。然后将该数据置于闪存中,并且仅在整个内存使用中计数一次。