讨论:单片机程序中函数嵌套能套多少层?

[复制链接]
8746|28
 楼主| alphal 发表于 2007-11-22 09:44 | 显示全部楼层

哦,这两个是调用了,我再找个没调用的出来。


但是那是不是在这个程序分支(main函数的一个函数)执行完之后,该分支的自动变量都会释放,然后下一个分支的ram分配从头开始(不是0),我再去观察一下。
123987 发表于 2007-11-22 10:31 | 显示全部楼层

感觉楼主太死板教条了.学院派的吧?

引用alphal 8楼发表于 2007-11-21 14:27 侃单片机    

“我的程序处于模块化、结构化方面的考虑,分成了硬件层、系统层和应用层,所以嵌套的比较深,目前最深的地方已经套到了6层,估计整个程序下来套它个9层也有可能。”

大哥干吗分得这么理论呢?结构化、模块化编程是好。但是也没有必要搞的如此复杂啊。而且理论上对于51系列单片机堆栈的问题是很现实和迫切的。毕竟片内RAM是很有限的(事实上所有单片机的堆栈都是有限的。最多也就是有些单片机能够用片外的RAM来当堆栈用,只是不知道51能不能这样做。如能那是在编译器里设置吗?盼高手作答。小弟在这里不胜感激!)。
 楼主| alphal 发表于 2007-11-22 10:41 | 显示全部楼层

汗一个先。。。

不否认单片机资源问题,但是我能做的只是在此限度内实现结构化、模块化。
ayb_ice 发表于 2007-11-22 10:53 | 显示全部楼层

一般的应用10层8层的不会有任何问题

computer00 发表于 2007-11-22 11:36 | 显示全部楼层

自己去实践吧,猜这么多无用。

 楼主| alphal 发表于 2007-11-22 11:53 | 显示全部楼层

我现在是深处不胜寒啊。。。

现在程序就有点怪怪的问题,还好可以规避一下,但一有风吹草动我就怀疑堆栈的问题,虽然我也可以测出堆栈深度,但没个明确说法我还是不放心。
linqing171 发表于 2007-11-22 13:27 | 显示全部楼层

lst文件里面有。

编译完的list文件*.lst里面有。
调用函数的参数有的也是堆栈传的,所以啊,尽量的不要太多。

还有就是可以让它跑一遍,包括最深的地方都跑一下,看看到底用了多少。

此外,也可以用 内联函数 inline 可以把函数当作 宏那样,每次用都复制一遍代码,省堆栈空间啊。像i2c的开始,发送一个字节什么的。结构上看还是一个个的函数比较清晰。
ayb_ice 发表于 2007-11-22 13:31 | 显示全部楼层

编译的时候看一下变量用了多少就大致知道了

huangqi412 发表于 2007-11-22 15:23 | 显示全部楼层

没有想过,反正一般情况下是够用了

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部