FreeRTOS: ISR(中斷服務例程)和 TCB(任務控制塊)

在討論 ISR(中斷服務例程)和 TCB(任務控制塊,Task Control Block)時,我們實際上是在探討 FreeRTOS 中兩個不同但又相互關聯的概念:一個是用于處理硬件或軟件觸發的中斷事件,另一個是操作系統用來管理任務的核心數據結構。下面我將詳細解釋這兩個概念及其關系。

1.?ISR (Interrupt Service Routine)

定義
  • ISR?是一段專門編寫的小型程序代碼,用來處理特定類型的中斷請求。當中斷發生時,CPU 暫停當前執行的任務,轉而執行相應的 ISR 來響應這個中斷。ISR 必須快速完成其工作,以確保其他更高優先級的中斷能夠及時得到響應。
特點
  • 高優先級:ISR 比普通任務具有更高的優先級。
  • 非搶占性:在一個 ISR 執行期間,不會被另一個 ISR 或者普通任務所搶占,除非新來的中斷源設置了更高的優先級。
  • 簡短高效:ISR 應盡可能快地完成,因為長時間運行的 ISR 可能會影響系統的實時性能和響應速度。
  • 不能阻塞:ISR 內部不允許調用任何可能導致阻塞的操作(如?vTaskDelay()),因為這會導致整個系統陷入死鎖狀態。
在 FreeRTOS 中使用 ISR
  • 發送消息給隊列:可以使用?xQueueSendFromISR()?函數將數據發送到隊列,但要注意避免阻塞。
  • 喚醒任務:可以通過?xSemaphoreGiveFromISR()?或?xTaskResumeFromISR()?喚醒等待的任務,同樣要避免阻塞。
  • 檢查是否需要上下文切換:某些 ISR 函數有一個參數指向一個布爾變量,如果該變量被設為?pdTRUE,則表明有更高優先級的任務被喚醒,可能需要進行上下文切換。這時應該調用?portYIELD_FROM_ISR()?來實現這一點。

2.?TCB (Task Control Block)

定義
  • TCB?是 FreeRTOS 內核用于管理每個任務的數據結構。它包含了任務的所有信息,包括但不限于:
    • 任務狀態:如就緒、運行、阻塞等。
    • 任務堆棧指針:保存任務的寄存器狀態和局部變量。
    • 任務優先級:定義了任務相對于其他任務的執行順序。
    • 任務句柄:唯一標識符,用于從應用程序中引用任務。
    • 任務延時計數器:用于定時阻塞任務。
    • 消息隊列:如果任務使用了隊列,則包含相關隊列的信息。
功能
  • 任務調度:FreeRTOS 使用 TCB 中的狀態信息來決定哪個任務應該獲得 CPU 時間片。
  • 內存管理每個 TCB 都有自己的堆棧空間,用于存儲任務執行期間的臨時數據。
  • 同步與通信:通過 TCB,任務可以訪問和操作共享資源,如信號量、隊列等,從而實現任務間的同步和通信。

ISR 和 TCB 的關系

盡管 ISR 和 TCB 分別代表了不同的概念,但在實際應用中它們之間存在一定的交互:

  • 從中斷上下文喚醒任務:當 ISR 處理完中斷后,它可能會改變某個任務的狀態(例如通過信號量或隊列)。此時,ISR 可以通知 FreeRTOS 內核有關任務狀態的變化,并可能觸發一次上下文切換,讓被喚醒的任務立即開始執行。這種情況下,ISR 會更新相關的 TCB,特別是那些涉及任務狀態轉換的部分。

  • 任務創建與刪除:雖然 ISR 不直接參與任務的創建或刪除過程,但它可以在運行時影響哪些任務處于活動狀態。例如,ISR 可能會向隊列發送數據,導致原本處于阻塞狀態的任務變得可運行,進而改變了這些任務對應的 TCB 狀態。

  • 上下文切換:當 ISR 結束時,如果檢測到有更高優先級的任務被喚醒,則會觸發一次上下文切換。這意味著當前正在執行的任務會被掛起,而新的最高優先級任務將接管 CPU。這一過程中,FreeRTOS 內核會根據各個任務的 TCB 來確定下一個要執行的任務,并相應地調整 CPU 上下文。

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

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

相關文章

GoldenDB組件及對應的用戶和進程

1. GoldenDB組件及對應的用戶和進程 GoldenDB數據庫由管理節點、全局事務節點GTM、計算節點CN、數據節點DN等組成。 1.1. 管理節點 管理節點分為集群管理、Insight運維管理平臺(InsightServer、RDB、ZK)。 1.1.1. 集群管理 1. 集群管理包括Metadatas…

OpenStack系列第四篇:云平臺基礎功能與操作(Dashboard)

文章目錄 1. 鏡像(Image)添加鏡像查看鏡像刪除鏡像 2. 卷(Volume)創建卷查看卷刪除卷 3. 網絡(虛擬網絡)創建網絡查看網絡刪除網絡 4. 實例類型創建實例類型查看實例類型刪除實例類型 4. 密鑰對&#xff08…

CSDN編輯器

這里寫自定義目錄標題 歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題,有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants 創建一個自定義列表如何創建一個…

MTK 平臺關于WIFI 6E P2P的解說

一 前言 官方 P2P 6E 設計原理,請查看這個網站 hostap - hostapd/wpa_supplicant 配置:p2p_6ghz_disable 允許上層指定是否允許6G連接 僅允許6G用于WFD –不允許6G用于純P2P 缺點:存在很多 IOT issues 如:一些物聯網設備無法識別6G類/信道,可能存在物聯網問…

四大自平衡樹對比:AVL樹、紅黑樹、B樹與B+樹

AVL樹、紅黑樹、B樹和B樹的對比與應用場景 樹系列相關文章(置頂) 1、從鏈表到平衡樹:二叉查找樹的退化與優化 2、自平衡二叉查找樹:如何讓二叉查找樹始終保持高效 3、AVL樹入門:理解自平衡二叉查找樹的基礎 4、紅黑樹全…

Linux下讀取Windows下保存的文件,報錯信息中出現“^M“時如何解決?【由于Windows和Linux的換行方式不同造成的-提供兩種轉換方式】

Windows 和 Linux 的文本文件使用的換行符不同: Windows 使用 \r\n (回車 換行)。Linux 使用 \n (換行)。 因此,當在 Linux 系統上運行帶有 Windows 換行符的腳本或讀取相關文件時,可能會出現…

簡易內存池(下)

提示&#xff1a;文章 文章目錄 前言一、背景二、2.1Ace代碼 三、3.1 總結 前言 前期疑問&#xff1a; 本文目標&#xff1a; 一、背景 最近 二、 2.1 Ace代碼 Aced代碼形式如下 #include <stdbool.h> #include <stdio.h> #include <malloc.h> #inclu…

npm ERR! ECONNRESET 解決方法

問題&#xff1a;npm 命令遇到的錯誤是 ECONNRESET&#xff0c;這通常與網絡連接問題相關。設置代理解決問題。 一、查看當前代理設置 npm config get proxy npm config get https-proxy二、設置代理 npm config set proxy http://your-proxy-address:port npm config set h…

【UE5】UnrealEngine源碼構建2:windows構建unreal engine 5.3.2

參考大神知乎的文章:UE5 小白也能看懂的源碼編譯指南 據說會耗費400G的空間。 代碼本身并不大,可能是依賴特別多,畢竟看起來UE啥都能干,核心還是c++的, 【UE5】UnrealEngine源碼構建1:tag為5.3.2源碼clone 本著好奇+ 學習的態度,想著也許有機會能更為深入的熟悉UE的機制…

Day60 圖論part10

今天大家會感受到 Bellman_ford 算法系列在不同場景下的應用。 建議依然是:一刷的時候,能理解 原理,知道Bellman_ford 解決不同場景的問題 ,照著代碼隨想錄能抄下來代碼就好,就算達標。 二刷的時候自己嘗試獨立去寫,三刷的時候 才能有一定深度理解各個最短路算法。 Bell…

在Linux上獲取MS(如Media Server)中的RTP流并錄制為雙軌PCM格式的WAV文件

在Linux上獲取MS(如Media Server)中的RTP流并錄制為雙軌PCM格式的WAV文件 一、RTP流與WAV文件格式二、實現步驟三、偽代碼示例四、C語言示例代碼五、關鍵點說明六、總結在Linux操作系統上,從媒體服務器(如Media Server,簡稱MS)獲取RTP(Real-time Transport Protocol)流…

Vue3 簡介

Vue3 簡介 最新版本&#xff1a; v3.5.13 1、性能提升 打包大小減少 41% - 初次渲染快 55%, 更新渲染快 133%內存減少 54% 2、源碼的升級 使用 Proxy 代替 defineProperty 實現響應式。重寫虛擬 DOM 的實現和 Tree-Shaking 3、擁抱TypeScript Vue3 可以更好的支持 TypeSc…

打造RAG系統:四大向量數據庫Milvus、Faiss、Elasticsearch、Chroma 全面對比與選型指南

在當今信息爆炸的時代&#xff0c;檢索增強生成&#xff08;Retrieval-Augmented Generation&#xff0c;簡稱RAG&#xff09;系統已成為自然語言處理&#xff08;NLP&#xff09;領域的重要工具。RAG 系統通過結合生成模型和信息檢索技術&#xff0c;能夠在大規模數據中高效地…

檢索增強生成(RAG):大語言模型的創新應用

近年來,隨著自然語言處理(NLP)技術的不斷發展,大型語言模型(Large Language Models, LLMs)在文本生成、對話系統等任務中展現出卓越的性能。然而,由于模型參數和訓練數據的靜態性,它們難以生成包含實時或領域特定信息的高質量文本。為解決這一局限性,檢索增強生成(Re…

Oracle Dataguard(主庫為 Oracle 11g 單節點)配置詳解(1):Oracle Dataguard 概述

Oracle Dataguard&#xff08;主庫為 Oracle 11g 單節點&#xff09;配置詳解&#xff08;1&#xff09;&#xff1a;Oracle Dataguard 概述 目錄 Oracle Dataguard&#xff08;主庫為 Oracle 11g 單節點&#xff09;配置詳解&#xff08;1&#xff09;&#xff1a;Oracle Data…

北京某新能源汽車生產及辦公網絡綜合監控項目

北京某新能源汽車是某世界500強汽車集團旗下的新能源公司&#xff0c;也是國內首個獲得新能源汽車生產資質、首家進行混合所有制改造、首批踐行國有控股企業員工持股的新能源汽車企業&#xff0c;其主營業務包括純電動乘用車研發設計、生產制造與銷售服務。 項目現狀 在企業全…

大數據系列之:深入理解學習使用騰訊COS和COS Ranger權限體系解決方案,從hdfs同步數據到cos

大數據系列之&#xff1a;深入理解學習使用騰訊COS和COS Ranger權限體系解決方案&#xff0c;從hdfs同步數據到cos 對象存儲COS對象存儲基本概念COS Ranger權限體系解決方案部署組件COS Ranger Plugin部署COS-Ranger-Service部署COS Ranger Client部署 COSN 從hdfs同步數據到co…

JAVA學習筆記_Redis進階

文章目錄 初識redisredis簡介windows啟動redis服務器linux啟動redis服務器圖形用戶界面客戶端RDM redis命令常用數據類型特殊類型字符串操作命令Key的層級格式哈希操作命令列表操作命令集合操作命令有序集合操作命令通用命令 java客戶端Jedisjedis連接池SpringDataRedis序列化手…

1月第一講:WxPython跨平臺開發框架之前后端結合實現附件信息的上傳及管理

1、功能描述和界面 前端&#xff08;wxPython GUI&#xff09;&#xff1a; 提供文件選擇、顯示文件列表的界面。支持上傳、刪除和下載附件。展示上傳狀態和附件信息&#xff08;如文件名、大小、上傳時間&#xff09;。后端&#xff08;REST API 服務&#xff09;&#xff1a…

面試經典150題——滑動窗口

文章目錄 1、長度最小的子數組1.1 題目鏈接1.2 題目描述1.3 解題代碼1.4 解題思路 2、無重復字符的最長子串2.1 題目鏈接2.2 題目描述2.3 解題代碼2.4 解題思路 3、串聯所有單詞的子串3.1 題目鏈接3.2 題目描述3.3 解題代碼3.4 解題思路 4、最小覆蓋子串4.1 題目鏈接4.2 題目描…