发新帖我要提问
12
返回列表
打印
[STM32F1]

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

[复制链接]
楼主: happy_10
手机看帖
扫描二维码
随时随地手机跟帖
21
stly| | 2021-6-9 20:35 | 只看该作者 回帖奖励 |倒序浏览
你说的情况,已经不属于C(应用层的MAIN()),上电时,开始运行的不是MAIN,而是复位进程,有一个进程就是全局或全局变量的初始化,初始化的数据当然在FLASH里了。这个初始化不是用人(应用开发方)能掌握的。这是编译器或IC固化的一段代码。全局变量的生成(变量的定位,在生成执行文件时已经确定)与初始化是二个不同的过程。

使用特权

评论回复
22
llljh| | 2021-6-9 20:41 | 只看该作者
ram变量初始化会被编译成指令放在flash中,运行后修改RAM的内容。

使用特权

评论回复
23
heweibig| | 2021-6-9 20:46 | 只看该作者
程序加载的时候初始化,你可以在变量前加CONST和不加分别进行编译看RAM和ROM大小的变化

使用特权

评论回复
24
happy_10|  楼主 | 2021-6-9 20:49 | 只看该作者

__iar_program_start这个函数我在启动文件中看见过,不过一直没找到在哪儿,应该是IAR编译器内部函数。
我在网上找到了关于这个函数的说明,里面确实是完成初始化的,包括初始化初始值为0的全局变量和初始值非0的全局变量,其中涉及到从Flash拷贝非0初始值到RAM中的过程。还是学艺不精啊,要不是之前接触到启动文件,链接器和icf配置文件,这个问题估计现在还是想当然呢...太可怕了。

使用特权

评论回复
25
wyjie| | 2021-6-9 20:51 | 只看该作者
可以去看TI的CCS,28糸列的DSP的CMD文档来得更明白。

使用特权

评论回复
26
heweibig| | 2021-6-9 20:53 | 只看该作者
flash不是存储空间吗

使用特权

评论回复
27
wuhany| | 2021-6-9 20:55 | 只看该作者
5楼正解,要让变量能初始化为某个值这个值当然要保存在flash里,而变量本身是在ram区,flash里保留的仅是它的初始值。

使用特权

评论回复
28
happy_10|  楼主 | 2021-6-9 20:57 | 只看该作者

明白了,多谢大家讨论这么多哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则