哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

3天內不再提示

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

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2022-03-10 11:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Zephyr中斷系統(tǒng)一覽

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

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

2. 支持中斷的嵌套

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

擁有自己的??臻g

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

4. 軟中斷服務程序

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

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

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

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

Zephyr的ISR

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

1. 常規(guī)ISR:

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

簡單,使用方便

2. 直接ISR:

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

低延時,但是有很多限制,比如不能傳入?yún)?shù)

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

擁有最高的中斷優(yōu)先級,不受中斷鎖影響

既可以是常規(guī)ISR也可以是直接ISR

Zephyr的中斷向量表

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

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

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

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

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

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

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

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

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

如何定義一個中斷

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

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

irq_p: 中斷號

priority_p: 中斷優(yōu)先級

isr_p: 中斷服務函數(shù)

fags_p: 中斷標志

2. 使用irq_enable()使能中斷

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

下面是一段參考事例:

poYBAGIpdwSADiDfAAA4M7aNlcI543.png

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

pYYBAGIpdvyARR9IAABA8_gY0GI001.png

Zephyr的零延時中斷

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

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

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

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

結語

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

審核編輯:郭婷

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

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    恩智浦解讀Zephyr log系統(tǒng)的使用 Zephyr的shell和log功能介紹

    之前 我們從 0 開始新建了一個簡單的 Zephyr 應用- 從0開始打造屬于自己的HelloWorld ,本期就 帶著大家熟悉一下 Zephyr 的 shell 和 log 系統(tǒng)。 首先給大家介紹
    的頭像 發(fā)表于 02-27 09:19 ?2229次閱讀
    恩智浦解讀<b class='flag-5'>Zephyr</b> log系統(tǒng)的使用 <b class='flag-5'>Zephyr</b>的shell和log功能介紹

    恩智浦分享Zephyr調試技巧

    前面幾期中,我們著重給大家介紹了如何搭建Zephyr開發(fā)環(huán)境,以及如何添加自己的應用代碼。今天讓我們開始一個新的篇章:Zephyr調試技巧以及介紹Ozone進行Zephyr的調試分享。 Zep
    的頭像 發(fā)表于 03-13 09:05 ?2617次閱讀

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

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

    串口中斷實際操作是怎樣的?

    串口通信有哪些類型?串口中斷實際操作是怎樣的?
    發(fā)表于 12-16 06:32

    vxworks中斷服務程序

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

    WindowsCE異常和中斷服務程序

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

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

    51單片機通常有5個中斷,當中斷發(fā)生時,程序會跳到相應的中斷服務程序去執(zhí)行。為了區(qū)別不同的中斷,引入了
    發(fā)表于 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>說明

    中斷時間間隔的中斷服務程序實現(xiàn)免費下載

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

    STM32關全局中斷的方法 STM32中斷類型

    。 STM32中斷類型: 系統(tǒng)異常:內核水平 10個 外部中斷:外設水平 60個 STM32關全局中斷有多種方法,分別操作PRIMASK、FAULTMASK和BASEPRI寄存器。 第
    的頭像 發(fā)表于 07-22 10:52 ?3w次閱讀

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

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

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

    這里寫目錄標題先驗知識回顧控制寄存器回顧1、8086中斷類型1、外部可屏蔽中斷2、外部不可屏蔽中斷3、除法錯中斷4、單步
    發(fā)表于 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>返回

    實際中斷處理

    中斷處理處理外界發(fā)出的信號。中斷信號可能是關于數(shù)據(jù)讀寫操作的,也可能與外部設備控制有關。Intel處理器只有一個外部中斷引腳INTR,為了使處理器能夠同時接收多個硬件設備發(fā)送來的中斷
    發(fā)表于 12-17 18:44 ?7次下載
    <b class='flag-5'>實際</b><b class='flag-5'>中斷</b>處理

    泰凌微電子Zephyr編譯環(huán)境搭建

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

    單片機有哪些中斷類型

    單片機中斷是指在單片機執(zhí)行程序的過程中,當外部設備或內部條件發(fā)生某個特定事件時,能夠暫停當前正在執(zhí)行的程序,轉而去執(zhí)行一個特定的服務程序(稱為中斷服務程序或
    的頭像 發(fā)表于 10-17 18:12 ?3667次閱讀

    深入解析Zephyr RTOS的技術細節(jié)

    Zephyr是一個針對資源受限設備優(yōu)化的小型、可縮放、多體系架構實時操作系統(tǒng)(RTOS)。Zephyr由Linux基金會維護[1],是一個以構建業(yè)界最佳的RTOS為目標的開源合作項目。近年來
    的頭像 發(fā)表于 10-22 16:47 ?4710次閱讀
    深入解析<b class='flag-5'>Zephyr</b> RTOS的技術細節(jié)
    丹东市| 南乐县| 寿阳县| 四平市| 萝北县| 广灵县| 古浪县| 年辖:市辖区| 仙游县| 莲花县| 扎兰屯市| 阳新县| 胶州市| 嵊州市| 离岛区| 泸州市| 永兴县| 汤原县| 轮台县| 宜昌市| 瓦房店市| 英吉沙县| 资阳市| 苍南县| 永登县| 汝州市| 乐东| 紫金县| 敦化市| 鄯善县| 华容县| 敖汉旗| 饶平县| 榆社县| 从化市| 东海县| 泸西县| 吉安县| 奇台县| 社旗县| 九龙城区|