FreeRTOS學習筆記——FreeRTOS中斷管理

精華總結:

中斷優先級0為最高,任務優先級0為最低

中斷優先級分組中為方便rtos管理4bit全部設置成搶占優先級

32單片機的中斷管理是由3個寄存器完成(名字忽略,具體功能忽略),三個寄存器都是32bit,通過移位可操作設置寄存器上的bit位,比如可設置pendsv中斷和systick中斷優先級

最終,pendsv與systick被設置成15,pendsv與systick切換任務的時候不會影響到其它中斷的觸發(比如外部中斷)

上面三個寄存器是設置中斷優先級;還有三個寄存器用于屏蔽中斷,freertos使用了寄存器BASEPRI用于中斷屏蔽,為0x50代表關閉(也可以說屏蔽)5-15優先級的中斷,為0代表不關閉(屏蔽)任何中斷(就是這個寄存器規定了freertos只能控制5-15優先級的中斷),如果為0x60,則就是6-15

1、中斷優先級分組全部設置成搶占優先級->是為了方便freertos管理中斷

即:HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);

2、你的中斷優先級設置必須是5-15(當然也可以為0-4,但這樣不受控了)

3、freertos只能控制5-15優先級的中斷

4、0-4的中斷因為rtos不可控,所以禁止0-4的中斷調用rtos的api函數,因此設置搶占優先級必須≥5才行,如果你設置成了4則rtos控制不了則無法控制別人搶占你或者你搶占別人

什么是中斷?

簡介:讓CPU打斷正常運行的程序,轉而去處理緊急的事件(程序),就叫中斷

例:

中斷執行機制,可簡單概括為三步:

中斷優先級分組設置

ARM Cortex-M 使用了 8 位寬的寄存器來配置中斷的優先等級,這個寄存器就
是中斷優先級配置寄存器,因此最大中斷的優先級配置范圍位 0~255。但是芯片廠商一般用不
完這些資源,對于 STM32,只用到了中斷優先級配置寄存器的高 4 位[7:4],低四位[3:0]取零處
,因此 STM32 提供了最大 2^4=16 級的中斷優先等級

中斷優先級配置寄存器的值與對應的優先等級成反比,即中斷優先級配置寄存器的值越小,
中斷的優先等級越高

STM32 的中斷優先級可以分為搶占優先級和子優先級,搶占優先級和子優先級的區別如下:

搶占優先級: 搶占優先級高的中斷可以打斷正在執行但搶占優先級低的中斷,即中斷嵌套。

子優先級: 搶占優先級相同時,子優先級高的中斷不能打斷正在執行但子優先級低的中的
中斷
,即子優先級不支持中斷嵌套。??

STM32 中每個中斷的優先級就由搶占優先級和子優先級共同組成,使用中斷優先級配置寄
存器的高 4 位來配置搶占優先級和子優先級,那么中斷優先級配置寄存器的高 4 位是如何分配
設置搶占優先級和子優先級的呢?

一共有 5 種分配方式,對應著中斷優先級分組的 5 個組

通過調用函數HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4)即可完成設置

老生常談,FreeRTOS只用分組4,因為這樣方便打斷,不用考慮子優先級了

中斷優先級0為最高,任務優先級0為最低

中斷相關寄存器

三個系統中斷優先級配置寄存器:

分別為 SHPR1、 SHPR2、 SHPR3

SHPR1寄存器地址:0xE000ED18

SHPR2寄存器地址:0xE000ED1C

SHPR3寄存器地址:0xE000ED20

表出自:《Cortex M3權威指南(中文)》第286頁

1. SHPR1
SHPR1 寄存器的地址為 0xE000ED18, 用于配置 MemManage、 BusFault、 UsageFault 的中
斷優先級, 各比特位的功能描述如下表所示:

2. SHPR2
SHPR2 寄存器的地址為 0xE000ED1C,用于配置 SVCall 的中斷優先級, 各比特位的功能
描述如下表所示:

3. SHPR3
SHPR3 寄存器的地址為 0xE000ED20,用于配置 PendSV、 SysTick 的中斷優先級, 各比特
位的功能描述如下表所示:

FreeRTOS 在配置 PendSV 和 SysTick 中斷優先級的時,就使用到了 SHPR3 寄存器

FreeRTOS 如何配置 PendSV 和 SysTick 中斷優先級:

PendSV和SysTick設置最低優先級

設置最低:保證系統任務切換不會阻塞系統其他中斷的響應

三個中斷屏蔽寄存器:

分別為 PRIMASK、 FAULTMASK 和BASEPRI

FreeRTOS所使用的中斷管理就是利用的BASEPRI這個寄存器

BASEPRI:屏蔽優先級低于某一個閾值的中斷

比如: BASEPRI設置為0x50,代表中斷優先級在5~15內的均被屏蔽,0~4的中斷優先級正常執行

建議參考知識庫中:GPT對話知識庫——FreeRTOS中寄存器BASEPRI的作用

BASEPRI:屏蔽優先級低于某一個閾值的中斷,當設置為0時,則不關閉任何中斷

關中斷程序示例:

#define portDISABLE_INTERRUPTS()vPortRaiseBASEPRI()static portFORCE_INLINE void vPortRaiseBASEPRI( void ){uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;__asm{msr basepri, ulNewBASEPRIdsbisb}}#define configMAX_SYSCALL_INTERRUPT_PRIORITY( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY5/* FreeRTOS可管理的最高中斷優先級 */

中斷優先級在5 ~ 15的全部被關閉

開中斷程序示例:

#define portENABLE_INTERRUPTS()vPortSetBASEPRI( 0 )static portFORCE_INLINE void vPortSetBASEPRI( uint32_t ulBASEPRI ){__asm{msr basepri, ulBASEPRI}}

FreeRTOS中斷管理就是利用BASEPRI寄存器實現的

當BASEPRI設置為0x50時:

在中斷服務函數中調度FreeRTOS的API函數需注意:

1、中斷服務函數的優先級需在FreeRTOS所管理的范圍內

2、在中斷服務函數里邊需調用FreeRTOS的API函數,必須使用帶“FromISR”后綴的函數

參考鏈接:

https://blog.csdn.net/weixin_44639540/article/details/129007015

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716162.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716162.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信小程序云開發教程——墨刀原型工具入門(文件設置+編輯組件)

引言 作為一個小白&#xff0c;小北要怎么在短時間內快速學會微信小程序原型設計&#xff1f; “時間緊&#xff0c;任務重”&#xff0c;這意味著學習時必須把握微信小程序原型設計中的重點、難點&#xff0c;而非面面俱到。 要在短時間內理解、掌握一個工具的使用&#xf…

NOC2023軟件創意編程(學而思賽道)python小高組決賽真題

目錄 下載原文檔打印做題: 軟件創意編程 一、參賽范圍 1.參賽組別:小學低年級組(1-3 年級)、小學高年級組(4-6 年級)、初中組。 2.參賽人數:1 人。 3.指導教師:1 人(可空缺)。 4.每人限參加 1 個賽項。 組別確定:以地方教育行政主管部門(教委、教育廳、教育局) 認…

【風格遷移】StyTr2:引入 Transformer 解決 CNN 在長距離依賴性處理不足和細節丟失問題

StyTr2&#xff1a;引入 Transformer 解決 CNN 在長距離依賴性處理不足和細節丟失問題 提出背景StyTr2 組成StyTr2 架構 提出背景 論文&#xff1a;https://arxiv.org/pdf/2105.14576.pdf 代碼&#xff1a;https://github.com/diyiiyiii/StyTR-2 問題&#xff1a; 傳統的神經…

idea中springboot項目創建后追加依賴

springboot項目創建后追加依賴 前言1、安裝插件editstarters設置->插件 2、進入pom.xml 頁面 前言 在項目創建的時候選擇好依賴創建項目&#xff0c;之后追加依賴不是很方便&#xff0c;介紹一個簡單的使用方法&#xff0c;通過editstarters進行添加 1、安裝插件editstart…

在 Ubuntu 終端輸出不同顏色、粗體、下劃線或其他樣式的字體

嗯。調試時總發現自己打印的調試信息太過普通、單調&#xff0c;于是乎…… Notice 要在終端實現字體的特殊樣式&#xff0c;通常通過使用特殊的控制字符來實現&#xff0c;而不是通過某語言本身的功能來實現。 在大多數終端中&#xff0c;可以使用 ANSI 轉義序列來設置字體的…

CleanMyMac X2024測評深度分析與功能全面介紹

一、軟件概述 CleanMyMac X 是一款強大的Mac清理和優化工具&#xff0c;它可以幫助用戶輕松管理和釋放Mac上的空間&#xff0c;優化系統性能&#xff0c;提高運行速度。這款軟件以其直觀的用戶界面和豐富的功能受到了廣大Mac用戶的歡迎。 CleanMyMac X4.14.6全新版下載如下: …

令牌桶算法和漏桶算法各自的應用場景

令牌桶算法和漏桶算法都是流量控制算法&#xff0c;它們在網絡和系統中有著不同的應用場景&#xff0c;具體如下&#xff1a; 令牌桶算法的應用場景&#xff1a; 網絡流量控制&#xff1a; 令牌桶算法廣泛應用于網絡流量控制中&#xff0c;特別是在網絡設備中&#xff0c;如路…

html基礎標簽+Http請求

文章目錄 目錄 文章目錄 前言 一.網址組成 二.HTTP協議解析 Http 請求報文 報文請求方法 報文頭 Cache-Control 常見緩存控制行為 cookie 解析 Http 響應報文 常見狀態碼 三.域名解析(DNS) DNS域名服務器分類 遞歸查詢 迭代查詢 四.端口號 五.路徑信息 六.Https協議 ?對稱…

第一篇【傳奇開心果系列】Python的自動化辦公庫技術點案例示例:深度解讀Pandas庫

傳奇開心果博文系列 系列博文目錄Python的自動化辦公庫技術點案例示例系列 博文目錄前言一、主要特點和功能介紹二、Series 示例代碼三、DataFrame示例代碼四、數據導入/導出示例代碼五、數據清洗示例代碼六、數據選擇和過濾示例代碼七、數據合并和連接示例代碼八、數據分組和聚…

Linux系統管理:虛擬機 Kali Linux 安裝

目錄 一、理論 1.Kali Linux 二、實驗 1.虛擬機Kali Linux安裝準備階段 2.安裝Kali Linux 2. Kali Linux 更換國內源 3. Kali Linux 設置固定IP 4. Kali Linux 開啟SSH遠程連接 5. MobaXterm遠程連接 Kali Linux 三、問題 1.apt 命令 取代哪些 apt-get命令 一、理論…

《OpenScene: 3D Scene Understanding with Open Vocabularies》閱讀筆記1

傳統的3D場景理解方法依賴于帶標簽的3D數據集,用于訓練一個模型以進行單一任務的監督學習。我們提出了OpenScene,一種替代方法,其中模型在CLIP特征空間中預測與文本和圖像像素共同嵌入的3D場景點的密集特征。這種零樣本方法實現了與任務無關的訓練和開放詞匯查詢。例如,為了…

Phoncent博客:探索AI寫作與編程的無限可能

Phoncent博客&#xff0c;一個名為Phoncent的創新AIGC博客網站&#xff0c;于2023年誕生。它的創始人是莊澤峰&#xff0c;一個自媒體人和個人站長&#xff0c;他在網絡營銷推廣領域有著豐富的經驗。莊澤峰深知人工智能技術在內容創作和編程領域的潛力和創造力&#xff0c;因此…

有趣的CSS - 閃爍的鴻星爾克文字招牌效果

大家好&#xff0c;我是 Just&#xff0c;這里是「設計師工作日常」&#xff0c;今天分享的是利用 animation 動畫實現一個閃爍的霓虹燈文字效果。 《有趣的css》系列最新實例通過公眾號「設計師工作日常」發布。 目錄 整體效果核心代碼html 代碼css 部分代碼 完整代碼如下html…

第十一屆藍橋杯省賽第二場C++ B組 / C組《成績統計》(c++)

1.題目說明 小藍給學生們組織了一場考試&#xff0c;卷面總分為100 分&#xff0c;每個學生的得分都是一個 0 到 100 的整數。 如果得分至少是 60 分&#xff0c;則稱為及格。 如果得分至少為 85 分&#xff0c;則稱為優秀。 請計算及格率和優秀率&#xff0c;用百分數表示…

使用Spark探索數據

需求分析 使用Spark來探索數據是一種高效處理大規模數據的方法&#xff0c;需要對數據進行加載、清洗和轉換&#xff0c;選擇合適的Spark組件進行數據處理和分析。需求分析包括確定數據分析的目的和問題、選擇合適的Spark應用程序和算法、優化數據處理流程和性能、可視化和解釋…

【嵌入式實踐】【芝麻】【設計篇-3】從0到1給電動車添加指紋鎖:項目整體規劃

0. 前言 該項目是基于stm32F103和指紋模塊做了一個通過指紋鎖控制電動車的小工具。支持添加指紋、刪除指紋&#xff0c;電動車進入P檔等待時計時&#xff0c;計時超過5min則自動鎖車&#xff0c;計時過程中按剎車可中斷P檔狀態&#xff0c;同時中斷鎖車計時。改項目我稱之為“芝…

Pycharm下如何生成exe軟件

第一步 下載pyinstaller pip install pyinstaller 對pyinstaller第二步 使用pyinstaller cmd切換到項目目錄執行命令:pyinstaller --add-data “./templates;templates” 入口文件名.py

【語音識別】- 幾個主流模型

文章目錄 1. Wav2Vec 2.02. Whisper2. WeNet1. Wav2Vec 2.0 由Facebook AI Research(FAIR)于2020年提出的在語音方向里具有一定影響力的預訓練模型。 論文地址:https://arxiv.org/pdf/2006.11477.pdf 項目地址:https://github.com/pytorch/fairseq 訓練數據:62萬小時未…

基于Mahout實現K-Means聚類

需求分析 需要對數據集進行預處理&#xff0c;選擇合適的特征進行聚類分析&#xff0c;確定聚類的數量和初始中心點&#xff0c;調用Mahout提供的K-Means算法進行聚類計算&#xff0c;評估聚類結果的準確性和穩定性。同時&#xff0c;需要對Mahout的使用和參數調優進行深入學習…

頂會ICLR2024論文Time-LLM:基于大語言模型的時間序列預測

文青松 松鼠AI首席科學家、AI研究院負責人 美國佐治亞理工學院(Georgia Tech)電子與計算機工程博士&#xff0c;人工智能、決策智能和信號處理方向專家&#xff0c;在松鼠AI、阿里、Marvell等公司超10年的技術和管理經驗&#xff0c;近100篇文章發表在人工智能相關的頂會與頂刊…