发新帖我要提问
12
返回列表
打印

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

[复制链接]
楼主: alphal
手机看帖
扫描二维码
随时随地手机跟帖
21
alphal|  楼主 | 2007-11-22 09:44 | 只看该作者 回帖奖励 |倒序浏览

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


但是那是不是在这个程序分支(main函数的一个函数)执行完之后,该分支的自动变量都会释放,然后下一个分支的ram分配从头开始(不是0),我再去观察一下。

使用特权

评论回复
22
123987| | 2007-11-22 10:31 | 只看该作者

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

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

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

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

使用特权

评论回复
23
alphal|  楼主 | 2007-11-22 10:41 | 只看该作者

汗一个先。。。

不否认单片机资源问题,但是我能做的只是在此限度内实现结构化、模块化。

使用特权

评论回复
24
ayb_ice| | 2007-11-22 10:53 | 只看该作者

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

使用特权

评论回复
25
computer00| | 2007-11-22 11:36 | 只看该作者

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

使用特权

评论回复
26
alphal|  楼主 | 2007-11-22 11:53 | 只看该作者

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

现在程序就有点怪怪的问题,还好可以规避一下,但一有风吹草动我就怀疑堆栈的问题,虽然我也可以测出堆栈深度,但没个明确说法我还是不放心。

使用特权

评论回复
27
linqing171| | 2007-11-22 13:27 | 只看该作者

lst文件里面有。

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

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

此外,也可以用 内联函数 inline 可以把函数当作 宏那样,每次用都复制一遍代码,省堆栈空间啊。像i2c的开始,发送一个字节什么的。结构上看还是一个个的函数比较清晰。

使用特权

评论回复
28
ayb_ice| | 2007-11-22 13:31 | 只看该作者

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

使用特权

评论回复
29
huangqi412| | 2007-11-22 15:23 | 只看该作者

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则