导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]老天,救救我吧!!![littertiger]

 *第23506篇: [求助]老天,救救我吧!!!

  
楼 主:littertiger 2004年7月7日10:45
 [求助]老天,救救我吧!!!
发现中断死循环如何处理?

由于干扰因素,中断陷入了死循环。
假设更高优先级的中断发现了这种情况,应该如何处理呢?
为了不至于mcu管脚状态发生变化,所以不能用软reset。
怎么才能使程序放弃死循环的中断,而重新从0x00执行呢

  
2楼:Kuang-chingTsui 2004年7月7日14:58
 you'll use a Watchdog.
  
3楼:littertiger 2004年7月7日15:25
 硬件wdt会使管角状态发生变化,现在的问题就是使用软件wdt时遇到的。
  
4楼:baolqkun 2004年7月7日21:26
 硬件复位
硬件复位
  
5楼:WWONGKEN 2004年7月8日07:05
 我来答你。
必须加上硬件看门狗。
   (1)如果你担心在复位的时候将引脚的状态复位而引起误动作,
 硬件设计时请注意I/O复位的初始状态设计。
   (2)如果你不想因复位而将引脚的运行状态改变,你必须再加上  
 非易失性的存储器,将运行的状态保存下来,以便在复位的时候
 及时恢复它。
  
6楼:littertiger 2004年7月8日08:33
 不是太明白你的意思?
以下是引用WWONGKEN在2004-7-8 7:05:40的发言:
我来答你。必须加上硬件看门狗。
    (1)如果你担心在复位的时候将引脚的状态复位而引起误动作,
  硬件设计时请注意I/O复位的初始状态设计。 //什么意思?你是说在管脚上加电容滤波么?
    (2)如果你不想因复位而将引脚的运行状态改变,你必须再加上  
  非易失性的存储器,将运行的状态保存下来,以便在复位的时候
  及时恢复它。 //这个对我的程序影响不大,我的程序运行到一定的位置,状态会自动跑到正确的状态。

这个问题应该是处理MCU抗干扰的最基本的问题了, 请大家帮帮忙啊!

  
7楼:Kuang-chingTsui 2004年7月8日10:55
 楼上朋友说的对
使用非易失性存储器,喂狗前或后记录下需要保留的信息,reset后总是先读出已保留的信息,置位I/O口.
  
8楼:酒囊骑士 2004年7月8日15:22
 这个嘛~
你可以设置一个复位标志。如果一旦需要重新复位,该标志就置位。这样你就知道什么时候保存原先的管脚或其它系统状态了
  
9楼:littertiger 2004年7月9日08:21
 管脚状态我可以保存,但又有什么用呢?
当reset的时候,总有一段时间管脚状态是mcu的初始态。 
我的意思是必须在外部看来,MCU并没有reset。
如果加滤波电容,我就必须要认真考虑一下响应时间的问题了。
  
10楼:酒囊骑士 2004年7月9日09:02
 滤波电容?
有什么用?又不是重新上电,只要在程序一开始就恢复原状态就应该没问题。
  
11楼:littertiger 2004年7月9日14:32
 我不是在上个帖子说得很清楚么?reset后,未初始化前管脚状态为默认初始态。
  
12楼:guest 2004年7月8日17:00
 可不可以尝试在高级别的中断里修改堆栈的中
可不可以尝试在高级别的中断里修改堆栈的中断返回地址为0000H然后中断返回即可实现软复位
  
13楼:酒囊骑士 2004年7月8日17:06
 这个嘛~
显然不好,如果程序死掉,你怎能保证它能执行到这个修改堆栈的指令呢?
  
14楼:guest 2004年7月9日10:13
 楼主不是说有高级别的中断嘛?!
楼主不是说有高级别的中断嘛?!
  
15楼:酒囊骑士 2004年7月9日13:17
 这个嘛
程序都飞掉了,很有可能连中断都不响应了,这种事我碰上不是一次两次了。你没遇到过吗难道?
  
16楼:justrong 2004年7月9日13:35
 没有碰到过。我想除非程序修改了中断设置或
没有碰到过。我想除非程序修改了中断设置或堆栈溢出否则总是可以进入中断的。
  
17楼:littertiger 2004年7月9日14:34
 中断允许位也是可能被干扰得,可以采用相互依赖得处理方式来避免跑飞
  
18楼:justrong 2004年7月9日14:42
 除非程序特意置位,否则中断允许位全部是由
除非程序特意置位,否则中断允许位全部是由硬件置位的而且只有在响应中断后中断逻辑才可能将其复位。
  
19楼:justrong 2004年7月9日14:52
 啊,对不起,我想说的是中断请求位。至于您
啊,对不起,我想说的是中断请求位。至于您说的中断允许位被干扰可以在主程序中不断刷新即可。当然最终还是最好解决干扰的好。
  
20楼:littertiger 2004年7月10日10:11
 勉强有了解决办法
可以在高优先级的中断里面判断是否有挂起的中断,如果有则多执行相当数量的reti指令。
这样被挂起的中断就不会被继续执行。

只是判断中断是否被挂起,大家是否有有效的方法呢?

旁生的一个问题,如何把$的常量表达式分两次压入堆栈呢? 用asm。


>>>>>>对该主题发表你的看法

本主题贴数25,分页: [第1页] [第2页]


[上一篇主题]:模拟串口如何实现

[下一篇主题]:[讨论]