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

发布网友 发布时间:2022-04-23 16:18

我来回答

1个回答

热心网友 时间:2023-10-09 06:34

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

从初学者使用的角度建议,数组要赋初值,即使是0。追问OK!那如果我用的一款stm32的芯片内部有20KB的内存,我在程序里定义一个30KB的数组,那程序能执行吗?

追答如果是普通数组肯定不行。
如果只是常量你可以通过const修饰,放在ROM区

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com