打印
[STM32F1]

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

[复制链接]
1447|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
happy_10|  楼主 | 2021-6-9 18:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IAR环境下,定义的全局变量是存储在Flash中吗?

使用特权

评论回复
沙发
jiajs| | 2021-6-9 18:58 | 只看该作者
楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
happy_10|  楼主 | 2021-6-9 19:00 | 只看该作者
之前一直认为理所当然的一个地方现在突然发现有很大问题。
就是我们在定义一个变量的时候,如果定义成const类型的话肯定是存储在Flash中的,但是如果定义一个非const类型的变量,那这个变量是存在哪里的?

使用特权

评论回复
地板
happy_10|  楼主 | 2021-6-9 19:03 | 只看该作者
之前一直以为存在RAM里,但是后来发现不对啊, 在系统没上电的时候,RAM里根本就什么也没有啊

使用特权

评论回复
5
lizye| | 2021-6-9 19:09 | 只看该作者
上电之后呢?

使用特权

评论回复
6
happy_10|  楼主 | 2021-6-9 19:12 | 只看该作者
上电之后系统运行后,RAM中才会有之前定义的变量,那我就有个疑问了?如果我定义了一个很大的全局数组并初始化,比如 uint32_t arr[1024] = {0,1,2,3,4,...,1023}; 那么这个数组的相关信息是不是也保存在Flash中呢?

使用特权

评论回复
7
happy_10|  楼主 | 2021-6-9 19:18 | 只看该作者
定义变量的这部分代码在汇编中是怎么体现的?我在反汇编里看不到定义变量的代码啊,突然发现这块完全不明白了.

使用特权

评论回复
8
sonicll| | 2021-6-9 19:21 | 只看该作者
全局变量,如果初始值不是零,编译后会放在data段里,初始值存在FLASH里;如果初始值为零,编译后会放在bss段里,FLASH不用保存零值

使用特权

评论回复
9
yszong| | 2021-6-9 19:21 | 只看该作者
全局变量也是在ram运行的。

使用特权

评论回复
10
zwll| | 2021-6-9 19:46 | 只看该作者
变量代码不都是在程序执行的时候体现吗?

使用特权

评论回复
11
bqyj| | 2021-6-9 19:52 | 只看该作者
非const是不可能放flash的!

使用特权

评论回复
12
llljh| | 2021-6-9 20:05 | 只看该作者
变量的初始化内容存flash,程序开始跑后,是先把flash的内容copy到ram后再给你用的

使用特权

评论回复
13
happy_10|  楼主 | 2021-6-9 20:08 | 只看该作者
也就是说,如果我的变量不进行初始化,flash中就不会占用这个变量的空间,如果变量进行了初始化,flash中就会存放这个变量初始化的内容,是不是这个意思?

使用特权

评论回复
14
happy_10|  楼主 | 2021-6-9 20:10 | 只看该作者
还有如果变量初始化的内容如果存在flash中,那程序开跑后,是怎么copy到ram中的?

使用特权

评论回复
15
tian111| | 2021-6-9 20:12 | 只看该作者
IAR 的程序入口是 __iar_program_start,可以在map文件找到,这个函数就是专门做开机初始化的,这个函数做完初始化工作后才开始执行你的main函数的

使用特权

评论回复
16
songqian17| | 2021-6-9 20:14 | 只看该作者
RAM里面

使用特权

评论回复
17
chenho| | 2021-6-9 20:16 | 只看该作者
不是的,如果你的定义类型为code 那是存储在Flash里的。

使用特权

评论回复
18
zwll| | 2021-6-9 20:19 | 只看该作者
你可以研究一下数据类型和存储位置的关系。

使用特权

评论回复
19
chuxh| | 2021-6-9 20:28 | 只看该作者
全局变量也是在ram运行吧。

使用特权

评论回复
20
juventus9554| | 2021-6-9 20:31 | 只看该作者
楼主是准备定义地址,然后读写数据?

使用特权

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

本版积分规则

744

主题

7973

帖子

6

粉丝