打印

pic用c语言编程能够嵌套几层?(附.map文件)

[复制链接]
5184|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
geergeer|  楼主 | 2007-8-14 14:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先对浏览帖子的大侠表示感谢.小弟使用的芯片是16f877,用c语言进行编程,是一个lcd的驱动程序,源程序比较简单,但是函数嵌套最多的时候有四层,在调试的时候发现程序经常卡在一些很简单的语句上(非死循环),是不是嵌套层数出了问题,下面附上工程的.map文件,恳求大侠的指点~~
Machine type is 16F877

Call graph:

*_main size 0,0 offset 0
     _init
     _delay size 2,0 offset 0
     _selectscreen size 0,1 offset 5
     _setstartline size 0,1 offset 0
         _sendcommandtolcd size 0,1 offset 6
             _checkstate size 0,1 offset 7
     _setonoff size 0,1 offset 0
         _sendcommandtolcd size 0,1 offset 6
             _checkstate size 0,1 offset 7
     _clearscreen size 0,3 offset 0
         _selectscreen size 0,1 offset 5
         _setpage size 0,1 offset 5
             _sendcommandtolcd size 0,1 offset 6
                 _checkstate size 0,1 offset 7
         _writebyte size 0,1 offset 5
             _checkstate size 0,1 offset 7
*    _show1616 size 3,2 offset 0
         _selectscreen size 0,1 offset 5
*        _setpage size 0,1 offset 5
*            _sendcommandtolcd size 0,1 offset 6
*                _checkstate size 0,1 offset 7
*        _setcolumn size 0,1 offset 5
*            _sendcommandtolcd size 0,1 offset 6
*                _checkstate size 0,1 offset 7
         _writebyte size 0,1 offset 5
             _checkstate size 0,1 offset 7
沙发
soso| | 2007-8-14 16:26 | 只看该作者

为何不设计一个好的结构

使用特权

评论回复
板凳
geergeer|  楼主 | 2007-8-14 16:28 | 只看该作者

感谢eeproom的指点

麻烦eeproom大哥说的详细点

使用特权

评论回复
地板
geergeer|  楼主 | 2007-8-18 11:28 | 只看该作者

是程序中的延时没设好,嵌套4层没问题

使用特权

评论回复
5
yewuyi| | 2007-8-18 13:14 | 只看该作者

877好象可以8层的把?

最近问877问题的人特多,怎么大家都喜欢用877吗?

俺没用过877,推荐使用88X或者91X

使用特权

评论回复
6
zhaoyu2005| | 2007-8-21 17:13 | 只看该作者

能够嵌套几层看他有几级堆栈就知道了

还用问?

使用特权

评论回复
7
dcp| | 2007-8-24 12:49 | 只看该作者

视型号而定

使用特权

评论回复
8
pppking| | 2007-8-28 15:27 | 只看该作者

C语言的嵌套与CPU嵌套层数无关

嵌套层数过多就要求你为系统分配更大的栈,否则会Over
如果没有非常大的栈,你的嵌套程序要尽量少用局部变量
如果你的嵌套程序中使用了Malloc,建议你换一方法来设计(可以自已定义一个大大的数组,然后用自已的函数一点一点分配)
如果你说的是中断嵌套,还使用了操作系统,那么你为每个进程分配的栈都要足够大

使用特权

评论回复
9
geergeer|  楼主 | 2007-8-29 16:09 | 只看该作者

感谢诸位大侠的赐教

877有8层硬件堆栈,看张明峰的书,好象是说函数嵌套不能超过7层,因为其中有一层留给了中断。用c语言编程的时候,有些函数调用是编译代码时系统自动加入的库函数,这种情况从c语言源程序上无法准确地看出嵌套层数,所以要了解嵌套情况,可以打开.map文件,一目了然~~~

使用特权

评论回复
10
tdh03z| | 2007-8-29 19:16 | 只看该作者

pppking没用过877吧

16系列的好像只有8层硬件堆栈吧,不能设置软件堆栈。
877用的比较多,主程序中用到5个,2个给中断备用,还有1个备用

使用特权

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

本版积分规则

13

主题

54

帖子

0

粉丝