OpenEdv-开源电子网

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

MDK中全局变量在RW-Data和ZI-Data的分配

[复制链接]

24

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-3-6
在线时间
23 小时
发表于 2019-3-25 15:04:04 | 显示全部楼层 |阅读模式
10金钱
大家好:
MDK编译后生成的RW-Data是指初始化的全局变量,比如定义了一个全局变量数组:

int array[1000];            //没有任何初始化数据
void main()
{
}

如何让这个数组不被分配到RW-Data区,而是分配到 ZI-Data区,这样在生成bin文件时会小得多?

谢谢!


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-3-25 15:10:02 | 显示全部楼层
回复

使用道具 举报

24

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-3-6
在线时间
23 小时
 楼主| 发表于 2019-3-25 15:28:35 | 显示全部楼层

我想要的结果是:
array[] 不被分配到RW-Data区,以便生成的bin文件不包含array的初始化数据,而是将其做为ZI-Data,直接初始化成0,这样bin文件比较小些。

如果:
int array[1000];
或者
int array[1000]={0};

array[]都会被分配到RW-Data中。增加了在FLASH的占用空间。

多谢!!!
回复

使用道具 举报

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2019-1-29
在线时间
67 小时
发表于 2019-3-25 21:40:40 | 显示全部楼层
建议实测一下生成出来的bin文件大小再下定论.

我这边RW根本不影响bin文件大小

bin文件大小 = Code + RO


回复

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2019-1-18
在线时间
18 小时
发表于 2019-12-27 16:53:06 | 显示全部楼层
楼主, 你好 .请问你这个问题有找到答案吗/
我最近在学习启动文件时,也发现KEIL_MDK把大部分的全局变量都放在了RW_Data中了,只有像STACK段(添加了NOINTAAL关键字)的才是属于ZI_DATA,  不知道哪里有相关的设定,能够让变量在ZI_DATA中分配
回复

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2019-1-18
在线时间
18 小时
发表于 2019-12-27 16:57:48 | 显示全部楼层
楼主, 我刚回复完你, 恰巧在网上搜索到了一个答案;

"它产生了8个字节的RW段,可以分析产生的map文件查看main汇编代码和RW段,发现的确将aaa和bbb分配在了RW段, 想想没道理,尝试发现初始化了的全局变量也是放在RW段。

最后发现罪魁祸首是KEIL的armcc的“--bss_threshold=num”这个编译选项,查看手册介绍如下:"

参考链接: https://www.cnblogs.com/ppym/p/3622158.html
回复

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2019-1-18
在线时间
18 小时
发表于 2019-12-27 16:59:58 | 显示全部楼层
楼主, 我刚在网上找到了一个答案, 供参考:
"
想想没道理,尝试发现初始化了的全局变量也是放在RW段。

最后发现罪魁祸首是KEIL的armcc的“--bss_threshold=num”这个编译选项,查看手册介绍如下:
"
参考链接:https://www.cnblogs.com/ppym/p/3622158.html
回复

使用道具 举报

10

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2016-8-15
在线时间
413 小时
发表于 2019-12-27 17:01:53 | 显示全部楼层
按照你那样写应该是属于未初始化的,理论上是属于ZI区域的。
我的简书:https://www.jianshu.com/u/3e9efbf4a8c2
回复

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2019-1-18
在线时间
18 小时
发表于 2019-12-27 17:08:54 | 显示全部楼层
设置如下.png
楼主, 刚搜索到需要添加 '--bss_threshold=0 "这个编译控制选项即可恢复正常, 建立搜索这个关键字找个原因;
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 18:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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