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

STM32被设置为从内部FLASH启动,即BOOT0给的低电平。然后程序是不是就下载到flash里了?然后我在程序里定义一个全局变量的数组,不赋初值,中断里给数组赋值。再... STM32被设置为从内部FLASH启动,即BOOT0给的低电平。然后程序是不是就下载到flash里了?然后我在程序里定义一个全局变量的数组,不赋初值,中断里给数组赋值。再下电之后程序里的数组的有值吗? 展开
 我来答
百度网友b12a2e039
推荐于2017-10-07 · TA获得超过1533个赞
知道小有建树答主
回答量:819
采纳率:0%
帮助的人:690万
展开全部
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区
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式