Zephyr中斷系統(tǒng)一覽
首先我們來(lái)看下Zephyr中的中斷系統(tǒng)有什么特別之處:
1. 內(nèi)核為所有未使用的中斷提供了默認(rèn)的中斷服務(wù)程序,如果一個(gè)未定義中斷被觸發(fā)會(huì)產(chǎn)生一個(gè)系統(tǒng)錯(cuò)誤
2. 支持中斷的嵌套
3. 中斷服務(wù)程序執(zhí)行在內(nèi)核中斷上下文
擁有自己的棧空間
要注意,棧的容量要足夠大,以支持中斷的嵌套
4. 軟中斷服務(wù)程序
常規(guī)中斷一般都通過一個(gè)叫做軟中斷的服務(wù)程序進(jìn)行管理
通過查找軟中斷向量表,能夠獲取實(shí)際要執(zhí)行的中斷服務(wù)程序(下文統(tǒng)稱ISR)入口以及參數(shù)
從ISR返回時(shí),決定是否進(jìn)行線程的切換
5. 多數(shù)內(nèi)核API只能在線程中使用,不能在ISR中使用,那些可以在ISR中使用的內(nèi)核API往往都有一個(gè)isr_ok的屬性。
Zephyr的ISR
再來(lái)看下,Zephyr中的ISR類型,Zephyr中的中斷服務(wù)類型大致分為3類:
1. 常規(guī)ISR:
由軟中斷服務(wù)程序所調(diào)用,不能直接運(yùn)行
簡(jiǎn)單,使用方便
2. 直接ISR:
不使用軟中斷服務(wù)程序,直接注冊(cè)進(jìn)硬件中斷向量表中
低延時(shí),但是有很多限制,比如不能傳入?yún)?shù)
3. 零延時(shí)ISR:顧名思義就是延時(shí)最低的
擁有最高的中斷優(yōu)先級(jí),不受中斷鎖影響
既可以是常規(guī)ISR也可以是直接ISR
Zephyr的中斷向量表
說完中斷類型,介紹一下Zephyr中的中斷向量表的概念,除了硬件中斷向量表,Zephyr中還有一個(gè)較為新的概念,我們?cè)谏衔闹幸灿兴峒埃凶鲕浖袛嘞蛄勘恚敲此麄兌几髯载?fù)責(zé)什么呢?我們來(lái)一一介紹。
1. 硬件中斷向量表:前16個(gè)位置固定給了內(nèi)核服務(wù),其他位置,如果沒有被注冊(cè)的話,填入的是通用的中斷服務(wù)程序_isr_wrapper()
2. 軟件中斷向量表:內(nèi)部存儲(chǔ)的是所注冊(cè)的中斷服務(wù)程序,以及想要傳入的參數(shù),所有所有未添加中斷服務(wù)程序的地方,都會(huì)被寫入z_irq_spurious()
3. 通用中斷服務(wù)程序_isr_wrapper()作用:
中斷函數(shù)第一入口,他是軟件中斷向量表的使用者
負(fù)責(zé)取出真正的中斷服務(wù)程序入口以及參數(shù)
4. 直接中斷:直接被裝配到硬件中斷向量表,當(dāng)中斷到來(lái)時(shí),直接被執(zhí)行
下圖是完整的中斷服務(wù)注冊(cè)邏輯:
如何定義一個(gè)中斷
了解了中斷實(shí)現(xiàn)以及執(zhí)行邏輯,我們來(lái)看看如何實(shí)際定義一個(gè)中斷,首先是常規(guī)中斷,只需要兩個(gè)步驟:
1. 使用宏IRQ_CONNECT進(jìn)行中斷定義,需要注意的是,所有參數(shù)的數(shù)值必須是編譯期確定的,其原型是IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p),各參數(shù)說明如下:
irq_p: 中斷號(hào)
priority_p: 中斷優(yōu)先級(jí)
isr_p: 中斷服務(wù)函數(shù)
fags_p: 中斷標(biāo)志
2. 使用irq_enable()使能中斷
當(dāng)然,上述方式是在編譯期進(jìn)行中斷的注冊(cè),Zephyr也同時(shí)支持運(yùn)行期間通過調(diào)用函數(shù)irq_connect_dynamic()注冊(cè),但是需要配置CONFIG_DYNAMIC_INTERRUPTS
下面是一段參考事例:
接下來(lái)是直接中斷,實(shí)現(xiàn)方式略有不同,需要用戶調(diào)用IRQ_DIRECT_CONNECT:
Zephyr的零延時(shí)中斷
最后聊聊零延時(shí)中斷,上文說過,零延時(shí)中斷的類型可以是直接中斷也可以是常規(guī)中斷,換句話說,他的實(shí)現(xiàn)方式與上述兩種大致相同,唯一不同的是,中斷標(biāo)志位需要傳入IRQ_ZERO_LATENCY以指示這是一個(gè)零延時(shí)中斷。
那么為什么要設(shè)計(jì)零延時(shí)中斷呢?
最主要的原因是,在程序設(shè)計(jì)時(shí),我們往往會(huì)在程序中加入irq lock,保證代碼運(yùn)行不會(huì)被中斷打斷,但是這樣一來(lái),就可能提高系統(tǒng)的延時(shí),對(duì)于一些時(shí)間敏感的應(yīng)用案例,高延時(shí)往往是不可接受的。
那么此時(shí),零延時(shí)中斷的作用就體現(xiàn)了,他自身運(yùn)行在一個(gè)不會(huì)被lock的優(yōu)先級(jí),當(dāng)然需要通過CONFIG_ZERO_LATENCY_IRQS使能。這樣一來(lái),一旦中斷被觸發(fā),其對(duì)應(yīng)的中斷處理函數(shù)能夠馬上被執(zhí)行,大大降低中斷延時(shí)。
結(jié)語(yǔ)
本期文章,主要給大家分享了Zephyr中的中斷系統(tǒng)的一些基礎(chǔ)概念,最特殊的地方在于,Zephyr引入了一個(gè)軟件中斷向量表的概念,使得我們的中斷服務(wù)程序可以接收參數(shù),但是弊端就在于會(huì)引入一點(diǎn)中斷延時(shí),這樣在實(shí)際使用中,我們就要權(quán)衡利弊,各取所好了。
審核編輯:郭婷
-
中斷系統(tǒng)
+關(guān)注
關(guān)注
1文章
96瀏覽量
61079
原文標(biāo)題:清風(fēng)徐來(lái)——Zephyr實(shí)戰(zhàn)篇(6)之中斷
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
使用MCUXpresso for VS Code插件開發(fā)Zephyr的hello world
![使用MCUXpresso for VS Code插件開發(fā)<b class='flag-5'>Zephyr</b>的hello world](https://file1.elecfans.com/web3/M00/04/A6/wKgZPGd3PBeAcAcFAABDETVNApk954.png)
51單片機(jī)的中斷號(hào)對(duì)應(yīng)的中斷類型介紹
Zephyr與FreeRTOS實(shí)時(shí)性測(cè)試比較
vxworks中斷服務(wù)程序
WindowsCE異常和中斷服務(wù)程序
51單片機(jī)有幾個(gè)中斷?單片機(jī)的中斷號(hào)對(duì)應(yīng)的中斷類型說明
![51單片機(jī)有幾個(gè)<b class='flag-5'>中斷</b>?單片機(jī)的<b class='flag-5'>中斷</b>號(hào)對(duì)應(yīng)的<b class='flag-5'>中斷</b><b class='flag-5'>類型</b>說明](https://file.elecfans.com/web1/M00/A2/2E/pIYBAF1JLZyAM1fVAAQIFPkCSEk075.png)
中斷時(shí)間間隔的中斷服務(wù)程序?qū)崿F(xiàn)免費(fèi)下載
![<b class='flag-5'>中斷</b>時(shí)間間隔的<b class='flag-5'>中斷</b><b class='flag-5'>服務(wù)</b>程序?qū)崿F(xiàn)免費(fèi)下載](https://file.elecfans.com/web1/M00/A1/CF/o4YBAF1I6PCAfy2vAAFV9JtkLqU321.png)
淺析Zephyr在ESP32上的啟動(dòng)流程
淺析Zephyr應(yīng)用的代碼結(jié)構(gòu)中的自定義驅(qū)動(dòng)
微機(jī)原理——8086中斷類型以及中斷向量表、中斷響應(yīng)、中斷返回
![微機(jī)原理——8086<b class='flag-5'>中斷</b><b class='flag-5'>類型</b>以及<b class='flag-5'>中斷</b>向量表、<b class='flag-5'>中斷</b>響應(yīng)、<b class='flag-5'>中斷</b>返回](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
泰凌微電子Zephyr編譯環(huán)境搭建
瑞薩正式加入Zephyr項(xiàng)目
深入解析Zephyr RTOS的技術(shù)細(xì)節(jié)
![深入解析<b class='flag-5'>Zephyr</b> RTOS的技術(shù)細(xì)節(jié)](https://file1.elecfans.com/web2/M00/0A/E1/wKgaomcXZ22AeVJgAABvcLxtcWM071.png)
評(píng)論