stm32程序里定义的数组是存到Flash里还是SRAM

2024-10-30 08:02:45
推荐回答(1个)
回答1:

ARM芯片复位后都是从0x0000 0004地址启动。STM32会转入一段自己的bootloader。然后根据BOOT引脚,选择启动位置。如果是FLASH则跳转到0x0800 0000(不知道地址有没记错)执行。
程序一般指定FLASH的地址是链接地址(ARM使用绝对地址,运行和链接地址必须一致)。
数组分2类,用const标示的常量数组,普通数组。
const数组一般位于FLASH中的一个特定位置。
普通数组位于堆,一般是RAM的低地址往上生长。
数组的初值存在FLASH中,即RODATA段,开机时通过一段程序(通常是汇编) ,拷贝到地址的RAM中。
如果数组没给初值,会通过bss段全部清成0。
如果是用KEIL、IAR等不用关心这些。因为这些设置建立工程时候都已经做好了(链接地址&启动文件)。

从初学者使用的角度建议,数组要赋初值,即使是0。