FreeRTOS硬件中斷發生時的現場

????????在FreeRTOS中,當硬件中斷發生時,當前正在運行的任務會立即被掛起,處理器會跳轉到中斷相關的中斷服務程序中,在中斷服務程序執行期間,遵循以下規則:

1、中斷獨占CPU,ISR擁有最高的執行優先級,在它執行完畢并顯示退出之前,沒有任何任務能夠得到CPU時間片來運行,處理器完全用于執行ISR代碼,也就是說,任務和裸奔時的while循環一樣,內部怎么調度,那是他們自己的事兒,中斷一旦來臨,他們都靠邊站;

2、中斷嵌套,如果系統允許中斷嵌套,并且發生了更高級的中斷,那么當前ISR會被新的中斷搶占,這和裸奔沒啥區別;

3、ISR中觸發調度,中斷服務程序執行完畢以后,會發生哪些事情呢?主要取決于以下幾個方面:

(1)、中斷是否觸發了任務切換,也就是說,在中斷中,是否調用了portYIELD_FROM_ISR()接口;

(2)、FreeRTOS調度模式的配置,也就是configUSE_PREEMPTION的配置,如果配置為1,則為搶占式,如果配置為0,則為協作式,一班情況下,都是搶占式;

(3)、是否有更高優先級的任務就緒;

以下是中斷退出后系統調度的詳細流程和規則:

(1)、中斷退出時的核心決策點

? ? ? ? 中斷退出代碼(通常是portYIELD_FROM_ISR(xHigherPriorityTaskWoken或者是portEND_SWITCHING_ISR(xHigherPriorityTaskWoken)),是調度的觸發點;

? ? ? ? 該宏的參數xHigherPriorityTaskWoken的值是關鍵的輸入;

(2)、調度邏輯

? ? ? ? 當xHigherPriorityTaskWoken的值為true時,退出中斷后,處理器不會返回到被中斷的任務,調度器會檢查就緒的任務列表,選擇優先級最高的就緒任務運行;

? ? ? ? 當xHigherPriorityTaskWoken的值為false時,退出中斷后,處理器會返回到被中斷的任務繼續執行,但是同時調度器會檢查就緒的任務列表,在下一個調度點,切換到更高優先級的任務上;

簡單的來說:這有點兒類似于籃球場上的換人,中斷退出的那一刻(類似于罰球時刻),系統會看中斷服務程序有沒有要求主動“換人”,如果portYIELD_FROM_ISR(pdTRUE),則表示主動要求“換人”,馬上就會換上優先級最高的就緒任務,否則,只能在下一個調度點(類似于暫停等停球點)換上優先級最高的就緒任務;

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

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

相關文章

kotlin語法和特性分析

核心設計哲學: 簡潔 (Concise): 減少樣板代碼(如 getter/setter、類型推導),讓代碼表達更直接。安全 (Safe): 從語言層面設計來避免常見錯誤(尤其是空指針異常)。互操作性 (Interoperable): 與 Java 無縫集…

二進制數本身沒有默認的有符號或無符號解釋

文章目錄1. ?**?硬件層面:CPU 不區分有符號/無符號?**?2. ?**?解釋權在程序員手中?**?3. ?**?默認傾向性(非絕對規則)?**?4. ?**?如何避免混淆??**?5. ?**?經典示例?**?總結1. **解釋為無符號數(U…

(AI) Server (Hardware) Architecture

Overview by Atlas T800 Just found a good product demo. from Huawei for its Atlas T800, here 計算產品3D展示 First turn off all modules and we can delve into how this server is organized. Core This is an AI server with 910B as its main feature, which is …

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 微博評論數據可視化分析-用戶評論詞云圖實現

大家好,我是java1234_小鋒老師,最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程,持續更新中,計劃月底更新完,感謝支持。今天講解微博評論數據可視化分析-用戶評論詞云圖實現…

【Linux學習|黑馬筆記|Day1】Linux初識、安裝VMware Workstation、安裝CentOS7、遠程連接、虛擬機快照

Linux DAY1 前言 因為之前MySQL學到安裝Linux版本的MySQL了,需要安裝虛擬機等等,所以我打算先學完Linux的全部課程,期間繼續學MySQL 文章目錄Linux DAY1一.1)操作系統概述2)Linux初識3)虛擬機4.1&#xff…

編程與數學 03-002 計算機網絡 13_無線網絡技術

編程與數學 03-002 計算機網絡 13_無線網絡技術一、無線網絡的基本概念(一)無線通信的頻段與標準(二)無線網絡的優勢與挑戰二、無線局域網(WLAN)(一)802.11標準系列(二&a…

肖特基二極管MBR0540T1G 安森美ON 低電壓 高頻率 集成電路IC 芯片

MBR0540T1G ON Semiconductor:超低VF肖特基二極管,重新定義電源效率!🔥 一、產品簡介 MBR0540T1G 是安森美(ON Semiconductor)推出的0.5A/40V肖特基勢壘二極管,采用專利溝槽結構,專…

windows內核研究(軟件調試-調試事件采集)

軟件調試調試事件采集前面有說到在調試器和被調試之間會創建一個_DEBUG_OBJECT對象來進行關聯調試事件的種類 被調試進程會把一個個的調試事件寫到_DEBUG_OBJECT中的一個成員鏈表中,調試器就通過它們建立的 _DEBUG_OBJECT調試對象獲取調式事件,但并不是進…

Web開發-PHP應用組件框架前端模版渲染三方插件富文本編輯器CVE審計

類別組件/框架說明[Web框架]Laravel現代化、功能全面的框架,適合大多數Web應用。Symfony高度模塊化、功能強大的框架,適合復雜應用。CodeIgniter輕量級框架,適合快速開發。Zend Framework (Laminas)企業級框架,適合大規模應用&…

Spring Boot Actuator 保姆級教程

1. 引言 Spring Boot Actuator 是一個功能強大的監控工具,能夠幫助開發者監控和管理應用的運行狀態。通過 Actuator,我們可以輕松獲取應用的健康狀況、配置信息、性能指標等。本文將一步步引導你如何配置和使用 Actuator,以及如何通過它來監控…

使用 whisper, 音頻分割, 初步嘗試,切割為小塊,效果還不錯 1

對于一首歌而言,如何斷句?即,一個 mp4 或是 mp3 文件,或是一段錄音, 如何使用程序,或是 ai 來斷句。分割為一句一句的片段??如果人工來分割,一般是使用 capcut 之類的剪輯軟件。但是效率太慢了。所以我想能否設計一個簡潔的,自動的程序來處理。這種事情,專業的名稱…

AD2S1210的DOS LOT含義

一、??信號質量監控類寄存器????LOT閾值(0x88)????作用??:設定信號丟失(Loss of Signal)的判定門檻。??場景??:當正弦或余弦輸入信號幅值低于此值時,芯片認為信號丟失&#xff…

Au速成班-多軌編輯流程

基礎編輯工作流,包含文件導入,導出,音量調節,部分效果添加。 創建多軌會話 設置工程文件名稱、文件位置、采樣率、位深度、主控等。 界面管理 ,界面說明詳細可看 Au速成班-基礎篇_au界面介紹-CSDN博客 音量調節點擊…

Rust實現GPU驅動的2D渲染引擎

當傳統CPU渲染遭遇性能瓶頸時,GPU驅動的架構正在革新2D圖形領域。本文將深入解析用Rust編寫的??完全GPU驅動的2D渲染引擎Vello??,揭秘其如何通過并行計算實現絲滑渲染。 一、GPU Driven革命:為何是Vello? 傳統渲染的瓶頸 傳…

【ELasticsearch】溫、冷數據節點能是同一個節點嗎

溫、冷數據節點能是同一個節點嗎1.節點角色與分層存儲原理2.一個節點能否同時是 “溫” 和 “冷” 節點 ?3.為什么通常不是最佳實踐 ?4.可能的適用場景(非常有限)5.結論在 Elasticsearch 中,理論上,一個物理…

報錯:selenium.common.exceptions.ElementNotInteractableException: Message

針對該錯誤,以下是分步解決方案: 1. 顯式等待確保元素可交互 from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC# 等待元素可點…

sqli-labs:Less-10關卡詳細解析

1. 思路🚀 本關的SQL語句為: $id ".$id."; $sql"SELECT * FROM users WHERE id$id LIMIT 0,1";注入類型:字符串型(雙引號包裹)提示:參數id需以"閉合 php回顯輸出語句的代碼如…

imx6ull-驅動開發篇5——新字符設備驅動實驗

目錄 前言 新字符設備驅動原理 申請設備號 注冊設備號 釋放設備號 注冊方法 字符設備結構cdev cdev_init 函數 cdev_add 函數 cdev_del 函數 自動創建設備節點 mdev 機制 類創建函數 類刪除函數 創建設備函數 刪除設備函數 設置文件私有數據 實驗程序編寫 l…

2025年最新SCI-灰熊增脂優化器(Grizzly Bear Fat Increase, GBF)-附完整Matlab免費代碼

1、簡介 本文介紹了一種新的受自然啟發的優化算法,稱為灰熊增脂優化器(GBFIO)。GBFIO算法模仿灰熊積累體脂為過冬做準備的自然行為,利用它們的狩獵、捕魚和吃草、蜂蜜等策略。因此,GBFIO算法建模并考慮了三個數學步驟來…

Python爬蟲02_Requests實戰網頁采集器

一、Request請求偽裝解析 #UA:User-Agent(請求載體身份標識) #UA檢測:門戶網站的服務器會檢測對應請求的載體身份標識,如果檢測到請求的載體身份呢標識為某一款瀏覽器,說明該請求是一個正常的請求&#xff…