关于“低优先级中断可以断高优先级中断”,
看到马老师所说的“低优先级中断可以断高优先级中断”,我认为中断后开放了全局中断就不再属于具体中断了,所以不可能出现这种情况。 如果你硬要这样理解"在中断服务中开放了全局中断,本中断服务就不再属于中断服务了,可以看成一般的程序"的话,那么“低优先级中断可以打断高优先级中断”就不存在了.但一般的理解不是这样的. 只看本质不看文字。
中断程序也可以用绝对地址CALL,JMP来调用的。那它是普通子程序么?
而手册上“解释”的理解,中断程序与普通子程序的区别在于,中断程序默认是只能被硬件中断条件满足后调用的。只要进入程序的方法是“唯一”使用中断进入的,那么他就是中断程序。
“低优先级中断可以断高优先级中断”的核心在于,程序调用的条件嵌套。
if a
if b
if c
endif
endif
endif
而不是它调用的那个程序代码。 2楼好象有点偏离原问题.
通常是"高优先级中断可以打断低优先级中断",这种功能的支持是芯片本身硬件的支持.比如在51中,当一个低优先级中断服务在执行过程中,发生的优先级比其高的中断可以自动打断原中断的执行,而发生的优先级比其低的中断是不能打断原中断的执行.
而AVR的中断系统有点特殊,在任何中断服务中,只要开放了全局中断标志,那么任何的中断都可以打断现在的中断服务,因此能够出现"低优先级中断可以打断高优先级中断"的情况. 以一些操作系统为例,利用定时中断后不一定会使用RETI来返回,完全可以开中断后利用JMP等指令或是其它指令来实现任务切换,如果那样的话我们难道说这个操作系统一直在中断状态? 只要开了中断,可能应该说是“允许中断”状态。
个人:
中断是满足 全局中断和相应中断标志位 的一个时间点事件,而不是一个持续事件。 所以说就不存在低优先级断高优先级的现象,这些也都是理解上面的问题了。拿马老师的一句话来找字眼,算是我和马老师开的一个小小玩笑了。^_^
页:
[1]