怎么过一段时间就复位

[复制链接]
4575|35
 楼主| jack.king 发表于 2007-6-27 22:27 | 显示全部楼层 |阅读模式
     近来发现。程序在反复执行一个动作40次的样子(与执行时间无关)
   就自动复位,(不是看门狗电路复位)
      这个问题应该怎么解决啊?
maychang 发表于 2007-6-28 11:16 | 显示全部楼层

不是中断里面才压栈和出栈,只要你的程序需要用,就有压栈和出栈
conwh 发表于 2007-6-27 22:58 | 显示全部楼层

与堆栈有没有关系

 楼主| jack.king 发表于 2007-6-28 00:12 | 显示全部楼层

继续请教

      开始程序的地址开始为50H
        堆栈设为43H
   程序如下: ORG 0000H
              AJMP   MAIN
         ORG 000BH
        AJMP   CLOCK
        ORG 0050H
MAIN:        MOV SP,#43H
    对了我想问下,设堆栈有什么原则吗?
HotPower 发表于 2007-6-28 00:40 | 显示全部楼层

汇编管理SP是你最大的义务和责任~~~否则,后果自负~~~

tyw 发表于 2007-6-28 06:54 | 显示全部楼层

回3L

程序嵌套勿宜过深,内存够用前提下,堆栈可尽量大些
内存紧张,则检查程序嵌套了几层(别漏了中断占用的堆栈),放点余量.再不够,只好缩减子程序调用深度.
不过堆栈溢出,仿真器会出错报告的.
你还是得检查程序,看看有什么情况会让程序回到头的.
硬件方面可检查电源,在执行动作时有什么变化,用示波器监示cpu供电及复位端
gyt 发表于 2007-6-28 07:13 | 显示全部楼层

调用层次不要太多

 楼主| jack.king 发表于 2007-6-28 08:14 | 显示全部楼层

继续请教

      
        谢谢你们让我加深了堆栈的理解!但是动作要一直做下去.它不得不一直调用啊!有什么方法能解决这个问题不?
5880527 发表于 2007-6-28 09:37 | 显示全部楼层

咋会有个43H?

怎么会把堆栈设在中间呀,我习惯把堆栈设置到80H以上
 楼主| jack.king 发表于 2007-6-28 09:39 | 显示全部楼层

re:咋会有个43H?

请问堆栈的设置是要考虑什么些东西啊?
      为什么不能设置到中间呢?
     
5880527 发表于 2007-6-28 09:51 | 显示全部楼层

堆栈后面需要足够的空间

80H后的单元不是很好用,但做堆栈还是可以的,所以设那里好了
古道热肠 发表于 2007-6-28 10:29 | 显示全部楼层

入栈与出栈要配对

    汇编指令写代码一定要注意入栈与出栈要一一对应,只入不出会撑死的。而且程序会乱来。
    C语言写代码最怕的是指针赿位,编译器检查不出来,运行起来出现些怪怪的现象。
conwh 发表于 2007-6-28 10:30 | 显示全部楼层

堆栈设计基本要求,就是要考虑一定的深度,一般都放在

变量的后面,再就是程序中的压栈和出栈的配套。
 楼主| jack.king 发表于 2007-6-28 11:08 | 显示全部楼层

只有中断里面才压栈和出栈吗?

 楼主| jack.king 发表于 2007-6-28 11:10 | 显示全部楼层

只有中断里面才压栈和出栈吗?

     其他的地方在什么情况下需要用到压栈和出栈呢?在无限制的调用和循环中不会要这样吧?
conwh 发表于 2007-6-28 11:10 | 显示全部楼层

不是,有时做数据交换或临时保存等时候也使用

gyt 发表于 2007-6-28 11:12 | 显示全部楼层

只要调用子程序

就会有进栈和出栈的操作
gyt 发表于 2007-6-28 11:13 | 显示全部楼层

8楼的办法挺好

我也会这样使用
 楼主| jack.king 发表于 2007-6-28 11:37 | 显示全部楼层

RE

  明白了
    那就是说明只要是子程序总都加上 PUSH ACC,PUSH PSW 和POP ACC,POP PSW.咯!
     这也不能解在反复执行调用次数,后来就自动复位
conwh 发表于 2007-6-28 11:40 | 显示全部楼层

注意一点就是堆栈管理是先进后出

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

本版积分规则

488

主题

2158

帖子

1

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