challis 发表于 2024-1-31 15:19:53

小知识:中断函数执行过程中触发中断的情况


51单片机中,高优先级的中断能打断低优先级的中断。
但同级中断是不能打断同级中断的!无论该中断函数有多长,在执行到一半这个中断又发生了,还是要等到该中断函数执行完毕,并再执行了一条主程序指令后才会再次进入该中断。
若低优先级中断服务程序中恰好修改了该中断为高优先级,那么如果该中断函数比较长,执行到一半又触发了这个中断,则该中断函数就会被重新从头开始执行(中断嵌套)。
这是因为除串口中断以外的其他中断,在 CPU 响应该中断,程序转入该中断函数前就已经将该中断的中断标志清零了。
另外,51的串口中断比较特别,因为需要软件清除串口中断标志,所以只要在未清串口中断标志前,是不会发生上述这样的中断嵌套的。

_奶咖君_ 发表于 2024-1-31 16:07:51

对于第三行的描述比较在意,,,这个则该中断函数就会被重新从头开始执行(中断嵌套)。   
那重新执行了中断函数之后,,还会跳回被自己打断的地方么?{:3_49:}

challis 发表于 2024-1-31 18:22:41

我也不太清除,坐等大神来帮忙解答下疑惑
中断的实现是不是把当前执行的代码地址入栈,然后执行中断函数,中断完成后再出栈接着执行?

xxkj2010 发表于 2024-1-31 18:59:07

51单片机中,高优先级的中断能打断低优先级的中断
-----也就是说,如果不想在执行中断函数的时候被别的中断所打断,就必须把当前中断的优先级设置为最高。这样说对吗?

神农鼎 发表于 2024-1-31 19:52:32


神农鼎 发表于 2024-1-31 19:53:02


神农鼎 发表于 2024-1-31 19:53:42


页: [1]
查看完整版本: 小知识:中断函数执行过程中触发中断的情况