Cortex-M3:为什么需要区分“加载地址”和“执行地址”?
难度:★
本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。
先看两个地址。
你写了一个全局变量:
intg_counter=100;用调试器查看&g_counter,显示0x20000000。
用objdump或fromelf查看固件,发现100这个初始值存在0x08001000。
同一个变量,为什么有两个地址?
0x08001000是 Flash 地址,0x20000000是 RAM 地址。它们都是g_counter的“家”,只不过一个是它“睡觉”的地方,一个是它“干活”的地方。
这就是嵌入式系统里最基础也最容易搞混的概念:加载地址和执行地址。
今天这篇文章,就来把这两个地址
