[STM32F1] IAR环境下,定义的全局变量是存储在Flash中吗?

[复制链接]
stly 发表于 2021-6-9 20:35 | 显示全部楼层
你说的情况,已经不属于C(应用层的MAIN()),上电时,开始运行的不是MAIN,而是复位进程,有一个进程就是全局或全局变量的初始化,初始化的数据当然在FLASH里了。这个初始化不是用人(应用开发方)能掌握的。这是编译器或IC固化的一段代码。全局变量的生成(变量的定位,在生成执行文件时已经确定)与初始化是二个不同的过程。
llljh 发表于 2021-6-9 20:41 | 显示全部楼层
ram变量初始化会被编译成指令放在flash中,运行后修改RAM的内容。
heweibig 发表于 2021-6-9 20:46 | 显示全部楼层
程序加载的时候初始化,你可以在变量前加CONST和不加分别进行编译看RAM和ROM大小的变化
 楼主| happy_10 发表于 2021-6-9 20:49 | 显示全部楼层

__iar_program_start这个函数我在启动文件中看见过,不过一直没找到在哪儿,应该是IAR编译器内部函数。
我在网上找到了关于这个函数的说明,里面确实是完成初始化的,包括初始化初始值为0的全局变量和初始值非0的全局变量,其中涉及到从Flash拷贝非0初始值到RAM中的过程。还是学艺不精啊,要不是之前接触到启动文件,链接器和icf配置文件,这个问题估计现在还是想当然呢...太可怕了。
wyjie 发表于 2021-6-9 20:51 | 显示全部楼层
可以去看TI的CCS,28糸列的DSP的CMD文档来得更明白。
heweibig 发表于 2021-6-9 20:53 | 显示全部楼层
flash不是存储空间吗
wuhany 发表于 2021-6-9 20:55 | 显示全部楼层
5楼正解,要让变量能初始化为某个值这个值当然要保存在flash里,而变量本身是在ram区,flash里保留的仅是它的初始值。
 楼主| happy_10 发表于 2021-6-9 20:57 | 显示全部楼层

明白了,多谢大家讨论这么多哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部