独闷闷网

 找回密码
 立即注册
搜索
查看: 6077|回复: 9
收起左侧

[求助] 求大神解释!keil编译,调用子函数越多,RAM占用越少

[复制链接]
发表于 2014-9-19 00:07:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如题!keil编译程序的时候,调用子函数越多,RAM占用越少!麻烦大家帮忙看看!源码有点长,而且可读性比较差,所以就不发出来了,几个子程序唯一的关系就是共用3个全局变量,都是用作for循环的,并没有影响,结果如下图:
QQ截图20140918235541.png QQ截图20140918235643.png QQ截图20140918235719.png
乐于分享,勇于质疑!
发表于 2014-9-19 09:39:21 | 显示全部楼层
这个实验现象让我大吃一惊。我印象中,RAM主要跟我们定义的变量有关系,变量越多RAM占用的越多,但是面对你这个实验现象我也无语了,盼望有高手能解答一下。
乐于分享,勇于质疑!
发表于 2014-9-19 11:30:27 | 显示全部楼层
在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。
乐于分享,勇于质疑!
 楼主| 发表于 2014-9-19 11:58:42 | 显示全部楼层
本帖最后由 重庆-风雪 于 2014-9-19 12:16 编辑
yangjie13 发表于 2014-9-19 11:30
在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全 ...

感觉有点说不过,因为中断函数有固定的入口,编译器应该不会犯这种错!而且如果有子函数没有调用的话,编译器会提示未引用的函数原型(好像是这么说的),这两种情况都说明编译器不会把子函数当成中断函数,麻烦帮忙解释一下!
乐于分享,勇于质疑!
 楼主| 发表于 2014-9-19 14:43:16 | 显示全部楼层
jianhong_wu 发表于 2014-9-19 09:39
这个实验现象让我大吃一惊。我印象中,RAM主要跟我们定义的变量有关系,变量越多RAM占用的越多,但是面对你 ...

鸿哥,是不是这个问题太奇葩了啊,我决定问问朱老师
乐于分享,勇于质疑!
发表于 2014-9-19 14:49:29 | 显示全部楼层
本帖最后由 karo 于 2014-9-19 14:51 编辑

你们有没有发现,编译错误越了,data就与响应变化?,是不是编译时,错误的地方,没有编译进去,就少占用了 data???,请教高手解答。。
---土豆--浙江
乐于分享,勇于质疑!
发表于 2014-9-19 15:01:52 | 显示全部楼层
karo 发表于 2014-9-19 14:49
你们有没有发现,编译错误越了,data就与响应变化?,是不是编译时,错误的地方,没有编译进去,就少占用了 ...

呵呵,我也发现了。它的第一个编译都没通过,所以整个问题都是建立在错误的假设上的,这样对比没有任何意义,因为编译器发现出错了就不会继续往下走。
错误.jpg

乐于分享,勇于质疑!
 楼主| 发表于 2014-9-20 15:59:06 | 显示全部楼层
jianhong_wu 发表于 2014-9-19 15:01
呵呵,我也发现了。它的第一个编译都没通过,所以整个问题都是建立在错误的假设上的,这样对比没有任何意 ...

不是这样的鸿哥,你看看另外两张,并没有编译错误,还是这种情况,那张是因为他占用RAM超过了128所以编译错误,跟这个问题没关系
乐于分享,勇于质疑!
发表于 2014-9-20 17:26:28 | 显示全部楼层
重庆-风雪 发表于 2014-9-20 15:59
不是这样的鸿哥,你看看另外两张,并没有编译错误,还是这种情况,那张是因为他占用RAM超过了128所以编译 ...

那我就不知道是什么原因了。
乐于分享,勇于质疑!
 楼主| 发表于 2014-9-20 20:52:37 | 显示全部楼层
jianhong_wu 发表于 2014-9-20 17:26
那我就不知道是什么原因了。

嗯嗯,还是要谢谢鸿哥!
乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-3-29 10:09 , Processed in 0.221806 second(s), 21 queries .

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