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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版