女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

RT-Thread記錄(九、RTT中斷處理與階段小結(jié))

矜辰所致 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2022-06-24 10:25 ? 次閱讀
RT-Thread 內(nèi)核部分最后一個點 中斷管理,順帶著對前面所學知識做個小結(jié)。

目錄

前言
一、RT-Thread 中斷管理
1.1 Cortex-M架構(gòu)
1.1.1 內(nèi)核的中斷管理
1.1.2 嵌套向量中斷控制器
1.1.3 中斷向量表
1.1.4 中斷測試
1.2 RISC-V 架構(gòu)
(待更新……)
1.3 中斷管理API
二、RT-Thread 記錄階段小結(jié)
結(jié)語

前言

在前面的內(nèi)核基礎學習記錄中,我們所有的示例都沒有使用中斷,實際項目中斷使用不可或缺,本文我們就來看看在 RT-Thread 中是如何響應中斷,如何處理中斷的。

(說明一下,此時我們還沒有學習 RT-Thread 的設備模型。)

本 RT-Thread 專欄記錄的開發(fā)環(huán)境:
RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發(fā)環(huán)境 及 配合CubeMX開發(fā)快速上手)
RT-Thread記錄(二、RT-Thread內(nèi)核啟動流程 — 啟動文件和源碼分析
RT-Thread 內(nèi)核篇系列博文鏈接:
RT-Thread記錄(三、RT-Thread 線程操作函數(shù)及線程管理與FreeRTOS的比較)
RT-Thread記錄(四、RT-Thread 時鐘節(jié)拍和軟件定時器
RT-Thread記錄(五、RT-Thread 臨界區(qū)保護)
RT-Thread記錄(六、IPC機制之信號量、互斥量和事件集)
RT-Thread記錄(七、IPC機制之郵箱、消息隊列)
RT-Thread記錄(八、理解 RT-Thread 內(nèi)存管理)

一、RT-Thread 中斷管理

本節(jié)主要目的在于說明在使用 RT-Thread 操作系統(tǒng)的時候如何處理中斷,中斷來了我們怎么寫程序。

中斷大家都不陌生,當 CPU 正在處理內(nèi)部數(shù)據(jù)時,外界發(fā)生了緊急情況,要求 CPU 暫停當前的工作轉(zhuǎn)去處理這個 異步事件。處理完畢后,再回到原來被中斷的地址,繼續(xù)原來的工作,這樣的過程稱為中斷。

中斷是一種異常!

RT-Thread 中斷管理中,將中斷處理程序分為中斷前導程序、用戶中斷服務程序、中斷后續(xù)程序三部分:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_1,color_FFFFFF,t_70,g_se,x_16

RT-Thread 雖然提供了統(tǒng)一的中斷管理接口,但實際上在不同的架構(gòu)上,會有一些區(qū)別。

1.1 Cortex-M架構(gòu)

在官網(wǎng)是用的Cortex-M 架構(gòu)的內(nèi)核作為說明,而本專欄記錄也是使用的 Cortex-M 架構(gòu)的 STM32,要了解 RT-Thread 在 Cortex-M 內(nèi)核上的中斷管理,就得首先知道 Cortex-M 內(nèi)核的中斷管理。

1.1.1 內(nèi)核的中斷管理

Cortex-M 內(nèi)核的中斷管理在《Cortex-M3與Cortex-M4權(quán)威指南》這個文檔里有詳細的說明。
在我的博文中,我已經(jīng)多次提及這個文檔了,實際上我們學習芯片所有的資料官方都有,官方的資料不僅全還權(quán)威,只不過大部分人都忽略了官方手冊。

所以不管是學習什么芯片,官方手冊才是我建議的第一參考資料!!

說明一下類似于這種官方文檔,官網(wǎng)可以下載,還有一般正規(guī)點的開發(fā)板比如原子,野火,百問科技都會有配套資料里面都能找到。

在我講 RTOS任務調(diào)度原理解析 的文章中也有對于 Cortex-M架構(gòu) 內(nèi)核中斷管理的說明:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_15,color_FFFFFF,t_70,g_se,x_16

只要是基于 Comtex-M 內(nèi)核,那么都得以內(nèi)核的中斷管理為標準,RT-Thread也不例外,所有 RT-Thread 中斷管理的相關內(nèi)容在上面推薦博文都能找到,可以結(jié)合官方說明查看。

1.1.2 嵌套向量中斷控制器

在Cortex-M 內(nèi)核中,有一個專門的中斷控制器 NVIC(嵌套向量中斷控制器),支持中斷嵌套功能。

當一個中斷觸發(fā)并且系統(tǒng)進行響應時,處理器硬件會將當前運行位置的上下文寄存器自動壓入中斷棧中,這部分的寄存器包括 PSR、PC、LR、R12、R3-R0 寄存器(在上面推薦博文有過說明)。

NVIC 這個我們就很熟悉了,在 RT-Thread 操作系統(tǒng)上也是使用的內(nèi)核的 NVIC 作為中斷管理,在系統(tǒng)啟動的時候肯定會有 NVIC 的初始化,我們看一下 NVIC在哪里初始化的,如下圖:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

NVIC 設置的問題我們這里就不過多的說明了,這個就算不明白網(wǎng)上資料也很多。

1.1.3 中斷向量表

在 Cortex-M 內(nèi)核上,所有中斷都采用中斷向量表的方式進行處理,即當一個中斷觸發(fā)時,處理器將直接判定是哪個中斷源,然后直接跳轉(zhuǎn)到相應的固定位置進行處理,每個中斷服務程序必須排列在一起放在統(tǒng)一的地址上(這個地址必須要設置到 NVIC 的中斷向量偏移寄存器中)。

還是在系統(tǒng)啟動的時候,我們講到過啟動文件里面有中斷向量表,對應著芯片上所有的異常:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

如果使用過 STM32CubeMX 開發(fā)的朋友應該知道,生成的工程中會有stm32xxxx_it.cstm32xxxx_it.h 這兩個文件,在這個文件中就是我們 用戶 中斷處理的函數(shù),和中斷向量表是一一對應的,如下圖所示:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_15,color_FFFFFF,t_70,g_se,x_16

如果使能了中斷不實現(xiàn)中斷響應函數(shù),發(fā)生中斷后都會進入 Default_Handler這個死循環(huán)。

在使用 RT-Thread 的時候也需要遵循這個中斷向量表,雖然我們之前的講解中,我們自己并沒有使用中斷作為示例,但是有些中斷還是需要用到,而且系統(tǒng)已經(jīng)實現(xiàn)了。

比如我們講到過的滴答定時器的的中斷響應函數(shù):

pYYBAGK1IKmALlc3AAAirBgZCO8510.png

再比如我們打印日志的串口1:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_14,color_FFFFFF,t_70,g_se,x_16

不僅如此,我們可以通過跳轉(zhuǎn)的方式查看 RT-Thread 都做了哪些中斷函數(shù)的處理,比如 GPIO外部中斷:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_13,color_FFFFFF,t_70,g_se,x_16

總的來說,RT-Thread 在 Cortex-M 內(nèi)核上的管理還是遵從內(nèi)核本身的 NVIC,所有中斷都采用中斷向量表的方式進行處理,用戶如果想要響應中斷,直接實現(xiàn)中斷向量表中定義的函數(shù)即可。

1.1.4 中斷測試

通過上面的學習,我們已經(jīng)知道了如何在 RT-Thread 中使用中斷處理,其實說白了和裸機一樣,自己實現(xiàn)中斷向量表中的中斷響應函數(shù)。

基本上學習 STM32CubeMX 生成的stm32xxxx_it.c中的方式一樣就可以,我們簡單的來測試一下:

使能一個定時器,開啟定時器中斷,每次中斷發(fā)生打印系統(tǒng)當前 tick 的值

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

OK!一切正常!

我們?nèi)绻褂?RT-Thread Nano 版本,那么這就是我們常用的 中斷處理方式,后面我們會學習到RT-Thread 的設備模型,我們或許不需要自己去實現(xiàn)這些中斷響應函數(shù),但是并不代表我們不是按照內(nèi)核的中斷管理方式來進行,而是系統(tǒng)已經(jīng)在底層為我們實現(xiàn)了這些函數(shù)。

1.2 RISC-V 架構(gòu)

(待更新……)

( 對于 RISC-V 架構(gòu)博主還在學習過程中,需要等等!= =!)

1.3 中斷管理API

雖然我們在 Cortex-M 內(nèi)核上有些接口并沒有實現(xiàn),而且我們已經(jīng)知道了 程序中斷的處理方式了,但是這里也記錄一下中斷管理對應的API函數(shù),方便以后使用其他架構(gòu)也需要用到。

RT-Thread 把中斷和異常封裝的抽象接口如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_1,color_FFFFFF,t_70,g_se,x_16

其中 中斷鎖API 我們在將臨界區(qū)的時候,已經(jīng)講到過;

中斷通知,我們以前也有接觸到,只是沒有加以說明,在進入中斷的時候,RT-Thread就會調(diào)用,比如滴答定時器中斷響應函數(shù),和我們用來看 LOG 的串口1:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

這里記錄API,還是老規(guī)矩:

/*
中斷服務程序掛接  Cortex-M上沒有
參數(shù) 	描述
vector 	vector 是掛載的中斷號
handler 	新掛載的中斷服務程序
param 	param 會作為參數(shù)傳遞給中斷服務程序
name 	中斷的名稱
返回 	
return 	掛載這個中斷服務程序之前掛載的中斷服務程序的句柄
*/
rt_isr_handler_t rt_hw_interrupt_install(int vector,
                                        rt_isr_handler_t  handler,
                                        void *param,
                                        char *name);
/*
屏蔽中斷源  Cortex-M上沒有
參數(shù) 	描述
vector 	要屏蔽的中斷號
*/
void rt_hw_interrupt_mask(int vector);
/*
打開被屏蔽的中斷源  Cortex-M上沒有
參數(shù) 	描述
vector 	要打開屏蔽的中斷號
*/
void rt_hw_interrupt_umask(int vector);

/*
中斷鎖
全局中斷關  
返回值 	描述
中斷狀態(tài) 	rt_hw_interrupt_disable 函數(shù)運行前的中斷狀態(tài)
*/
rt_base_t rt_hw_interrupt_disable(void);
/*
中斷鎖
全局中斷開  與上面函數(shù)配合使用 
參數(shù) 	描述
level 	前一次 rt_hw_interrupt_disable 返回的中斷狀態(tài)
*/
void rt_hw_interrupt_enable(rt_base_t level);

/*
中斷通知
進入
退出
詳細使用見上文例子
*/
void rt_interrupt_enter(void);
void rt_interrupt_leave(void);
/*
獲取中斷深度
返回 	描述
0 		當前系統(tǒng)不處于中斷上下文環(huán)境中
1 		當前系統(tǒng)處于中斷上下文環(huán)境中
大于 1 	當前中斷嵌套層次
*/
rt_uint8_t rt_interrupt_get_nest(void);

二、RT-Thread 記錄階段小結(jié)

到目前為止,RT-Thread 專欄已經(jīng)有了 9篇文章(算上本文),我們來看一下目錄:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

回頭來看一下我在第一篇文章中對 RT-Thread Nano 版本的介紹:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

我們內(nèi)核的線程管理,時間管理,中斷管理,內(nèi)存管理,和線程同步與通信的IPC機制都已經(jīng)記錄完了,這不就是我們已經(jīng)完成了對 RT-Thread Nano 的學習記錄。

確實到這篇文章為止,我們確實是掌握了 RT-Thread Nano 所有的知識,我們已經(jīng)可以使用 RT-Thread Nano 實現(xiàn)一些項目了。

雖然我們的專欄記錄還不止于此,但是我還是注重我們學習是為了快速的應用,所以我們標準版后期的組件,設備等一些知識先等一小會,先更新一篇實戰(zhàn)篇,使用 RT-Thread Nano 完成一個實際的小項目。

結(jié)語

本文的很多知識在以前相關博文都有過說明記錄,所以本文簡單過了一遍 RT-Thread 中斷的處理,通過本文學習,我們已經(jīng)學會在 Cortex-M架 上使用 RT-Thread 時候的中斷處理。

然后同時也說明了一下,我們前面的記錄等于把 RT-Thread Nano 所有的知識全部學過了一遍,我們已經(jīng)可以使用 RT-Thread Nano 做一些實際的應用。

所以下面一篇博文博主會更新一篇實例,在 STM32L051 上使用 RT-Thread Nano 做一個實際的應用。

(想想還有點小激動,終于要實戰(zhàn)用起來!~ ~)

好了,本文就到這里,謝謝大家!

審核編輯:湯梓紅

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

    關注

    3

    文章

    1408

    瀏覽量

    41089
  • 中斷
    +關注

    關注

    5

    文章

    904

    瀏覽量

    42514
  • RTT
    RTT
    +關注

    關注

    0

    文章

    66

    瀏覽量

    17523
  • RT-Thread
    +關注

    關注

    32

    文章

    1368

    瀏覽量

    41500
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    2025 RT-Thread全球技術大會議程正式發(fā)布!

    RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技術大會)是聚焦基礎軟件技術創(chuàng)新與實踐的嵌入式技術盛會,持續(xù)推動技術價值轉(zhuǎn)化
    的頭像 發(fā)表于 05-27 19:28 ?261次閱讀
    2025 <b class='flag-5'>RT-Thread</b>全球技術大會議程正式發(fā)布!

    RT-Thread審核團招募: 深度參與開源RTOS社區(qū)治理與演進

    全球開發(fā)者招募:RT-Thread審核團(ReviewTeam)正式開放申請!在開源的世界里,代碼審查(CodeReview)是保證軟件質(zhì)量、促進技術交流的關鍵環(huán)節(jié)。RT-Thread作為全球領先
    的頭像 發(fā)表于 05-21 18:02 ?441次閱讀
    <b class='flag-5'>RT-Thread</b>審核團招募: 深度參與開源RTOS社區(qū)治理與演進

    如何將RT-Thread移植到NXP MCUXPressoIDE上

    RT-Thread默認支持的IDE只有IAR 和 Keil, 那如何將RT-Thread移植到NXP MCUXPressoIDE上呢?本文內(nèi)容比較簡單但稍有瑣碎,希望對有需要的小伙伴有所幫助。
    的頭像 發(fā)表于 02-13 10:37 ?1718次閱讀
    如何將<b class='flag-5'>RT-Thread</b>移植到NXP MCUXPressoIDE上

    從開源中來到開源中去-RT-Thread北京社區(qū)篇

    RT-Thread今年全域推行不同區(qū)域社區(qū)網(wǎng),通過建立區(qū)域社區(qū)網(wǎng),構(gòu)建更加緊密聯(lián)系的開源社區(qū),實現(xiàn)更廣泛的開源資源共享,讓更多的RT-Thread開發(fā)者受益。今年8月份RT-Thread正式啟動北京
    的頭像 發(fā)表于 11-29 01:05 ?393次閱讀
    從開源中來到開源中去-<b class='flag-5'>RT-Thread</b>北京社區(qū)篇

    RT-Thread上CAN實踐

    開箱測試RT-Thread官方已完成了對英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進行RT-ThreadCan移植。接下來我們要完成CAN_FD的驅(qū)動移植,并正常啟動RT-T
    的頭像 發(fā)表于 11-13 01:03 ?1883次閱讀
    <b class='flag-5'>RT-Thread</b>上CAN實踐

    開源共生 商業(yè)共贏 | RT-Thread 2024開發(fā)者大會報名啟動!

    親愛的RT-Thread開發(fā)者我們很高興地宣布,一年一度的RDC(RT-ThreadDeveloperConference,RT-Thread開發(fā)者大會)正式啟動報名!2024RT-Threa
    的頭像 發(fā)表于 10-29 08:06 ?854次閱讀
    開源共生 商業(yè)共贏 | <b class='flag-5'>RT-Thread</b> 2024開發(fā)者大會報名啟動!

    【成都】9月21日RT-Thread巡回線下培訓-OpenMV機器視覺

    親愛的RT-Thread社區(qū)成員們:RT-Thread24年全球巡回培訓將覆蓋超10座城市及國家,為開發(fā)者提供一個深入學習RT-Thread嵌入式開發(fā),以及和工程師們線下交流的絕佳機會。2024年
    的頭像 發(fā)表于 09-13 08:09 ?1419次閱讀
    【成都】9月21日<b class='flag-5'>RT-Thread</b>巡回線下培訓-OpenMV機器視覺

    rt-thread studio手動導入bsp失敗的原因?怎么處理

    rt-thread studio 手動導入bsp 失敗。 版本: 2.2.8 構(gòu)建ID: 202405200930 導入的bsp 是直接從rt-thread 代碼倉庫下載的
    發(fā)表于 09-13 06:45

    【大連】9月7日RT-Thread巡回線下培訓-OpenMV機器視覺

    親愛的RT-Thread社區(qū)成員們:2024年RT-Thread全球開發(fā)者線下培訓拉開帷幕啦!24年全球巡回培訓將覆蓋超10座城市及國家,為開發(fā)者提供一個深入學習RT-Thread嵌入式開發(fā)的絕佳
    的頭像 發(fā)表于 09-01 08:02 ?2998次閱讀
    【大連】9月7日<b class='flag-5'>RT-Thread</b>巡回線下培訓-OpenMV機器視覺

    瑞薩電子全球VP蒞臨RT-Thread指導交流

    近日,瑞薩電子高級副總裁関俊彥(ToshihikoSeki)先生及瑞薩電子嵌入式處理器事業(yè)部市場總監(jiān)沈清女士一行拜訪了上海睿賽德電子科技有限公司。RT-Thread創(chuàng)始人兼首席執(zhí)行官熊譜翔先生及其
    的頭像 發(fā)表于 08-30 13:11 ?797次閱讀
    瑞薩電子全球VP蒞臨<b class='flag-5'>RT-Thread</b>指導交流

    2024 RT-Thread全球巡回 線下培訓火熱來襲!

    親愛的RT-Thread社區(qū)成員們:我們非常高興地宣布,2024年RT-Thread全球開發(fā)者線下培訓即將拉開帷幕!24年全球巡回培訓將覆蓋超10座城市及國家,為開發(fā)者提供一個深入學習RT-Thread嵌入式開發(fā)的絕佳機會。
    的頭像 發(fā)表于 08-07 08:35 ?2404次閱讀
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓火熱來襲!

    【好書推薦】RT-Thread設備驅(qū)動開發(fā)指南

    近年來國內(nèi)芯片產(chǎn)業(yè)和物聯(lián)網(wǎng)產(chǎn)業(yè)的快速崛起,行業(yè)發(fā)展迫切需要更多人才,尤其需要掌握嵌入式操作系統(tǒng)等底層技術的人才。隨著RT-Thread被更廣泛地應用于行業(yè)中,開發(fā)者對嵌入式驅(qū)動開發(fā)的需求越來越
    的頭像 發(fā)表于 08-01 08:35 ?1151次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>設備驅(qū)動開發(fā)指南

    RT-Thread 新里程碑達成——GitHub Star 破萬!

    RT-Thread實時操作系統(tǒng)開源項目在GitHub上的star數(shù)量突破一萬!截止發(fā)文,RT-Thread作為實時操作系統(tǒng)在業(yè)界Star數(shù)量排名第一!倉庫地址:https://github.com
    的頭像 發(fā)表于 07-04 08:35 ?693次閱讀
    <b class='flag-5'>RT-Thread</b> 新里程碑達成——GitHub Star 破萬!

    基于 RT-Thread專業(yè)版的EtherCAT主站方案

    (一)方案介紹本方案基于RT-Thread專業(yè)版,在RT-Thread端集成EtherCAT主站協(xié)議,通過EtherCAT對伺服電機或遠程IO進行實時控制,具備傳輸速度快,實時性高,擴展設備靈活等
    的頭像 發(fā)表于 06-19 08:35 ?1671次閱讀
    基于 <b class='flag-5'>RT-Thread</b>專業(yè)版的EtherCAT主站方案

    開發(fā)者分享 | 基于先楫RT-Thread BSP,使用CLion開發(fā)應用

    本期開發(fā)者:朱彥祖RT-Thread資深工程師,HPM6700/6400元老級開發(fā)者及骨灰級用戶,先輯生態(tài)社區(qū)常駐優(yōu)秀開發(fā)者,江湖人稱杭州吳彥祖。背景最近在使用先輯HPM6750開發(fā)一款運動控制器
    的頭像 發(fā)表于 06-07 08:17 ?3591次閱讀
    開發(fā)者分享 | 基于先楫<b class='flag-5'>RT-Thread</b> BSP,使用CLion開發(fā)應用