你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

keil 编译STM32F103的程序后RW-DATA 80K远大于片子的RAM(20K),程.....

[复制链接]
tszhao 提问时间:2015-8-6 20:01 /
问题 1  编译环境 keil v4.73  硬件 STM32F103CB  FLASH:128K ,RAM:20K
程序编译后RW-data 大小为80K还多,程序还可运行,是keil优化的结果吗?
问题2 当添加代码时code 增大,RW-data 减少。当减少代码时code减小,RW-data增大。
这里的代码仅仅是函数没有全局变量,即使我在main()函数的开始定义一个char型的const变量,code增加4个字节,而RW-data减少4个字节。
收藏 1 评论8 发布时间:2015-8-6 20:01

举报

8个回答
moyanming2013 回答时间:2015-8-6 20:14:19
1.有些局部的变量并不是叠加使用RAM的。比如2个函数里面都有一个局部的1KB的数组,实际占用RAM不会是2KB。
2.const型变量肯定会增加code,因为其存放在flash中,但不会增加ram,因为其是常量。不加const则相反。
tszhao 回答时间:2015-8-6 20:24:17
moyanming2013 发表于 2015-8-6 20:14
1.有些局部的变量并不是叠加使用RAM的。比如2个函数里面都有一个局部的1KB的数组,实际占用RAM不会是2KB。
...

第一个问题并没有回答,第二个问题 中加入const后code增加正常,关键是RW-DATA减少了,这不是很奇怪吗
moyanming2013 回答时间:2015-8-6 21:05:56
tszhao 发表于 2015-8-6 20:24
第一个问题并没有回答,第二个问题 中加入const后code增加正常,关键是RW-DATA减少了,这不是很奇怪吗 ...

1.我估计KEIL不会把两个函数中局部的1KB算作1个而是算作2个。这就变成了2KB,你可以试下。
2.flash中的const值在使用时直接从Flash获取不走ram,加了const比不加,当然RW-DATA会减少。
tszhao 回答时间:2015-8-7 09:53:01
本帖最后由 tszhao 于 2015-8-7 09:55 编辑
moyanming2013 发表于 2015-8-6 21:05
1.我估计KEIL不会把两个函数中局部的1KB算作1个而是算作2个。这就变成了2KB,你可以试下。
2.flash中的co ...

1 是把两个函数中的局部1KB算作两个,
2 我可能没说清楚,加入的const变量以前没有,不是说以前定义了个变量现在加上了const,而是以前就没有这个变量,我在别的keil STM32的程序中新加入一个const变量时只是code增加,RW-data不变,
刚才我在实验函数内部局部数组时如 uchar temp【10】,code增加,然而RW-data减少,而且是code增加多少RW-data就减少多少,他们的变化正好是相反的。
3还有个问题请教一下:
C:\Documents and Settings\Administrator\桌面\1.bmp
C:\Documents and Settings\Administrator\桌面\2.bmp
第一次提交图片,不知道能不能看到。关键是红色圆圈标注的,我在FLASH中用绝对地址定义的一个两个字节的数组,此数组类型是不是const编译后RO-data变化太大了吧???
Tension 回答时间:2015-8-7 10:33:52
哦,我用的时候,多1个字节编译器都报错了。
moyanming2013 回答时间:2015-8-7 11:43:35
tszhao 发表于 2015-8-7 09:53
1 是把两个函数中的局部1KB算作两个,
2 我可能没说清楚,加入的const变量以前没有,不是说以前定义了个变 ...

1.你实测算作2个,那么编译器给的结论只是个参考(具体要看bin文件的构成、大小等)。
2.加入一个新的const变量,该变量存放在flash中,即代码段(code),当然是code增加,该const变量不会复制到内存,故不会占用ram,自然RW-DATA段不会增加。
3.没图。你要点下图片就能添加进回复里。

给你点建议:
a.提问题要非常清楚(别让回答你问题的字数比你问题的字数还多!),你都说不清楚还有谁比你清楚?
b.一定要仔细,比如如何添加图片,你如果加入图片后,仔细看就会知道如何添加图片(点下图片即可添加),尽管这是个简单的事情,但如果都自己办不好,那还是说明不仔细。
c.你多少去看下编译原理,可以先粗略的看下,或者看看汇编的书。力求能逐渐的自己解决问题。
tszhao 回答时间:2015-8-7 15:00:57
moyanming2013 发表于 2015-8-7 11:43
1.你实测算作2个,那么编译器给的结论只是个参考(具体要看bin文件的构成、大小等)。
2.加入一个新的con ...

谢谢您的耐心回答,虽然问题没有解决还是谢谢。
图片中的问题是第三个问题,就是在FLASH的绝对地址中定义的两个半字加上const后RO-data增加了78524个字节。然而RW-data减少了78524个字节。

没有加const时的RO-data大小

没有加const时的RO-data大小

加上之后的RO-data大小

加上之后的RO-data大小
moyanming2013 回答时间:2015-8-7 20:12:41
tszhao 发表于 2015-8-7 15:00
谢谢您的耐心回答,虽然问题没有解决还是谢谢。
图片中的问题是第三个问题,就是在FLASH的绝对地址中定义 ...

我建议你在编译出的list里面看看这2个变量的存储类型(code?RW-DATA?etc)。
对于指定了绝对地址,又不加const,感觉即占用flash又占用ram。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版