jx_cxq 发表于 2010-8-12 09:21:22

中断保护问题

当我在80中断时候
__interrupt void Int_Tm80(void){      //253.89ms
      //PUSH        PSW;       
      TMIF80=0;                     //;clear flag
                     PLED2^=1;
      //POP      PSW;
}
程序ASM文件生成的是:
$DGL        0,10
        set1        CY                                                ; 1, 2
        bf        P12.3,$?L0039                                        ; 4,10
        not1        CY                                                ; 1, 2
?L0039:
        bnc        $?L0040                                                ; 2, 6
        set1        P12.3                                                ; 3, 6
        br        $?L0041                                                ; 2, 6
?L0040:
        clr1        P12.3                                                ; 3, 6
?L0041:

这个过程中改变了PSW,但是中断过程中没有自动保护PSW,
请问:是不是要自己保护PSW??用C语言如何表示。我只会用汇编。

moon557 发表于 2010-8-12 19:29:38

似乎只要在中断中加一句PUSH=初始值 就好了!

yf_888 发表于 2010-9-16 21:15:21

c编译器对函数(包括中断函数)的断点和现场的保护是隐含进行的,可以不必考虑内部寄存器的保护问题,至于为什么汇编代码没有对PSW压栈保护,可以多换几个方法来观察。1楼所说的在线汇编压栈,这样做是不妥的,一是没有意义,二是可能会造成意想不到的灾难,因为c编译器用户对栈的操作时封闭禁止的
页: [1]
查看完整版本: 中断保护问题