以51单片机为例,在响应某一个中断后进行保护现场的工作时,为什么不能被更高级的中断所中断?
书上的解释是:保护现场时如果被更高级的中断所中断会使现场信息受到破坏或造成混乱,这是为何?哪位能举个例子详细说明一下吗...
书上的解释是:保护现场时如果被更高级的中断所中断会使现场信息受到破坏或造成混乱,这是为何?哪位能举个例子详细说明一下吗
展开
4个回答
展开全部
对书上这句话的理解应该是,中断服务程序中,在保护现场时,应尽量避免被高优先级的中断所中断,而并不是说这时候单片机不能响应高优先级的中断。所谓保护现场一般就是保护一些共用的寄存器,由于这些寄存器是共用的,所以可能会被其它的程序修改,因此需要保存起来,返回的时候再恢复回来,从而保护了程序运行的状态。一般可在进入中断服务程序保护现场的时候关掉中断,保护完现场后再开中断。
引起混乱的意思是,如果没有保护现场或者保护现场的时候被高优先级的中断所中断,这时候当前程序里面的有些寄存器没有被保护下来,而高优先级的中断运行的过程中可能会改写这些寄存器,这样再返回低优级中断的时候,不可能恢复这些器存器的值,低优先级的程序运行的时候会因为错误的寄存器值造成不可预料的结果。比如,在中断1中有一个判断的语句JB A.3,L1,如果你在中断1中没有保存A,这时被高优先级的中断2所中断,而高优先级的中断运行后,A的值被改变了,由于你没有保存A,所以无法恢复,这样再返回中断1执行的时候就可能产生错误的执行结果。
引起混乱的意思是,如果没有保护现场或者保护现场的时候被高优先级的中断所中断,这时候当前程序里面的有些寄存器没有被保护下来,而高优先级的中断运行的过程中可能会改写这些寄存器,这样再返回低优级中断的时候,不可能恢复这些器存器的值,低优先级的程序运行的时候会因为错误的寄存器值造成不可预料的结果。比如,在中断1中有一个判断的语句JB A.3,L1,如果你在中断1中没有保存A,这时被高优先级的中断2所中断,而高优先级的中断运行后,A的值被改变了,由于你没有保存A,所以无法恢复,这样再返回中断1执行的时候就可能产生错误的执行结果。
展开全部
进入中断之后要马上关中断吧……
中断优先级也可以自己设置,IP寄存器……
因为现场保护要一个过程,把状态寄存器和PC压栈,如果这个过程之中就跳转的话……
下面是引用同时产生的解释
————————————————————————
你已经设置“定时器0”和“外中断1”为高优先级了,如果5个中断同时产生,
系统会按照自然优先级的顺序,对中断源进行查找,首先会查到“定时器0”,
那么“定时器0”就会首先进入中断。
执行了“定时器0”中断的各个环节,返回主程序之后,如果“外中断1”的中
断申请还存在,就会进入“外中断1”的。
执行完了高级的中断程序,如果还有其它中断申请标志,系统还是按照自然优先级进行查找、响应中断。
中断优先级也可以自己设置,IP寄存器……
因为现场保护要一个过程,把状态寄存器和PC压栈,如果这个过程之中就跳转的话……
下面是引用同时产生的解释
————————————————————————
你已经设置“定时器0”和“外中断1”为高优先级了,如果5个中断同时产生,
系统会按照自然优先级的顺序,对中断源进行查找,首先会查到“定时器0”,
那么“定时器0”就会首先进入中断。
执行了“定时器0”中断的各个环节,返回主程序之后,如果“外中断1”的中
断申请还存在,就会进入“外中断1”的。
执行完了高级的中断程序,如果还有其它中断申请标志,系统还是按照自然优先级进行查找、响应中断。
参考资料: http://zhidao.baidu.com/question/118717280.html?fr=ala0
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为通用寄存器R0~R7和其他一些RAM空间能被其他中断程序所用,可能你第一个中断程序正在使用这些寄存器时就被另一个中断程序中断了,另一个子程序改变了寄存器的值导致另一个中断程序返回后第一个中断程序的寄存器值不是原来的值,导致得到的结果出错,所以要保护现场,不知你看明白没。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
中断处理完回来还有恢复现场,如果更高级的中断回来后发现现场恢复不了不就混乱了吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询