找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 951|回复: 1
打印 上一主题 下一主题
收起左侧

关于单片机的中断嵌套执行的问题

[复制链接]
跳转到指定楼层
楼主
ID:1023474 发表于 2022-8-20 12:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我遇到了一个问题:
按照中断优先级来说,中断的执行会先比较“抢占优先级”,如果前者相同再比较“子优先级”,如果“子优先级”也相同在比较各自的“序号”。
那么如果一个中断函数执行时,该中断又被触发了,两者的优先级都是相同的,此时该如何执行呢?

我了解到的一种说法是虽然两者的优先级相同,但是还是会发生“中断的嵌套”,即前一个同优先级的中断会被后一个中断打断。

如果是这样的话,对于按照一定时间进入一次中断函数的中断一定是无法执行的了,因为该中断会被无限的嵌套下去。

但是如果在以下的使用情景中,中断嵌套还会很大的影响程序的运行吗?
即:通过IO口检测外部的上升沿,进而触发中断,而该上升沿由按键按下产生,按键按下时会产生抖动,如果不进行消抖的话,可能会导致单片机的IO口接收到很多的上升沿信号,进而产生多个中断,但是该种中断的数量是有限的,中断函数也比较简单(这里中断函数的内容即使执行多次对程序也无任何不良影响),所以此时即使产生了多个中断的嵌套,单片机应该也可以快速的将这些嵌套处理完毕,即此时可以将中断嵌套的影响忽略不计。

请问我上面的想法对吗?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2022-8-22 17:05 | 只看该作者
本帖最后由 yzwzfyz 于 2022-8-23 08:23 编辑

有头脑,善于思考问题。汝子可教也!
1、中断是不是响应,取决于中断源自己的标记:F。(其它的中断允许、屏蔽不在此讨论,并假设中断源标记是 F)。
对于 F的清除有两种方式(具体看手册):
其一、响应后CPU硬件自动清除。其二响应后需人工清除。
2、在你进入中断程序后(已响应),就不会再响应本源的中断。假如你已清除了F,而这时中断源又动作了,它只能将F置1,无法做任何事,中断N次,也只是将F置1而矣,一次与N次都一样。
3、当你退出中断服务程序后(以RETI为标志),CPU硬件会再次识别F是否为1。是1则再次响应。CPU并不识别中断源动作了多少次,而只识别F是否为1。
4、在你进入中断程序后(已响应),中断源又动作了N次,它只能将F置1,而你在退出中断之前,又做了一个【缺德】的事,清F清0了!这时,你再退出中断服务程序后。程序不会再进入中断,因为CPU看不见F了。

CPU响应中断有以下条件:
1、本源F标记=1。
2、中断被允许。
3、无更高级或同级中断已被响应。
4、当前指令已执行结束(当前指令未执行完不响应)。
5、RETI 的一条指令已被执行(看手册,是否有这一条。一些单片机需要RETI后再执行1-2条指令才能识别到F)。

总结:
1、中断源动作只能使 F=1,并不能让CPU立即响应中断。
2、中断源动作N次,在未被CPU响应之前,只有最后一个起作用,CPU不识别动作次数。
3、中断源动作N次,而中断已被CPU响应,是否再次被响应,取决于本次中断服务程序退出时,F是否为1。当然如果有更高级的中断发生,即使未退出,也被抢了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表