独闷闷网

标题: 求大神解释!keil编译,调用子函数越多,RAM占用越少 [打印本页]

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


作者: jianhong_wu    时间: 2014-9-19 09:39
这个实验现象让我大吃一惊。我印象中,RAM主要跟我们定义的变量有关系,变量越多RAM占用的越多,但是面对你这个实验现象我也无语了,盼望有高手能解答一下。
作者: yangjie13    时间: 2014-9-19 11:30
在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。
作者: 重庆-风雪    时间: 2014-9-19 11:58
本帖最后由 重庆-风雪 于 2014-9-19 12:16 编辑
yangjie13 发表于 2014-9-19 11:30
在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全 ...

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

鸿哥,是不是这个问题太奇葩了啊,我决定问问朱老师
作者: karo    时间: 2014-9-19 14:49
本帖最后由 karo 于 2014-9-19 14:51 编辑

你们有没有发现,编译错误越了,data就与响应变化?,是不是编译时,错误的地方,没有编译进去,就少占用了 data???,请教高手解答。。
---土豆--浙江
作者: jianhong_wu    时间: 2014-9-19 15:01
karo 发表于 2014-9-19 14:49
你们有没有发现,编译错误越了,data就与响应变化?,是不是编译时,错误的地方,没有编译进去,就少占用了 ...

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



作者: 重庆-风雪    时间: 2014-9-20 15:59
jianhong_wu 发表于 2014-9-19 15:01
呵呵,我也发现了。它的第一个编译都没通过,所以整个问题都是建立在错误的假设上的,这样对比没有任何意 ...

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

那我就不知道是什么原因了。
作者: 重庆-风雪    时间: 2014-9-20 20:52
jianhong_wu 发表于 2014-9-20 17:26
那我就不知道是什么原因了。

嗯嗯,还是要谢谢鸿哥!




欢迎光临 独闷闷网 (http://dumenmen.com/) Powered by Discuz! X3.2