一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Zephyr中斷服務(wù)類(lèi)型及實(shí)際應(yīng)用

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

掃碼添加小助手

加入工程師交流群

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ī)中斷一般都通過(guò)一個(gè)叫做軟中斷的服務(wù)程序進(jìn)行管理

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

從ISR返回時(shí),決定是否進(jìn)行線(xiàn)程的切換

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

Zephyr的ISR

再來(lái)看下,Zephyr中的ISR類(lèi)型,Zephyr中的中斷服務(wù)類(lèi)型大致分為3類(lèi):

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的中斷向量表

說(shuō)完中斷類(lèi)型,介紹一下Zephyr中的中斷向量表的概念,除了硬件中斷向量表,Zephyr中還有一個(gè)較為新的概念,我們?cè)谏衔闹幸灿兴峒埃凶鲕浖袛嘞蛄勘?,那么他們都各自?fù)責(zé)什么呢?我們來(lái)一一介紹。

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

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

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

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

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

4. 直接中斷:直接被裝配到硬件中斷向量表,當(dāng)中斷到來(lái)時(shí),直接被執(zhí)行

下圖是完整的中斷服務(wù)注冊(cè)邏輯:

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

如何定義一個(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ù)說(shuō)明如下:

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)行期間通過(guò)調(diào)用函數(shù)irq_connect_dynamic()注冊(cè),但是需要配置CONFIG_DYNAMIC_INTERRUPTS

下面是一段參考事例:

poYBAGIpdwSADiDfAAA4M7aNlcI543.png

接下來(lái)是直接中斷,實(shí)現(xiàn)方式略有不同,需要用戶(hù)調(diào)用IRQ_DIRECT_CONNECT:

pYYBAGIpdvyARR9IAABA8_gY0GI001.png

Zephyr的零延時(shí)中斷

最后聊聊零延時(shí)中斷,上文說(shuō)過(guò),零延時(shí)中斷的類(lèi)型可以是直接中斷也可以是常規(guī)中斷,換句話(huà)說(shuō),他的實(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)然需要通過(guò)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)衡利弊,各取所好了。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 中斷系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    96

    瀏覽量

    61406

原文標(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)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    恩智浦分享Zephyr調(diào)試技巧

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

    51單片機(jī)的中斷號(hào)對(duì)應(yīng)的中斷類(lèi)型介紹

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

    串口中斷實(shí)際操作是怎樣的?

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

    Zephyr與FreeRTOS實(shí)時(shí)性測(cè)試比較

    1、Zephyr與FreeRTOS實(shí)時(shí)性測(cè)試比較分析用Rhealstone基準(zhǔn)程序方法,分別測(cè)試Zephyr和FreeRTOS兩個(gè)RTOS的六個(gè)實(shí)時(shí)性能指標(biāo),發(fā)現(xiàn)Zephyr指標(biāo)較差??紤]到任務(wù)切換
    發(fā)表于 08-19 16:12

    vxworks中斷服務(wù)程序

    中斷服務(wù)程序用來(lái)處理來(lái)自硬件的中斷,是設(shè)備驅(qū)動(dòng)程序的重要組成部分。為及時(shí)響應(yīng)外部中斷,防止中斷丟失.中斷
    發(fā)表于 06-27 11:09 ?1559次閱讀

    WindowsCE異常和中斷服務(wù)程序

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

    51單片機(jī)有幾個(gè)中斷?單片機(jī)的中斷號(hào)對(duì)應(yīng)的中斷類(lèi)型說(shuō)明

    51單片機(jī)通常有5個(gè)中斷,當(dāng)中斷發(fā)生時(shí),程序會(huì)跳到相應(yīng)的中斷服務(wù)程序去執(zhí)行。為了區(qū)別不同的中斷,引入了
    發(fā)表于 08-06 17:34 ?5次下載
    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'>類(lèi)型</b>說(shuō)明

    中斷時(shí)間間隔的中斷服務(wù)程序?qū)崿F(xiàn)免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是中斷時(shí)間間隔的中斷服務(wù)程序?qū)崿F(xiàn)免費(fèi)下載。
    發(fā)表于 08-06 17:34 ?1次下載
    <b class='flag-5'>中斷</b>時(shí)間間隔的<b class='flag-5'>中斷</b><b class='flag-5'>服務(wù)</b>程序?qū)崿F(xiàn)免費(fèi)下載

    淺析Zephyr在ESP32上的啟動(dòng)流程

    理解Zephyr在一款soc上的啟動(dòng)流程,有利于分析和調(diào)試開(kāi)機(jī)過(guò)程卡死,驅(qū)動(dòng)異常等的問(wèn)題。因此在上手一款新的soc時(shí)掌握Zephyr在其上面的啟動(dòng)流程非常必要。本文對(duì)Zephyr在ESP32上的啟動(dòng)
    的頭像 發(fā)表于 06-07 17:04 ?6028次閱讀

    淺析Zephyr應(yīng)用的代碼結(jié)構(gòu)中的自定義驅(qū)動(dòng)

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

    微機(jī)原理——8086中斷類(lèi)型以及中斷向量表、中斷響應(yīng)、中斷返回

    這里寫(xiě)目錄標(biāo)題先驗(yàn)知識(shí)回顧控制寄存器回顧1、8086中斷類(lèi)型1、外部可屏蔽中斷2、外部不可屏蔽中斷3、除法錯(cuò)中斷4、單步
    發(fā)表于 11-24 16:51 ?16次下載
    微機(jī)原理——8086<b class='flag-5'>中斷</b><b class='flag-5'>類(lèi)型</b>以及<b class='flag-5'>中斷</b>向量表、<b class='flag-5'>中斷</b>響應(yīng)、<b class='flag-5'>中斷</b>返回

    實(shí)際中斷處理

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

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

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

    單片機(jī)有哪些中斷類(lèi)型

    單片機(jī)中斷是指在單片機(jī)執(zhí)行程序的過(guò)程中,當(dāng)外部設(shè)備或內(nèi)部條件發(fā)生某個(gè)特定事件時(shí),能夠暫停當(dāng)前正在執(zhí)行的程序,轉(zhuǎn)而去執(zhí)行一個(gè)特定的服務(wù)程序(稱(chēng)為中斷服務(wù)程序或
    的頭像 發(fā)表于 10-17 18:12 ?2407次閱讀

    深入解析Zephyr RTOS的技術(shù)細(xì)節(jié)

    Zephyr是一個(gè)針對(duì)資源受限設(shè)備優(yōu)化的小型、可縮放、多體系架構(gòu)實(shí)時(shí)操作系統(tǒng)(RTOS)。Zephyr由Linux基金會(huì)維護(hù)[1],是一個(gè)以構(gòu)建業(yè)界最佳的RTOS為目標(biāo)的開(kāi)源合作項(xiàng)目。近年來(lái)
    的頭像 發(fā)表于 10-22 16:47 ?2269次閱讀
    深入解析<b class='flag-5'>Zephyr</b> RTOS的技術(shù)細(xì)節(jié)