吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Zephyr中斷服務類型及實際應用

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2022-03-10 11:53 ? 次閱讀

Zephyr中斷系統一覽

首先我們來看下Zephyr中的中斷系統有什么特別之處:

1. 內核為所有未使用的中斷提供了默認的中斷服務程序,如果一個未定義中斷被觸發會產生一個系統錯誤

2. 支持中斷的嵌套

3. 中斷服務程序執行在內核中斷上下文

擁有自己的棧空間

要注意,棧的容量要足夠大,以支持中斷的嵌套

4. 軟中斷服務程序

常規中斷一般都通過一個叫做軟中斷的服務程序進行管理

通過查找軟中斷向量表,能夠獲取實際要執行的中斷服務程序(下文統稱ISR)入口以及參數

從ISR返回時,決定是否進行線程的切換

5. 多數內核API只能在線程中使用,不能在ISR中使用,那些可以在ISR中使用的內核API往往都有一個isr_ok的屬性。

Zephyr的ISR

再來看下,Zephyr中的ISR類型,Zephyr中的中斷服務類型大致分為3類:

1. 常規ISR:

由軟中斷服務程序所調用,不能直接運行

簡單,使用方便

2. 直接ISR:

不使用軟中斷服務程序,直接注冊進硬件中斷向量表中

低延時,但是有很多限制,比如不能傳入參數

3. 零延時ISR:顧名思義就是延時最低的

擁有最高的中斷優先級,不受中斷鎖影響

既可以是常規ISR也可以是直接ISR

Zephyr的中斷向量表

說完中斷類型,介紹一下Zephyr中的中斷向量表的概念,除了硬件中斷向量表,Zephyr中還有一個較為新的概念,我們在上文中也有所提及,叫做軟件中斷向量表,那么他們都各自負責什么呢?我們來一一介紹。

1. 硬件中斷向量表:前16個位置固定給了內核服務,其他位置,如果沒有被注冊的話,填入的是通用的中斷服務程序_isr_wrapper()

2. 軟件中斷向量表:內部存儲的是所注冊的中斷服務程序,以及想要傳入的參數,所有所有未添加中斷服務程序的地方,都會被寫入z_irq_spurious()

3. 通用中斷服務程序_isr_wrapper()作用:

中斷函數第一入口,他是軟件中斷向量表的使用者

負責取出真正的中斷服務程序入口以及參數

4. 直接中斷:直接被裝配到硬件中斷向量表,當中斷到來時,直接被執行

下圖是完整的中斷服務注冊邏輯:

f0686766-a018-11ec-952b-dac502259ad0.png

如何定義一個中斷

了解了中斷實現以及執行邏輯,我們來看看如何實際定義一個中斷,首先是常規中斷,只需要兩個步驟:

1. 使用宏IRQ_CONNECT進行中斷定義,需要注意的是,所有參數的數值必須是編譯期確定的,其原型是IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p),各參數說明如下:

irq_p: 中斷號

priority_p: 中斷優先級

isr_p: 中斷服務函數

fags_p: 中斷標志

2. 使用irq_enable()使能中斷

當然,上述方式是在編譯期進行中斷的注冊,Zephyr也同時支持運行期間通過調用函數irq_connect_dynamic()注冊,但是需要配置CONFIG_DYNAMIC_INTERRUPTS

下面是一段參考事例:

poYBAGIpdwSADiDfAAA4M7aNlcI543.png

接下來是直接中斷,實現方式略有不同,需要用戶調用IRQ_DIRECT_CONNECT:

pYYBAGIpdvyARR9IAABA8_gY0GI001.png

Zephyr的零延時中斷

最后聊聊零延時中斷,上文說過,零延時中斷的類型可以是直接中斷也可以是常規中斷,換句話說,他的實現方式與上述兩種大致相同,唯一不同的是,中斷標志位需要傳入IRQ_ZERO_LATENCY以指示這是一個零延時中斷。

那么為什么要設計零延時中斷呢?

最主要的原因是,在程序設計時,我們往往會在程序中加入irq lock,保證代碼運行不會被中斷打斷,但是這樣一來,就可能提高系統的延時,對于一些時間敏感的應用案例,高延時往往是不可接受的。

那么此時,零延時中斷的作用就體現了,他自身運行在一個不會被lock的優先級,當然需要通過CONFIG_ZERO_LATENCY_IRQS使能。這樣一來,一旦中斷被觸發,其對應的中斷處理函數能夠馬上被執行,大大降低中斷延時。

結語

本期文章,主要給大家分享了Zephyr中的中斷系統的一些基礎概念,最特殊的地方在于,Zephyr引入了一個軟件中斷向量表的概念,使得我們的中斷服務程序可以接收參數,但是弊端就在于會引入一點中斷延時,這樣在實際使用中,我們就要權衡利弊,各取所好了。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 中斷系統
    +關注

    關注

    1

    文章

    96

    瀏覽量

    61067

原文標題:清風徐來——Zephyr實戰篇(6)之中斷

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Zephyr的構建工具

    給大家介紹一下Zephyr的構建工具們:
    的頭像 發表于 12-05 09:51 ?788次閱讀
    <b class='flag-5'>Zephyr</b>的構建工具

    使用MCUXpresso for VS Code插件開發Zephyr的hello world

    本期來到Zephyr實戰經驗演練,小編帶著大家一起使用MCUXpresso for VS Code插件來開發一個屬于Zephyr的hello world。
    的頭像 發表于 01-03 09:21 ?643次閱讀
    使用MCUXpresso for VS Code插件開發<b class='flag-5'>Zephyr</b>的hello world

    51單片機的中斷號對應的中斷類型介紹

    51單片機通常有5個中斷,當中斷發生時,程序會跳到相應的中斷服務程序去執行。為了區別不同的中斷,引入了
    發表于 07-19 00:52

    Zephyr與FreeRTOS實時性測試比較

    1、Zephyr與FreeRTOS實時性測試比較分析用Rhealstone基準程序方法,分別測試Zephyr和FreeRTOS兩個RTOS的六個實時性能指標,發現Zephyr指標較差。考慮到任務切換
    發表于 08-19 16:12

    vxworks中斷服務程序

    中斷服務程序用來處理來自硬件的中斷,是設備驅動程序的重要組成部分。為及時響應外部中斷,防止中斷丟失.中斷
    發表于 06-27 11:09 ?1441次閱讀

    WindowsCE異常和中斷服務程序

    WindowsCE異常和中斷服務程序,中斷和異常都是異步發生的事件,當該事件發生,系統將停止目前正在執行的代碼轉而執行事件響應的服務程序。
    發表于 01-04 15:37 ?1711次閱讀

    51單片機有幾個中斷?單片機的中斷號對應的中斷類型說明

    51單片機通常有5個中斷,當中斷發生時,程序會跳到相應的中斷服務程序去執行。為了區別不同的中斷,引入了
    發表于 08-06 17:34 ?5次下載
    51單片機有幾個<b class='flag-5'>中斷</b>?單片機的<b class='flag-5'>中斷</b>號對應的<b class='flag-5'>中斷</b><b class='flag-5'>類型</b>說明

    中斷時間間隔的中斷服務程序實現免費下載

    本文檔的主要內容詳細介紹的是中斷時間間隔的中斷服務程序實現免費下載。
    發表于 08-06 17:34 ?1次下載
    <b class='flag-5'>中斷</b>時間間隔的<b class='flag-5'>中斷</b><b class='flag-5'>服務</b>程序實現免費下載

    淺析Zephyr在ESP32上的啟動流程

    理解Zephyr在一款soc上的啟動流程,有利于分析和調試開機過程卡死,驅動異常等的問題。因此在上手一款新的soc時掌握Zephyr在其上面的啟動流程非常必要。本文對Zephyr在ESP32上的啟動
    的頭像 發表于 06-07 17:04 ?5403次閱讀

    淺析Zephyr應用的代碼結構中的自定義驅動

    本篇是《《Zephyr應用的代碼結構》》系列的終篇和下面兩篇文章一起可以構建出一個有app獨立管理的zephyr項目 Zephyr應用的代碼結構--West提貨單: zephyr
    的頭像 發表于 08-18 09:08 ?4877次閱讀

    微機原理——8086中斷類型以及中斷向量表、中斷響應、中斷返回

    這里寫目錄標題先驗知識回顧控制寄存器回顧1、8086中斷類型1、外部可屏蔽中斷2、外部不可屏蔽中斷3、除法錯中斷4、單步
    發表于 11-24 16:51 ?16次下載
    微機原理——8086<b class='flag-5'>中斷</b><b class='flag-5'>類型</b>以及<b class='flag-5'>中斷</b>向量表、<b class='flag-5'>中斷</b>響應、<b class='flag-5'>中斷</b>返回

    泰凌微電子Zephyr編譯環境搭建

    如上文所介紹,Telink Zephyr是由社區的Zephyr倉庫fork而來的,用于維護我們在社區的內容,并開發新的功能。若要查看 Telink Zephyr 最新的開發內容,可以查看位于GitHub上telink-semi的
    的頭像 發表于 01-30 11:28 ?3320次閱讀

    瑞薩正式加入Zephyr項目

    近日,瑞薩正式加入Zephyr項目,成為銀級會員。Zephyr是Linux基金會的開源項目,旨在為面向未來且資源受限的設備建立安全、互聯且靈活的實時操作系統。Zephyr設計來源于開發人員,也更易
    的頭像 發表于 03-09 17:43 ?1886次閱讀

    深入解析Zephyr RTOS的技術細節

    Zephyr是一個針對資源受限設備優化的小型、可縮放、多體系架構實時操作系統(RTOS)。Zephyr由Linux基金會維護[1],是一個以構建業界最佳的RTOS為目標的開源合作項目。近年來
    的頭像 發表于 10-22 16:47 ?709次閱讀
    深入解析<b class='flag-5'>Zephyr</b> RTOS的技術細節

    使用MCUXPresso插件開發Zephyr

    應廣大讀者朋友的熱情邀請,我們特別策劃了“Zephyr領進門”系列介紹(共十篇),旨在為大家深度剖析Zephyr OS——這一備受矚目的開源實時操作系統。從使用MCUXPresso插件進行開發
    的頭像 發表于 11-28 09:41 ?375次閱讀
    太阳城百家乐杀祖玛| 游戏房百家乐赌博图片| bet365开户| 永利高百家乐现金网| 百家乐官网赢家球讯网| 老钱庄百家乐的玩法技巧和规则| 太阳百家乐官网路单生| 百家乐官网分析下载| 百家乐官网规则以及玩法 | 网上百家乐赌场娱乐网规则| 58百家乐官网的玩法技巧和规则| 百家乐官网网络视频游戏| 上海博彩生物科技有限公司| 百家乐庄家怎样赚钱| 免费百家乐官网计划软件| 百家乐官网打闲赢机会多| 双鸭山市| 足球开户网| 大发888真人真钱网址| 百家乐官网重要心态| bet365体育| 大发888虎牌官方下载| 威尼斯人娱乐城澳门威| 天天百家乐官网游戏| 威尼斯人娱乐城官方网址| 金博士百家乐娱乐城| 百家乐官网7人桌布| 百家乐官网破战| 百家乐官网全讯网娱乐城| 百家乐官网代理加盟| 时时彩论坛| 足球走地| 大赢家棋牌游戏| 88娱乐城网址tlyd| 边城棋牌中心| 真人娱乐城送体验金18| 网页棋牌游戏| 六合彩现场| 拉斯维加斯娱乐| 梅州市| 百家乐官网视频游戏界面|