中断事件所分的三个级别有什么关系,那里可以体现出级间的优先.
书上说同一个级别里中断要队列,而且又说中断程序一旦执行了就不能被中断.
那么:当正在执行一个中断的过程中先发生时间中断,然后发生了通讯中断.这时队列是什么样呢?这样,当正在执行的这个中断完成后会执行什么呢?
问题补充:
——–
9月8日
鼠:那么级别的区别就仅只反映在队列的时候了?
——–
补充这个问题不用回答了.留给自己验证吧.相信我选这个为最佳答案大家应该没有异议吧.
最佳答案
中断队列应对的是几乎同时发生的中断事件,按照级别高低排列,顺序执行。在出现队列的情况下,如有级别高的中断发生,它可以插队获得优先权,但不能打断现时运行的中断程序,必须等待现时中断程序结束,不管它的级别高低如何。现时中断程序结束后,将响应队列中级别最高的中断请求。
在出现中断排队时,高等级的中断总是优先于低等级中断;同一等级的也有级别之分,同样排队。这如同将官、校官、尉官几个大级别,而大级别中又分大、中、少等小级别。
提问者对于答案的评价:
接纳.不过理由是否有出处.答案我一定考究.谢谢!
专家置评
前面的回答有问题。对于中断而言,同一优先级不同中断号的中断在前一个中断没有执行完毕时,其进入中断队列按顺序执行。当同一优先级同一中断号的中断再次发生时如前一同一优先级同一中断号的中断还没完成时其将丢失。当一中断在执行过程中如发生了更高级别的中断时,其将在当前指令执行完后被中断。操作系统为被中断的块保存全部的寄存器堆栈。当返回被中断的块时,寄存器的信息被恢复。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc359122.html
评论列表(1条)
刚好近期在总结单片机中断优先级方面问题,个人感觉还是具体以手册为准为好(不同MCU或许有所不同)。
以下是个人近期的有关笔记摘录,所用及参考的是STC的MCU手册,仅供参考:
1.中断应尽快返回,不宜调用延时和过长程序,期间若有其它低级中断会延误响应,易混乱。可在中断里设个标志位,在主程序中查询为1时再执行。
2. 按键至少2次电平跳转(未含抖动),每次进中断”硬件清0″,执行中若有跳变会被置1挂号,退出之前未”软件清0″后面会再次引发1次中断! 必要时可在中断里适当加点延迟(没说时调用)再IE0清0。
3.优先级除INT2/3定时器2/3/4外均有4级可设;同优先级中断同时产生按”次序”列队,当前中断执行完并再执行了1条主程序指令后才进下个中断!
4.串口中断除外,在CPU响应中断转入该中断前已将中断标志清0。串口中断需软件清0,未清0前不会发生中断嵌套。
上面专家置评中:中断未完成同一中断再来将丢失?也见过类似回答,可能是不同的处理器。
有一种完整的解释是:中断未完成前(标志位已硬件自动清0)同一中断再来后(标志位会硬件置位1,就是已挂了个号)若已及时软件清0,那么后面那个中断当然就不会执行(丢失);若未及时软件清0,那么后面那个中断号(已挂号还有效)就不会丢失,等前面那个中断执行完,再执行一条主程序指令后,就轮到执行后面来的那个中断了。
注意:同一中断就是同一个中断不是同级中断,同级中断是指“同一优先级中断”,优先级有默认级别也可自设(就那么4种级别或其他情况),默认是按手册“次序“表顺序。
一般高优先级的中断请求可以打断低优先级的中断,反之,低 优先级的中断请求不可以打断高优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序来 决定系统先响应哪个中断。。。
中断嵌套系统称为多级中断系 统,没有中断嵌套功能的中断系统称为单级中断系统(再说)。。。
STC手册全摘录供参考:
中断系统是为使 CPU 具有对外界紧急事件的实时处理能力而设置的。
当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求 CPU 暂停当前的工作, 转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为 中断。实现这种功能的部件称为中断系统,请示 CPU 中断的请求源称为中断源。微型机的中断系统一般 允许多个中断源,当几个中断源同时向 CPU 请求中断,要求为它服务的时候,这就存在 CPU 优先响应 哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规 定每一个中断源有一个优先级别。 CPU 总是先响应优先级别最高的中断请求。
当 CPU 正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它 还高的中断源请求。如果 CPU 能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源, 处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。这样的中断系统称为多级中断系 统,没有中断嵌套功能的中断系统称为单级中断系统。
用户可以用关总中断允许位( EA/IE.7) 或相应中断的允许位屏蔽相应的中断请求,也可以用打开相 应的中断允许位来使 CPU 响应相应的中断申请, 每一个中断源可以用软件独立地控制为开中断或关中断 状态, 部分中断的优先级别均可用软件设置。高优先级的中断请求可以打断低优先级的中断,反之,低 优先级的中断请求不可以打断高优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序来 决定系统先响应哪个中断。