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

[复制链接]
6352|9
 楼主| geergeer 发表于 2007-8-14 14:07 | 显示全部楼层 |阅读模式
首先对浏览帖子的大侠表示感谢.小弟使用的芯片是16f877,用c语言进行编程,是一个lcd的驱动程序,源程序比较简单,但是函数嵌套最多的时候有四层,在调试的时候发现程序经常卡在一些很简单的语句上(非死循环),是不是嵌套层数出了问题,下面附上工程的.map文件,恳求大侠的指点~~<br />Machine&nbsp;type&nbsp;is&nbsp;16F877<br /><br />Call&nbsp;graph:<br /><br />*_main&nbsp;size&nbsp;0,0&nbsp;offset&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_init<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_delay&nbsp;size&nbsp;2,0&nbsp;offset&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_selectscreen&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_setstartline&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sendcommandtolcd&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_checkstate&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_setonoff&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sendcommandtolcd&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_checkstate&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_clearscreen&nbsp;size&nbsp;0,3&nbsp;offset&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_selectscreen&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_setpage&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sendcommandtolcd&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_checkstate&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_writebyte&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_checkstate&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;7<br />*&nbsp;&nbsp;&nbsp;&nbsp;_show1616&nbsp;size&nbsp;3,2&nbsp;offset&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_selectscreen&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;5<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_setpage&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;5<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sendcommandtolcd&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;6<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_checkstate&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;7<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_setcolumn&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;5<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sendcommandtolcd&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;6<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_checkstate&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_writebyte&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_checkstate&nbsp;size&nbsp;0,1&nbsp;offset&nbsp;7
soso 发表于 2007-8-14 16:26 | 显示全部楼层

为何不设计一个好的结构

  
 楼主| geergeer 发表于 2007-8-14 16:28 | 显示全部楼层

感谢eeproom的指点

麻烦eeproom大哥说的详细点
 楼主| geergeer 发表于 2007-8-18 11:28 | 显示全部楼层

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

  
yewuyi 发表于 2007-8-18 13:14 | 显示全部楼层

877好象可以8层的把?

最近问877问题的人特多,怎么大家都喜欢用877吗?<br /><br />俺没用过877,推荐使用88X或者91X
zhaoyu2005 发表于 2007-8-21 17:13 | 显示全部楼层

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

还用问?
dcp 发表于 2007-8-24 12:49 | 显示全部楼层

视型号而定

  
pppking 发表于 2007-8-28 15:27 | 显示全部楼层

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

嵌套层数过多就要求你为系统分配更大的栈,否则会Over<br />如果没有非常大的栈,你的嵌套程序要尽量少用局部变量<br />如果你的嵌套程序中使用了Malloc,建议你换一方法来设计(可以自已定义一个大大的数组,然后用自已的函数一点一点分配)<br />如果你说的是中断嵌套,还使用了操作系统,那么你为每个进程分配的栈都要足够大
 楼主| geergeer 发表于 2007-8-29 16:09 | 显示全部楼层

感谢诸位大侠的赐教

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

pppking没用过877吧

16系列的好像只有8层硬件堆栈吧,不能设置软件堆栈。<br />877用的比较多,主程序中用到5个,2个给中断备用,还有1个备用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

54

帖子

0

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