世界杯积分榜_世界杯几年一届 - fjmzsy.com

全局变量的初始值保存在flash的什么位置?

9322

12个回答

哀歌与世无争

回答时间:2019-8-24 16:12:54

a0a.1 32b0c

可以用 __attribute__ ((at())绝对定位来指定变量和常量编译后的地址,例如

//变量地址定位到RAM地址0x02000F00

__attribute__((at(0x02000F00)))u16 AtRAM[4]={0x0001,0x0002,0x0003,0x0004};

//常量地址定位到ROM地址0x08000F00

__attribute__((at(0x08000F00)))const u16 AtROM[4]={0x0001,0x0002,0x0003,0x0004};复制代码

编译通过后双击工程文件夹,弹出.map文件

搜索一下,看是不是真的编译到指定的位置

最后再硬件调试,memory窗口查看一下就ok了

评分

参与人数 1蝴蝶豆 +2

收起

理由

STMCU

+ 2

查看全部评分

1

评论

回复

支持 1

反对 0

wenyangzeng

回答时间:2019-8-24 15:53:43

a0a.1 32b0c

FLASH保存代码和常量,全局、静态变量只能保存在RAM中

评分

参与人数 1蝴蝶豆 +2

收起

理由

STMCU

+ 2

查看全部评分

0

评论

回复

支持

反对

tanic

回答时间:2019-8-24 16:31:21

a0a.1 32b0c

您好,是保存在flash中,可以指定具体地址的,不过操作难度过高,不建议您这么做。可以试着用别的方案

0

评论

回复

支持

反对

zhao.zhao

回答时间:2019-8-24 17:52:09

a0a.1 32b0c

全局变量的地址位于芯片内部的SRAM中,系统分配的,初始化值默认为0,不需要保存在FLASH。如果不是0,则值应该保存在FLASH中,位置不定,由编译连接的时候决定。

评分

参与人数 1蝴蝶豆 +2

收起

理由

STMCU

+ 2

查看全部评分

0

评论

回复

支持

反对

zhao.zhao

回答时间:2019-8-24 18:18:32

a0a.1 32b0c

如果要指定FLASH中的位置,你先要做个程序B,把FLASH的驱动写好,再在指定的地址写上初始化的值,还要地址足够大,保证不能被原先的程序冲掉。然后回到原先的程序A, 同样做FLASH的驱动,再在指定的地址读出上初始化的值

0

评论

回复

支持

反对

a707083746

回答时间:2019-8-24 19:26:45

a0a.1 32b0c

wenyangzeng 发表于 2019-8-24 15:53

FLASH保存代码和常量,全局、静态变量只能保存在RAM中

非0初始值还是保存在flash里的,不然哪里来的初值?

0

评论

回复

支持

反对

a707083746

回答时间:2019-8-24 19:29:17

a0a.1 32b0c

tanic 发表于 2019-8-24 16:31

您好,是保存在flash中,可以指定具体地址的,不过操作难度过高,不建议您这么做。可以试着用别的方案

...

哈哈,我放弃这个方案了。

原来是这些值出现在了我不想让它出现的地方,所以想指定位置。

现在用分散加载的方法间接解决了。

0

评论

回复

支持

反对

a707083746

回答时间:2019-8-24 19:30:04

a0a.1 32b0c

zhao.zhao 发表于 2019-8-24 18:18

如果要指定FLASH中的位置,你先要做个程序B,把FLASH的驱动写好,再在指定的地址写上初始化的值,还要地址 ...

搞不定,放弃这个方案了

0

评论

回复

支持

反对

wenyangzeng

回答时间:2019-8-25 07:23:57

a0a.1 32b0c

a707083746 发表于 2019-8-24 19:26

非0初始值还是保存在flash里的,不然哪里来的初值?

那个要赋值的“初值”是常量而非变量,是属于代码的一部分

0

评论

回复

支持

反对

废鱼

回答时间:2019-8-26 08:56:10

a0a.1 32b0c

FLASH里面有,但是具体的位置没有查到资料。可以通过查看hex文件,搜索能查到保存的位置。位置是否改变不确定。RAM掉电不保存,那么复位以后如何恢复到原来的定义的值呢?复位以后,会从ROM中读取这些变量的初始值。

0

评论

回复

支持

反对

a707083746

回答时间:2019-8-26 15:07:29

a0a.1 32b0c

安 发表于 2019-8-26 08:56

FLASH里面有,但是具体的位置没有查到资料。可以通过查看hex文件,搜索能查到保存的位置。位置是否改变不确 ...

hex文件太复杂了,头大。。。

0

评论

回复

支持

反对

废鱼

回答时间:2019-8-27 08:55:58

a0a.1 32b0c

a707083746 发表于 2019-8-26 15:07

hex文件太复杂了,头大。。。

你可以写特定的内容,比图uint8_t a[8]="string!!",然后再查一下这个字符串的内容,就可以找到地址了。我试过,但是不知道他是怎么用的。

评分

参与人数 1蝴蝶豆 +2

收起

理由

STMCU

+ 2

查看全部评分

0

评论

回复

支持

反对

·宠物飞升(内含干货)
PPPoE服务器(PPPoE Server)设置