【发布时间】:2016-08-01 20:54:06
【问题描述】:
我目前正在 Atmel SAML21J 微控制器上开发嵌入式应用程序,我有 256KB 闪存和 40KB SRAM 存储器。当我在 MCU 上编写我的应用程序时,我收到以下消息:
Program Memory Usage 66428 bytes 24,6 % Full
Data Memory Usage 29112 bytes 71,1 % Full
这似乎意味着即使在我开始运行我的代码之前,我已经拥有 71% 的完整 RAM。
我想知道以下几点:
RAM 中定义了什么,Flash 中定义了什么?
我可以做些什么来使用更多的闪存(即只有 24% 已满)来节省 SRAM 上的空间,以及如何做?
- 我看到了一个“.ld”文件,它指定了我的堆栈大小:如果我将其设置得更高,它会在 RAM 中留出更多空间吗?
- 在这个 .ld 文件中,内存(闪存 + SRAM)是否被视为一个唯一的内存实体? (意思是SRAM的地址开始和flash的结束,例如?)
即使我阅读了很多关于这个主题的东西,这对我来说仍然是阴暗的,如果你们能在这方面启发我,我将不胜感激。 谢谢。
【问题讨论】:
-
我不明白。您正在为嵌入式应用程序构建,因此您可以绝对控制内存映射中的段和段放置。您应该已经知道您要问的一切!如果您想要更详细的信息,请查看您的链接器映射文件。
-
..当然还有你的用户手册。
-
Martin James,我知道,但所有这些对我来说都是阴暗的,回答这些问题将有助于我管理内存映射。我还没有这样做,因为这对我来说有点难以理解。
-
如果没有您的硬件和软件构建的所有详细信息,就没有答案。只有你有那个。嵌入式作业的内存计划对于 SO 问题来说过于宽泛,它需要对您的整体设计有深入的了解。
标签: c memory compilation linker