世界杯赔率_男乒世界杯决赛 - fjpftz.com

HOME> 世界杯冠军奖杯> [已解决]全局变量的初始值保存在flash的什么位置?

[已解决]全局变量的初始值保存在flash的什么位置?

2025-07-17 22:30:49

查看: 3947|回复: 12

[已解决]

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

[复制链接]

a707083746

a707083746

当前离线

在线时间158 小时

UID415068

ST金币871

蝴蝶豆7

注册时间2010-1-16

该用户从未签到

18

主题142

帖子7

蝴蝶豆

金牌会员

金牌会员, 积分 2154, 距离下一级还需 2846 积分

最后登录2024-3-5

发消息

电梯直达

楼主

发表于 2019-8-24 15:16:23

|

只看该作者

|倒序浏览

|阅读模式

大家好,全局变量、静态变量的初始值保存在flash的什么位置,是否可以指定呢?

我用的编译器是KEIL4

收藏0

淘帖0

支持0

反对0

回复

使用道具

举报

哀歌与世无争

哀歌与世无争

当前离线

在线时间60 小时

UID3402056

ST金币275

蝴蝶豆20

注册时间2017-7-12

该用户从未签到

3

主题77

帖子20

蝴蝶豆

高级会员

高级会员, 积分 788, 距离下一级还需 212 积分

最后登录2021-1-14

发消息

推荐

发表于 2019-8-24 16:12:54

|

只看该作者

可以用 __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

反对 0

使用道具

举报

wenyangzeng

wenyangzeng

当前离线

在线时间1885 小时

UID45393

ST金币4016

蝴蝶豆82

注册时间2008-5-4

该用户从未签到

74

主题3420

帖子82

蝴蝶豆

社区小助手

最后登录2024-7-7

发消息

板凳

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

|

只看该作者

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

评分

参与人数 1蝴蝶豆 +2

收起

理由

STMCU

+ 2

查看全部评分

回复

支持

反对

使用道具

举报

tanic

tanic

当前离线

在线时间229 小时

UID3231476

ST金币447

蝴蝶豆163

注册时间2015-12-15

该用户从未签到

44

主题647

帖子163

蝴蝶豆

金牌会员

金牌会员, 积分 3609, 距离下一级还需 1391 积分

最后登录2021-4-25

发消息

地板

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

|

只看该作者

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

回复

支持

反对

使用道具

举报

zhao.zhao

zhao.zhao

当前离线

在线时间357 小时

UID3258526

ST金币2804

蝴蝶豆176

注册时间2016-4-6

该用户从未签到

3

主题971

帖子176

蝴蝶豆

论坛元老

最后登录2021-4-1

发消息

5#

发表于 2019-8-24 17:52:09

|

只看该作者

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

评分

参与人数 1蝴蝶豆 +2

收起

理由

STMCU

+ 2

查看全部评分

回复

支持

反对

使用道具

举报

zhao.zhao

zhao.zhao

当前离线

在线时间357 小时

UID3258526

ST金币2804

蝴蝶豆176

注册时间2016-4-6

该用户从未签到

3

主题971

帖子176

蝴蝶豆

论坛元老

最后登录2021-4-1

发消息

6#

发表于 2019-8-24 18:18:32

|

只看该作者

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

回复

支持

反对

使用道具

举报

a707083746

a707083746

当前离线

在线时间158 小时

UID415068

ST金币871

蝴蝶豆7

注册时间2010-1-16

该用户从未签到

18

主题142

帖子7

蝴蝶豆

金牌会员

金牌会员, 积分 2154, 距离下一级还需 2846 积分

最后登录2024-3-5

发消息

7#

楼主|

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

|

只看该作者

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

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

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

回复

支持

反对

使用道具

举报

a707083746

a707083746

当前离线

在线时间158 小时

UID415068

ST金币871

蝴蝶豆7

注册时间2010-1-16

该用户从未签到

18

主题142

帖子7

蝴蝶豆

金牌会员

金牌会员, 积分 2154, 距离下一级还需 2846 积分

最后登录2024-3-5

发消息

8#

楼主|

发表于 2019-8-24 19:29:17

|

只看该作者

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

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

...

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

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

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

回复

支持

反对

使用道具

举报

a707083746

a707083746

当前离线

在线时间158 小时

UID415068

ST金币871

蝴蝶豆7

注册时间2010-1-16

该用户从未签到

18

主题142

帖子7

蝴蝶豆

金牌会员

金牌会员, 积分 2154, 距离下一级还需 2846 积分

最后登录2024-3-5

发消息

9#

楼主|

发表于 2019-8-24 19:30:04

|

只看该作者

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

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

搞不定,放弃这个方案了

回复

支持

反对

使用道具

举报

wenyangzeng

wenyangzeng

当前离线

在线时间1885 小时

UID45393

ST金币4016

蝴蝶豆82

注册时间2008-5-4

该用户从未签到

74

主题3420

帖子82

蝴蝶豆

社区小助手

最后登录2024-7-7

发消息

10#

发表于 2019-8-25 07:23:57

|

只看该作者

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

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

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

回复

支持

反对

使用道具

举报

最新发表
友情链接