导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→急!哪位高手指点16F73使用时如何有效防止中断发生造成堆栈

* 55137: 急!哪位高手指点16F73使用时如何有效防止中断发生造成堆栈溢出问题

   ST6168 
ST6168发表的帖子 

 急!哪位高手指点16F73使用时如何有效防止中断发生造成堆栈溢出问题
急!哪位高手指点16F73使用时如何有效防止中断发生造成堆栈溢出问题

写一个16F73做的测试仪器产品程序
用了9个中断:
; INT外部秒脉冲中断
; TMR0外部脉冲计数器溢出中断
; PORTB(D7---D4)电平变化
; A/D转换完成;电压测量
; TMR1内部定时器溢出即500MS定时/显示/Buz)
; TMR2匹配
; SCI异步发送
; SCI异步接收

初始化完成后,以上9个中断全部开放(使能)
主程序在循环时,经常由于在某个CALL  调用子程序时发生中断,造成堆栈溢出
而且溢出的堆栈内容有时怪怪的
如:
00AD
00CE
012A      ;中断发生
0079      ;中断发生    0079 ????前一中断处理刚RETFIE出又进其它中断了?
0079      ;中断发生    0079 ????前一中断处理刚RETFIE出又进其它中断了?
0079      ;中断发生    怎么压栈地址还是0079 ????前一中断处理刚RETFIE出又进中断了?
0079      ;中断发生    是否是CALL 瞬间发生 ???
0079      ;压栈地址对应于 CALL   SendLCDdata  下句PC地址 ----  正常主程序CALL

我的程序涉及到以下事情:

6种开关量跳变检测、计数、处理;模拟量电压A/D;
定时显示LCD(LCDDriver=HT1621);报讯(BUZ接在HT1621上);
MCU与IIC(24LC08 / 硬件时钟IC 4553)读写通讯;
IR/485两种USART通讯(异步串口)
外部元件断口控制(磁保持继电器/微电机)

所以,主程序在循环时,以上9个中断全部开放(使能)
但调试时经常堆栈溢出(仿真器:贝能MICRICE )

分开(仅仅开放某1个/2个中断)调试一般正常

请问高手大虾:
(1)主程序在循环时,以上9个中断全部开放不行吗?
(我觉得应该是可以的,但老乡不同莫名其妙地堆栈溢出)

(2)另外在LCD显示送数/SCI串口通讯/查表 等情形是否一定要关闭某个中断或全部中断?
请高手传授经验,多谢!

(3)如果中断源比较多,而且中断比较频繁(如1ms一次中断),中断处理程序中是否不能语句太多?
否则外围主程序可能老得不到执行。??

(4)考虑中断发生,CALL子程序中到底可以嵌套几级CALL ?   2 / 3 / 5 级 ?   
中断处理程序中是否可以再 CALL...[CALL...(CALL...)]  ???

另外用了几年PIC单片的8级堆栈总觉得不好用,太少了。
用HYNIX  HMS87Cxxxx 写了几个产品程序,觉得很舒服,几乎可以随便地CALL (CALL...)
多层嵌套,只要留的堆栈寄存器多一些就可以了。因为我一直用汇编写,所以能多用些CALL嵌套,
程序思路框架比较清晰些。
PIC单片机恰恰不能多用嵌套的CALL,怎么办?


发表时间:2004年5月22日16:35:43

  
回复该帖

本主题共有 4 帖,分页:>>>>>该主题的所有内容[4]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  55149.[详细]堆栈溢出的原因找到了,关于CALL可以嵌套几级/主程序的中断是否全部开放的问题请高手谈谈经验,先谢..
摘要:堆栈溢出的问题找到了,几个关于CALL到底可以嵌套几级/主程序的中断是否全部开放的问题请高手谈谈经验,先谢了!  通过跟踪窗口慢慢查找,发现在16F73程序中     &......(1413字)
- [ST6168][5188次] 2004年5月22日

  55152.[详细]不好意思,我是一个刚入门的,本来也想来学点东西,我想问的你帮我问了,谢谢。希望有哪位大虾大发慈悲,..
摘要:不好意思,我是一个刚入门的,本来也想来学点东西,我想问的你帮我问了,谢谢。希望有哪位大虾大发慈悲,发表点高论!因为我也很想知道答案。因为我也刚完成一个项目,在中断服务程序,一用CALL就发生堆栈益出!·:(所以后来只以跳来跳去的,过关了,不......(254字)
- [guest][938次] 2004年5月22日

  55180.[详细]我的程序已经OK在此提醒用picrice 仿真的同行,要善于使用 *.lst&..
摘要:我的程序已经OK   在此提醒用picrice 仿真的同行, 要善于使用 *.lst 文件和  *.tac(跟踪窗口文件) 调试有问题要静下......(442字)
- [st6168][928次] 2004年5月23日

[上一篇帖子]:可以采用双电源模块的方式。
[下一篇帖子]:求救protel建库问题...............大哥大姐们,我不知道在protel如何建库?