RTOS原理和應用總結

RTOS的作用

RTOS一般應用在中低端處理器當中,這里舉一個筆者日常開發遇到的案例來說明RTOS的作用。

假設你有一個設備,這個設備的外圍硬件很多,假設有LED、一個網口、若干RS232等等。

在沒有RTOS的時候,我們用裸機編程來寫,那么通常的做法是寫一個while(1)循環,在這個循環中執行ES485通訊、LED點亮、網口并采集數據。

但是這樣子做,有時候并不能符合當前的應用場景,比如:

  1. 網口的通訊與服務器交互,需要優先處理服務器的指令和向服務器發送狀態
  2. LED有很多類型,一些是指示燈,一些是呼吸燈,其優先級不高
  3. RS232數量很多,需要不斷查詢,其優先級并沒有網口這么重要,當時又比LED的等級要高,因為232會與外設進行必要通訊

如果采用了while 1的方式,則每個流程的優先級并不能很好體現,且個別LED或者232如果是受控于網口則有控制關系,采用while 1控制外設,也不能體現出外設的控制關系

如此,為了解決優先級以及外設之間通訊的關系,RTOS便由此誕生了。

RTOS的概念:全稱為Real-Time Operating System(實時操作系統),是一種專門設計用于處理實時任務的操作系統。與通用計算機上運行的桌面操作系統(如Windows、Linux)不同,RTOS專注于提供對實時性能和響應時間的支持

這里解釋一下這個概念:

  1. 外設間的通訊關系一般操作系統都會提供,比如Linux這種操作系統也提供了很多通訊機制
  2. RTOS與其它類型OS的最大不同點就在于:實時性能和響應時間。比如Linux上執行一個程序的時間往往是不固定的,會受到其它外圍硬件的影響。而RTOS提供了優先級的概念,讓程序的執行時間可以被預測到。這個后面再細談何為優先級。
  3. RTOS是一個系統類型的簡稱,跟偏向一種概念,基于RTOS的概念,市面上的常見RTOS有UCOS、FreeRTOS、RT-Thread等等。

RTOS的實現

RTOS的核心實現主要是分為兩點:

  1. 多任務多優先級的實現
  2. 通訊機制的實現
    (TIP:有些類型的RTOS還會帶有一些組件或者軟件包,比如物聯網組件、語言類軟件包等等,但是這些都不是RTOS所必要的)

多任務多優先級的實現

多任務也就是一個時間內執行多個任務,比如上文的LED和232,其應該一起進行。但是232的優先級又比LED等級高,遇到232大量的突發任務的時候,232應該被優先執行。

以單核實現為例,我們只需要控制LED和232讓其交替進行,在宏觀的角度上便認為是同時運行的(實際上微觀上就是把一個任務一個任務來進行,只不過每個人任務都執行一段時間后,就執行另外的任務)。因此實現任務的切換是關鍵的。

關于實現任務的切換,我們要從微觀的角度去看,即芯片的執行內容由何種因素去決定的。清楚如何控制芯片的執行內容便可以輕易的去切換芯片去執行自己想要的內容了。

大多數芯片的實現,往往是將R0Rx寄存器與必要的寄存器(比如計數器、狀態寄存器等)推到堆棧內,然后取出需要執行的任務的寄存器(也是R0Rx寄存器與必要的寄存器),來實現任務的切換。這點如果不理解的話,建議讀者可以學習一下匯編語言,匯編會很接近處理器的處理邏輯。

本文給出另外一個文章進行參考:
https://blog.csdn.net/weixin_47702410/article/details/119751040

而優先級的實現,即讓程序設定自己的優先級等級,系統進行判斷,當前哪個任務的優先級高便執行高優先級的程序,如果優先級一樣高,那就輪轉調度(也就是兩個任務交替執行)。如果使用了優先級的RTOS,需要注意,高優先級一定要可以主動釋放自己的執行權的,不然就會處在一直處理高優先級而低優先級將不會被執行。這種主動釋放執行權限的操作往往就是加上不阻塞的休眠,在高優先級處在休眠期間,就不會占用CPU了,如此低優先級的任務便可以被執行了。

通訊機制的實現

通訊機制一般指的是若干個任務之間的通訊方式。任務其實相當于大型系統中的進程的概念,每個進程都會認為自己享有了計算機的所有資源,RTOS中的任務也是如此。但是在實際情況下,任務并不是享有所有的資源的,比如某個232口,有多個任務想發送數據,如果同時一起發送就會導致232時序和內容出現問題,應該依次發送。

另外任務之間也是需要通信的,比如上文的網口需要控制LED,同時又需要被動等待232是否收到消息。

綜上,通信機制的特點是:

  1. 主要是用于任務之間的通訊
  2. 主要分為兩大類,一類為資源控制類,另一類是消息傳遞類

本文也給出另外一個文章說明資源控制類的信號量機制是如何實現的:
https://blog.csdn.net/weixin_47702410/article/details/119752649

RTOS常見的通訊機制

資源控制類
  • 信號量:用于同步任務或控制對共享資源的訪問。信號量可以是二進制的(用作互斥鎖)或計數的(用于管理有限數量的資源)
  • 互斥鎖:一種特殊類型的信號量,專門用于提供對共享資源的互斥訪問。類似二只信號量,但是一般互斥鎖帶有避免優先級反轉的方案
  • 自旋鎖:在多核或支持線程的系統中使用,當一個任務嘗試獲取鎖而鎖已被占用時,任務會在一個循環中等待(即“自旋”),直到鎖變為可用。自旋鎖適用于短時間內的鎖定,因為它們在等待時不會使任務進入睡眠狀態。
消息傳遞類
  • 郵箱(Mailbox):允許一個任務發送消息給另一個任務的郵箱。郵箱通常是基于中斷的,可以存儲固定大小的消息。
  • 事件(Event):用于通知一個或多個任務某些條件已經發生。事件可以是單個標志或一組標志,任務可以等待一個或多個事件的發生。
  • 工作隊列(Work Queue):允許任務將工作項排隊到一個隊列中,這些工作項隨后由工作線程以FIFO(先進先出)的順序處理。
  • 消息隊列(Message Queue):允許任務發送和接收消息。消息隊列可以存儲多個消息,并且可以配置為具有優先級,以便優先處理更重要的消息。

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

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

相關文章

HTML5 多媒體應用技術

目錄 多媒體元素 audio元素video元素多媒體事件與JavaScript交互音頻和視頻軌道(Track)媒體API MediaElement APIMediaSource Extensions (MSE)Encrypted Media Extensions (EME)Web Audio API

數據庫同步軟件,天不生PanguSync萬古如長夜

在信息時代的海洋中,數據是那永不熄滅的燈塔,照亮了科技發展的航道。然而,隨著數據的膨脹和應用場景的多樣化,如何確保這些寶貴資源在不同平臺、不同設備間實時更新、保持一致性,便成了一道亟待解決的難題。于是&#…

Android File Transfer for mac(強大的安卓文件傳輸工具) 直裝版

Android File Transfer是一款專門為Mac用戶設計的軟件,它用于在Android設備與Mac之間傳輸文件。這款軟件提供了簡單直觀的操作界面,使用戶能夠輕松地在Android設備和Mac之間傳輸和管理文件。 下載地址:https://www.macz.com/mac/7099.html?i…

使用python實現socket進行消息傳輸-demo

Socket 是什么 Socket 是一種在計算機網絡中用于實現進程間通信的一種機制。它是網絡編程中的重要概念,通過它可以在不同的計算機之間進行數據傳輸和通信。Socket 可以用于實現各種網絡應用,包括客戶端-服務器模型、P2P 應用等。基本上,Sock…

自動駕駛決策規劃算法——二次規劃

自動駕駛決策規劃算法第二章第二節(中) 參考線算法_嗶哩嗶哩_bilibili 動態規劃開辟的凸空間如下,兩條橙色線之間: 黃色的點就意味著L的上下界,物理意義是當軌跡ss1時,L的范圍應該是(Lmin1,Lmax1)之間,這個范圍就是開辟…

學習日記.1

今天就是配置了droidbot的環境。主要的知識來源是GitHub - xieincz/droidbot: A lightweight test input generator for Android. Similar to Monkey, but with more intelligence and cool features! 看readme,注意只需要platform就好,sdk太大不用下載…

《Ai企業知識庫》-模型實踐-rasa開源學習框架-基礎理論-02

rasa官網 Conversational AI Platform | Superior Customer Experiences Start Here rasa簡介: Rasa是一個開源的機器學習框架,專門用于構建自動化的文本和語音對話系統,即聊天機器人。它允許開發者和企業創建定制化的對話體驗&#xff0c…

ubuntu設置root開機登錄,允許root用戶ssh遠程登錄

ubuntu與centos系統不同,默認root開機不能登錄。 1、輸入一下命令創建root密碼,根據提示輸入新密碼 sudo passwd root 2、打開gdm-autologin文件,將auth required pam_succeed_if.so user ! root quiet_success這行注釋掉,這行就…

el-upload 上傳多個視頻

<el-form-item label"視頻" prop"video_url"><el-uploadclass"upload-demo"ref"uploadRef":multiple"true":on-change"handleChange":before-remove"beforeRemove":before-upload"before…

Flutter 中的 EditableText 小部件:全面指南

Flutter 中的 EditableText 小部件&#xff1a;全面指南 在Flutter中&#xff0c;EditableText是一個低級別的文本編輯組件&#xff0c;它提供了構建自定義文本編輯界面的能力。與TextField和TextFormField不同&#xff0c;EditableText提供了更多的靈活性&#xff0c;允許開發…

【LinuxC語言】鏈接文件

文章目錄 前言一、inode索引節點inode的作用為什么inode重要 二、文件鏈接的定義文件鏈接是什么硬鏈接&#xff08;Hard Link&#xff09;軟鏈接&#xff08;符號鏈接&#xff0c;Symbolic Link&#xff09;硬鏈接圖示&#xff1a;軟鏈接圖示&#xff1a; 硬鏈接應用場景限制和…

五步定位性能瓶頸

一、著手測試前的準備&#xff1a;優化數據流向與系統架構分析 在進行性能測試或系統優化之前&#xff0c;明確數據流向和系統架構的細節是至關重要的步驟。這不僅能夠幫助識別潛在的瓶頸&#xff0c;還能確保測試用例設計的全面性與針對性。以下是關鍵步驟和方法&#xff1a;…

實現本地訪問云主機,以及在云主機搭建FTP站點

前言 云計算是一種基于互聯網的計算模式&#xff0c;通過網絡提供按需訪問的計算資源和服務。核心概念是把計算能力視作一種公共資源&#xff0c;用戶可以根據自身需求動態分配和管理這些資源。 云主機 ECS (Elastic Compute Server)是一種按需獲取的云端服務器&#xff0c;提…

142.棧和隊列:用棧實現隊列(力扣)

題目描述 代碼解決 class MyQueue { public:stack<int> stIn; // 輸入棧&#xff0c;用于push操作stack<int> stOut; // 輸出棧&#xff0c;用于pop和peek操作MyQueue() {}void push(int x) {stIn.push(x); // 將元素壓入輸入棧}int pop() {// 如果輸出棧為空&…

虛擬列表 vue-virtual-scroller 的使用

npm 詳情&#xff1a;vue-virtual-scroller - npm (npmjs.com) 這里我使用的是RecycleScroller。 App.vue <template><RecycleScrollerclass"scroller":items"items":item-size"54"v-slot"{ item }"><list-item :it…

Flask Response 對象

文章目錄 創建 Response 對象設置響應內容設置響應狀態碼設置響應頭完整的示例拓展設置響應的 cookie重定向響應發送文件作為響應 總結 Flask 是一個 Python Web 框架&#xff0c;用于快速開發 Web 應用程序。在 Flask 中&#xff0c;我們使用 Response 對象來構建 HTTP 響應。…

【論文筆記】advPattern

【論文題目】 advPattern: Physical-World Attacks on Deep Person Re-Identification via Adversarially Transformable Patterns Abstract 本文首次嘗試對深度reID實施魯棒的物理世界攻擊。提出了一種新穎的攻擊算法&#xff0c;稱為advPattern&#xff0c;用于在衣服上生成…

文本轉語音軟件-TTSMaker

一、TTSMaker介紹 TTSMaker&#xff08;馬克配音&#xff09;是一款免費的文本轉語音工具&#xff0c;提供語音合成服務&#xff0c;支持多種語言&#xff0c;包括中文、英語、日語、韓語、法語、德語、西班牙語、阿拉伯語等50多種語言&#xff0c;以及超過300種語音風格。 可…

C語言指針相關知識(第四篇章)(非常詳細版)

文章目錄 前言一、什么是回調函數二、qsort函數的介紹(默認升序排序)三、qsort函數的模擬實現&#xff08;通過冒泡排序&#xff09;總結 前言 本文介紹了回調函數&#xff0c;qsort函數的使用&#xff0c;以用冒泡排序來模擬實現qsort函數 提示&#xff1a;以下是本篇文章正文…

持續總結中!2024年面試必問 20 道 Redis面試題(四)

上一篇地址&#xff1a;持續總結中&#xff01;2024年面試必問 20 道 Redis面試題&#xff08;三&#xff09;-CSDN博客 七、Redis過期鍵的刪除策略&#xff1f; Redis 過期鍵的刪除策略主要涉及以下幾種方式&#xff1a; 1. 定時刪除&#xff08;Timed Expiration&#xff…