You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于IAR Embedded Workbench.map文件及MK60DN512VLQ10内存分配的问询

解答MK60DN512VLQ10芯片IAR .map文件的内存疑问

Hey, let's clear up your confusion about the memory categories in the IAR .map file for your MK60DN512VLQ10 (512KB Flash, 128KB RAM) chip:

三类内存的存储位置

  • 158,852字节只读代码内存:这部分是你的程序核心指令(比如函数实现、中断服务程序),百分之百存在Flash中。MK60的Flash是只读存储介质,专门用来存放固化的可执行代码,完全匹配只读代码的属性。
  • 18,446字节只读数据内存:这类是编译时就确定的常量数据——比如const修饰的全局变量、字符串字面量,同样存储在Flash里。把只读数据放在Flash能省下RAM空间,毕竟RAM资源比Flash更宝贵。
  • 22,532字节读写数据内存:这部分涵盖了全局变量、非const的静态变量,还有程序运行时的栈(Stack)和堆(Heap),全部存在RAM中。RAM的可读写特性正好满足这类数据在运行时需要修改的需求。

内存占用是否会在运行时变化

  • 只读代码和只读数据的大小是固定不变的:它们在编译链接阶段就已经确定,烧录到Flash后就不会再改变,属于芯片内存的固定总占用部分。
  • 读写数据的大小会随程序运行动态变化
    • 其中全局变量、非const静态变量的占用是编译时确定的,属于固定部分;
    • 栈的占用会随着函数调用深度变化——比如递归调用、多层函数嵌套时,栈的使用量会增加;
    • 堆的占用则取决于你使用malloc()/free()这类动态内存分配函数的操作:申请内存时堆占用上升,释放时下降。
  • 补充一下:.map文件里显示的读写数据大小,一般是静态固定占用加上你在IAR配置中预留的栈/堆空间,实际运行时的真实占用会根据程序的执行行为产生波动。

内容的提问来源于stack exchange,提问作者Yavni

火山引擎 最新活动