STM32程序编译、存储、运行分析

1 程序的编译

MDK的编译过程如下图所示:

程序编译后,就变成了指令和数据。

数据又划分为只读数据、可读可写的数据、未初始化的数据。(有时有不同的划分方法:全局变量静态变量区、局部变量区、程序员开辟的数据区)

每一种类型归为一个域,程序在存储或运行的时候,不同的域会呈现不同的状态。

在keil里编译后,build output框有如下提示信息:

code:代码段

RO-data:read only(只读数据)

RW-data:read-write(读写数据)

ZI-data:zero initial(初始化为0的数据或没有初始化的数据)

2 STM32存储空间图

在程序运行的时候,一些数据会被搬移到RAM中去,如下图所示:

 

3 STM32程序在RAM里运行还是flash ROM里运行

参考

STM32中的程序在RAM还是FLASH里运行?

https://blog.csdn.net/yangkuiwu/article/details/78219995?locationNum=2&fps=1

STM32程序的组成、存储与运行

https://blog.csdn.net/qq_42900996/article/details/89458107

KEIL编译器区分RW-data和ZI-data

https://blog.csdn.net/xiaogu0322/article/details/78218638

原文地址:https://www.cnblogs.com/QQ2962269558/p/13553711.html