独闷闷网

 找回密码
 立即注册
搜索
查看: 6126|回复: 9
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
发表于 2014-9-19 00:07:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
如题!keil编译程序的时候,调用子函数越多,RAM占用越少!麻烦大家帮忙看看!源码有点长,而且可读性比较差,所以就不发出来了,几个子程序唯一的关系就是共用3个全局变量,都是用作for循环的,并没有影响,结果如下图:

乐于分享,勇于质疑!
沙发
发表于 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里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全 ...

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

鸿哥,是不是这个问题太奇葩了啊,我决定问问朱老师
乐于分享,勇于质疑!
6#
发表于 2014-9-19 14:49:29 | 只看该作者
本帖最后由 karo 于 2014-9-19 14:51 编辑

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

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


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

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

那我就不知道是什么原因了。
乐于分享,勇于质疑!
10#
 楼主| 发表于 2014-9-20 20:52:37 | 只看该作者
jianhong_wu 发表于 2014-9-20 17:26
那我就不知道是什么原因了。

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

本版积分规则

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

GMT+8, 2024-5-18 02:24 , Processed in 0.207322 second(s), 20 queries .

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