OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4341|回复: 10

原子stm32f103zet6的zi-data数据逆天了,存储在了ro-data区了,怎么解释?

[复制链接]

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-3-4
在线时间
36 小时
发表于 2018-9-1 23:49:28 | 显示全部楼层 |阅读模式

定义的两个初始化为零的静态变量,按理说应该属于zi-data数据

定义的两个初始化为零的静态变量,按理说应该属于zi-data数据

fac_us与fac_ms存储的地址在0x20000014 与0x20000016中

fac_us与fac_ms存储的地址在0x20000014 与0x20000016中
以上为相关截图
根据fac_us 与 fac_ms的定义 ,它们应该属于 zi-data,其在运行域存储地址应该在rw-data之后。
由跑马灯工程的map图片看rw-data大小为52字节,存储范围为0x20000000--0x20000033,因此fac_us 与 fac_ms 作为zi-data运行域地址应该在0x20000033之后,
而实际却在0x20000014,0x20000016地址处,这是为什么了呢?
难道fac_us 与 fac_ms是rw-data?
修改fac_us 与 fac_ms的定义为  
u8  fac_us;//us延时倍乘数
u16 fac_ms;/ms延时倍乘数

按照网上说法 未初始化的全局变量属于zi-data,但是fac_us 与 fac_ms 的地址还是在0x20000014,0x20000016处。为什么?
难道关于什么是rw-data,zi-data网上的说法都是错误的?

程序rw-data占据大小为52字节

程序rw-data占据大小为52字节
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-2 00:55:32 | 显示全部楼层

回帖奖励 +88 金钱

本帖最后由 edmund1234 于 2018-9-2 00:58 编辑

你把初始值设为非零就会如你所愿的了, 呵呵
另外它现在也不是在RO区, 它是在RW区

回复 支持 1 反对 0

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-3-4
在线时间
36 小时
 楼主| 发表于 2018-9-1 23:51:55 | 显示全部楼层
有人知道问题在哪里吗?
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-3-4
在线时间
36 小时
 楼主| 发表于 2018-9-1 23:52:19 | 显示全部楼层
在线等
回复 支持 反对

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1669
金钱
1669
注册时间
2018-1-29
在线时间
160 小时
发表于 2018-9-2 07:12:10 | 显示全部楼层
RW-data一般都是全局变量,
但是局部变量声明为static时, 会在RW-data区域分配空间.
回复 支持 反对

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3722
金钱
3722
注册时间
2011-5-23
在线时间
2013 小时
发表于 2018-9-2 10:08:00 | 显示全部楼层
你写的等于0也叫末初始化?
RT-Thread RTOS 音频,WIFI,蓝牙
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-3-4
在线时间
36 小时
 楼主| 发表于 2018-9-2 13:25:51 | 显示全部楼层
aozima 发表于 2018-9-2 10:08
你写的等于0也叫末初始化?

修改fac_us 与 fac_ms的定义为  
u8  fac_us;//us延时倍乘数
u16 fac_ms;/ms延时倍乘数

其结果是一样的,帖子里已经说明了
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-3-4
在线时间
36 小时
 楼主| 发表于 2018-9-2 13:28:57 | 显示全部楼层
backup2k 发表于 2018-9-2 07:12
RW-data一般都是全局变量,
但是局部变量声明为static时, 会在RW-data区域分配空间.

你说的很对,但是实验结果不是这样的
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-3-4
在线时间
36 小时
 楼主| 发表于 2018-9-2 20:13:34 | 显示全部楼层
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-3-4
在线时间
36 小时
 楼主| 发表于 2018-9-5 19:27:56 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2018-9-5 23:42:36 | 显示全部楼层
哪个人给你误导说会放在zi-data!按C语言标准,全局变量要么放.bss段(未被初始化),要么放.data段(已被初始化)。
你这两变量放在.data段完全合理合法呀!有什么大惊小怪的?
估计你道听途说的zi-data是某个链接脚本里对某段区域的一个别名而已!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 15:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表