找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1863|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機的中斷嵌套執(zhí)行的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1023474 發(fā)表于 2022-8-20 12:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我遇到了一個問題:
按照中斷優(yōu)先級來說,中斷的執(zhí)行會先比較“搶占優(yōu)先級”,如果前者相同再比較“子優(yōu)先級”,如果“子優(yōu)先級”也相同在比較各自的“序號”。
那么如果一個中斷函數(shù)執(zhí)行時,該中斷又被觸發(fā)了,兩者的優(yōu)先級都是相同的,此時該如何執(zhí)行呢?

我了解到的一種說法是雖然兩者的優(yōu)先級相同,但是還是會發(fā)生“中斷的嵌套”,即前一個同優(yōu)先級的中斷會被后一個中斷打斷。

如果是這樣的話,對于按照一定時間進入一次中斷函數(shù)的中斷一定是無法執(zhí)行的了,因為該中斷會被無限的嵌套下去。

但是如果在以下的使用情景中,中斷嵌套還會很大的影響程序的運行嗎?
即:通過IO口檢測外部的上升沿,進而觸發(fā)中斷,而該上升沿由按鍵按下產(chǎn)生,按鍵按下時會產(chǎn)生抖動,如果不進行消抖的話,可能會導(dǎo)致單片機的IO口接收到很多的上升沿信號,進而產(chǎn)生多個中斷,但是該種中斷的數(shù)量是有限的,中斷函數(shù)也比較簡單(這里中斷函數(shù)的內(nèi)容即使執(zhí)行多次對程序也無任何不良影響),所以此時即使產(chǎn)生了多個中斷的嵌套,單片機應(yīng)該也可以快速的將這些嵌套處理完畢,即此時可以將中斷嵌套的影響忽略不計。

請問我上面的想法對嗎?

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2022-8-22 17:05 | 只看該作者
本帖最后由 yzwzfyz 于 2022-8-23 08:23 編輯

有頭腦,善于思考問題。汝子可教也!
1、中斷是不是響應(yīng),取決于中斷源自己的標記:F。(其它的中斷允許、屏蔽不在此討論,并假設(shè)中斷源標記是 F)。
對于 F的清除有兩種方式(具體看手冊):
其一、響應(yīng)后CPU硬件自動清除。其二響應(yīng)后需人工清除。
2、在你進入中斷程序后(已響應(yīng)),就不會再響應(yīng)本源的中斷。假如你已清除了F,而這時中斷源又動作了,它只能將F置1,無法做任何事,中斷N次,也只是將F置1而矣,一次與N次都一樣。
3、當你退出中斷服務(wù)程序后(以RETI為標志),CPU硬件會再次識別F是否為1。是1則再次響應(yīng)。CPU并不識別中斷源動作了多少次,而只識別F是否為1。
4、在你進入中斷程序后(已響應(yīng)),中斷源又動作了N次,它只能將F置1,而你在退出中斷之前,又做了一個【缺德】的事,清F清0了!這時,你再退出中斷服務(wù)程序后。程序不會再進入中斷,因為CPU看不見F了。

CPU響應(yīng)中斷有以下條件:
1、本源F標記=1。
2、中斷被允許。
3、無更高級或同級中斷已被響應(yīng)。
4、當前指令已執(zhí)行結(jié)束(當前指令未執(zhí)行完不響應(yīng))。
5、RETI 的一條指令已被執(zhí)行(看手冊,是否有這一條。一些單片機需要RETI后再執(zhí)行1-2條指令才能識別到F)。

總結(jié):
1、中斷源動作只能使 F=1,并不能讓CPU立即響應(yīng)中斷。
2、中斷源動作N次,在未被CPU響應(yīng)之前,只有最后一個起作用,CPU不識別動作次數(shù)。
3、中斷源動作N次,而中斷已被CPU響應(yīng),是否再次被響應(yīng),取決于本次中斷服務(wù)程序退出時,F(xiàn)是否為1。當然如果有更高級的中斷發(fā)生,即使未退出,也被搶了。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表