嵌入式實時操作系統筆記1:RTOS入門_理解簡單的OS系統

今日開始學習嵌入式實時操作系統RTOS:UCOS-III實時操作系統

本次目標是入門RTOS,理解多任務系統......

本文只是個人學習筆記,基本都是對網上資料的整合......

目錄

STM32裸機與RTOS區別:

?裸機中斷示例:

?RTOS對優先級的處理:

?裸機總結:

RTOS (Real Time OS)總結:

?多任務系統的理解:

任務的特性:

搶占式調度:

系統時間管理 :

任務的“獨立”:

網上查閱資料學習:


STM32裸機與RTOS區別:

以下為AI生成內容:

從并發性和模塊化角度來看,RTOS相較于裸機開發具有更好的表現。RTOS支持多任務并發執行,提高了程序的并發工作效率,并且其設計遵循高內聚、低耦合的原則,使程序結構更加清晰。而在裸機開發中,程序通常是在一個無限循環中運行的,沒有多任務、線程的概念,這在處理復雜任務時可能會受到限制。

其次,從生態和可重用性方面考慮,RTOS也更具優勢。RTOS提供了豐富的軟件組件和庫,這些組件和庫可以幫助開發者更快地構建復雜的應用程序。同時,RTOS還支持軟件組件的重用,避免了重復造輪子的問題。而在裸機開發中,由于沒有操作系統的支持,開發者需要自行處理所有底層細節,這可能會導致開發周期變長且難以維護。

此外,實時性方面也是兩者的重要區別。RTOS被設計用于需要嚴格時間控制的實時應用,如工業控制、實時數據采集等。RTOS提供了低延遲、高可靠性和可預測性的特性,能夠滿足這些應用對實時性的高要求。而在裸機開發中,由于沒有操作系統的調度和管理,實時性可能無法得到保證,特別是在處理復雜任務時。

最后,從硬件控制和資源管理角度來看,裸機開發需要直接控制和管理硬件資源,包括處理器、內存、外設等。這通常涉及與硬件的寄存器交互,需要開發者具備較高的硬件知識。而在RTOS中,操作系統提供了對硬件的抽象層和服務,開發者可以通過操作系統提供的API來訪問和控制硬件資源,降低了開發的復雜性。

?裸機中斷示例:

這樣的中斷刷新標志,然后再主函數查詢FLAG==1的方式,會出現一個問題:

就是必須先執行完前倆個打游戲(); 回復消息();函數才會輪到FLAG==1的查詢,如果那倆個函數占用時間過長,則失去了 去醫院();的該有的中斷即時性

配圖來源正點原子

?RTOS對優先級的處理:

RTOS會給每個任務分配優先級,函數 去醫院();? 優先級明顯是最高,但RTOS有更精妙的CPU利用安排:假設去醫院();中有個過程需要等待掛號,等待掛號時 CPU是空閑的,那這段空閑不會被浪費,而是能繼續分配給 打游戲();? 回復消息();

配圖來源正點原子

?裸機總結:

裸機又稱為前后臺系統,前臺是中斷服務函數,后臺是指的大循環,即應用程序

配圖來源正點原子

1、實時性差(應用程序輪流執行)

2、delay();函數 效率低 (延時空等待、CPU不執行別的任務代碼)

3、結構臃腫 小型項目沒問題,大項目很差

RTOS (Real Time OS)總結:

實時操作系統,強調了實時性

配圖來源正點原子

1、分而治之:實際功能劃分多任務

2、延時函數:任務調度

3、搶占式:高優先級任務搶占低優先級任務

4、任務堆棧:每個任務都有自己的堆棧空間

注意:

1、高優先級任務一直在執行,那低優先級任務將一直不會被執行

2、中斷可以打斷任意任務

3、任務可以有同等優先級

?多任務系統的理解:

?這部分是查閱文章學習抄錄的:

就像我們用電腦時可以同時聽歌,上網,編輯文檔等。
在多任務系統中,可以同時執行多個并行任務,各個任務之間互相獨立。通過操作系統執行任務調度而實現宏觀上的“并發運行”。從宏觀上不同的任務并發運行,好像每個任務都有自己的 CPU 一樣。 其實在單一 CPU 的情況下,是不存在真正的多任務機制的,存在的只有不同的任務輪流使用 CPU,所以本質上還是單任務的。但由于 CPU 執行速度非常快,加上任務切換 十分頻繁并且切換的很快,所以我們感覺好像有很多任務同時在運行一樣。這就是所謂的多任務機制。
多任務的最大好處是充分利用硬件資源,如在單任務時(大循環結構,如大部分 51
程序)遇到 delay 函數時,CPU 在空轉;而在多任務系統,遇到 delay 或需等待資源時系
統會自動運行下一個任務,等條件滿足再回來運行先前的任務,這樣就充分利用了 CPU,
提高了效率。

任務的特性:

搶占式調度:

調度的概念,通俗的說就是系統在多個任務中選擇合適的任務執行。系統如何知道
何時該執行哪個任務?可以為每個任務安排一個唯一的優先級別,當同時有多個任務就
緒時,優先運行優先級較高的任務。
同時,任務的優先級也作為任務的唯一標識號。代碼中都是對標識號來完成對任務
的操作的。如 OSDelPrioRdy(prio),OSSetPrioRdy(prio)等。
不同的優先級對應就緒表中的每一位。低位對應高優先級。優先級 0 的優先權最高,
優先級 31 的優先權最低。
“搶占式調度”是指:一旦就緒狀態中出現優先權更高的任務,便立即剝奪當前任務的運行權,把 CPU 分配給更高優先級的任務。這樣 CPU 總是執行處于就緒條件下優先級最高的任務。

系統時間管理 :

與人一樣,多任務系統也需要一個“心跳”來維持其正常運行,這個心跳叫做時鐘節拍,通常由定時器產生一個固定周期的中斷來充當,頻率一般為 50-100Hz。
OSTimeDly 函數就是以時鐘節拍為基準來延時的。這個函數完成功能很簡單,就是先掛起當起當前任務,設定其延時節拍數,然后進行任務切換,在指定的時鐘節拍數到來之后,將當前任務恢復為就緒狀態。任務必須通過 OSTimeDly 或 OSTaskSuspend 讓出 CPU的使用權,使更低優先級任務有機會運行。
在 T0 的中斷服務函數中,依次對各個延時任務的延時節拍數減 1。若發現某個任務的延時節拍數變為 0,則把它從掛起態置為就緒態。

任務的“獨立”:

一個任務有自己的 CPU,堆棧,程序代碼,數據存儲區,那這個任務就是一個獨立的任務。
程序代碼:
每個任務的程序代碼與函數一樣,與 51 的裸奔程序一樣,每個任 務都是一個大循環。

數據存儲區:
由于全局變量是系統共用的,各個任務共享,不是任務私有,所以這里的數據存儲區是指任務的私有變量,局部變量可以使其變成私有。因為編譯器是把局部變量保存在棧里的,所以好辦,只要任務有個私有的棧就行
私有棧的作用是存放局部變量,函數的參數,它是一個線性的空間,所以可以申請一個靜態數組,把棧頂指針 SP 指向棧的數組的首元素(遞增棧)或最后一個元素(遞減棧)。即可打造一個人工的棧出來。
每個任務還要有記錄自己棧頂指針的變量,保存在任務控制塊( TCB )中。
任務控制塊:
系統中的每個任務具有一個任務控制塊,任務控制塊記錄任務執 行的環境,這里的任務控制塊比較簡單,只包含了任務的堆棧指針和任務延時節拍數。
任務私有CPU:
只有一個 CPU ,各個任務共享,輪流使用。如何才能實現?
先來看看中斷的過程:當中斷來臨時, CPU 把當前程序的運 行地址,寄存器等現場數據保存起來(一般保存在棧里),然后跳到中斷服務程序執行。待 執行完畢,再把先前保存的數據裝回 CPU 又回到原來的程序執行。這樣就實現了兩個不同 程序的交叉運行。
借鑒這種思想就能實現多任務了:模仿中斷的過程就可以實現任務切換運行。
任務切換:
任務切換時,把當前任務的現場數據保存在自己的任務棧里面,再把待運行的任務 的數據從自己的任務棧裝載到 CPU 中,改變 CPU PC SP ,寄存器等。可以說,任務的 切換是任務運行環境的切換。而任務的運行環境保存在任務棧中,也就是說,任務切換的 關鍵是把任務的私有堆棧指針賦予處理器的堆棧指針 SP 兩個任務的切換過程如下

網上查閱資料學習:

最后感謝以下互聯網的大佬們的文章視頻供我們學習交流:

【正點原子】手把手教你學UCOS-III實時操作系統_嗶哩嗶哩_bilibili

嵌入式 RTOS多任務操作系統簡介-CSDN博客

基于STM32的簡易RTOS_stm32 osdelpriordy-CSDN博客

FreeRTOS學習筆記(1、FreeRTOS初識、任務的創建以及任務狀態理論、調度算法等)_韋東山freertos快速入門課程學習筆記-CSDN博客

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

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

相關文章

汽車標定技術(二十一)--英飛凌TC3xx的OLDA怎么玩?(2)

目錄 1.概述 2.Vector提出的OLDA概念 2.1 RAM Copy 2.2 Data Trace 3.小結 1.概述 上一篇汽車標定技術(二十一)--英飛凌TC3xx的OLDA怎么玩?(1)-CSDN博客,我們講了TC3xx

Spring MVC/Web

1.Spring MVC 的介紹 Spring Web MVC是基于Servlet API構建的原始Web框架,也是Spring框架的一部分。它提供了靈活可擴展的MVC架構,方便開發者構建高性能的Web應用程序,并與 Spring 生態系統無縫集成。 2.MVC 設計模式 MVC(Model…

設計模式—23種設計模式重點 表格梳理

設計模式的核心在于提供了相關的問題的解決方案,使得人們可以更加簡單方便的復用成功的設計和體系結構。 按照設計模式的目的可以分為三大類。創建型模式與對象的創建有關;結構型模式處理類或對象的組合;行為型模式對類或對象怎樣交互和怎樣…

CSS實現圖片浮動在底層 div 之上,而不會影響底層 div 的布局和內容

前言&#xff1a;遇到個需求&#xff0c;需要圖片顯示在div之上&#xff0c;但是不占用div的空間布局&#xff0c;網上的答案五花八門&#xff0c;但其實使用css就可以簡單實現&#xff0c;僅以此博客作為記錄 舉個栗子 <div class"container"><img src&qu…

Linux 網絡編程基礎——網絡模型

網絡模型 網絡模型1. OSI七層模型1. 物理層&#xff08;Physical Layer&#xff09;2. 數據鏈路層&#xff08;Data Link Layer&#xff09;3. 網絡層&#xff08;Network Layer&#xff09;4. 傳輸層&#xff08;Transport Layer&#xff09;5. 會話層&#xff08;Session Lay…

研發機構大數據遷移如何保障敏感數據不泄露

隨著云計算和大數據技術的飛速進步&#xff0c;越來越多的企業正試圖通過數據遷移來提升IT基礎設施的效率&#xff0c;減少成本&#xff0c;并增強業務的靈活性。但是&#xff0c;這一過程并非沒有它的挑戰&#xff0c;尤其是在數據安全方面。數據在轉移過程中可能會遭遇黑客攻…

SQL的多表聯查

這里我先附上兩張表的數據&#xff1a; Orders 表: OrderIDCustomerID1321324NULL Customers 表: CustomerIDCustomerName1Alice2Bob3Charlie4David INNER JOIN &#x1f91d; 概念&#xff1a; INNER JOIN&#xff08;內連接&#xff09;返回兩個表中匹配的記錄。如果某條…

解決深度確定問題:使用不相交集合森林

解決深度確定問題&#xff1a;使用不相交集合森林 引言不相交集合森林&#xff08;DSF&#xff09;基礎按秩合并與路徑壓縮深度確定問題的解決方案實現MAKE-TREE修改FIND-SET實現FIND-DEPTH實現GRAFT分析最壞情況運行時間結論參考文獻 引言 在計算機科學中&#xff0c;樹結構是…

時空扭曲:重溫相對論的終極挑戰,探尋真理的腳步

大家都知道&#xff0c;相對論是愛因斯坦提出的劃時代理論&#xff0c;為人類認知時空和引力做出了革命性貢獻。但這個理論真的萬無一失嗎&#xff1f;近日&#xff0c;一項新研究提出了測試時間扭曲的新方法&#xff0c;或許能讓我們重新審視相對論在宇宙大尺度上的適用性。 時…

HTML5好看的通用網站模板源碼

文章目錄 1.設計來源1.1 主界面1.2 模板菜單1 界面1.3 模板菜單2 界面1.4 模板菜單3 界面1.5 下拉菜單1 界面1.6 下拉菜單2 界面1.7 模板菜單4 界面1.8 模板菜單5 界面1.9 界面底部 2.效果和源碼2.1 動態效果2.2 源碼目錄2.3 源代碼 源碼下載 作者&#xff1a;xcLeigh 文章地址…

Python 造數據神器Faker

大家好&#xff0c;在編寫代碼過程中&#xff0c;我們經常需要一些假數據來進行測試或者演示。手動創建這些數據不僅耗時&#xff0c;而且容易出錯。幸運的是&#xff0c;Python有一個非常有用的庫叫做Faker&#xff0c;它可以生成各種類型的假數據&#xff0c;從名字、地址到公…

【驅動】ARM手冊引腳寄存器地址(絕對物理地址)查找(以AM437x為例)

1、問題描述 在配置設備樹時,經常遇到如下宏: XXX_IOPAD(pa, val)實際定義如下: DRA7XX_CORE_IOPAD(pa, val) AM33XX_IOPAD(pa, val) DM816X_IOPAD(pa, val) DM814X_IOPAD(pa, val) AM4372_IOPAD(pa, val)一般注釋中的說明如下: 原文:Macro to allow using the absol…

md5和byte64字符串加密

說明&#xff1a;最近碰到一個需求&#xff0c;網絡請求&#xff0c;傳遞json的時候&#xff0c;必須加密&#xff0c;對字符串加密&#xff0c;然后前端去解密字符串&#xff0c;然后解析json&#xff0c;展示數據&#xff0c;可逆 step1: Md5加密方式 package com.example.…

Java技術精粹:高級面試問題與解答指南(一)

Java 面試問題及答案 問題1&#xff1a;請解釋Java中的多態性&#xff0c;并給出一個例子。 答案&#xff1a; 多態性是Java中的一個重要特性&#xff0c;它允許一個引用類型可以指向多種實際類型的對象&#xff0c;并且可以通過這個引用調用實際對象的方法。多態性主要通過繼…

JAVA:常見的加密算法簡介

一、前言 加密算法是指將明文信息轉變為密文信息的過程&#xff0c;即將信息從可讀形式&#xff08;明文&#xff09;轉換為加密形式&#xff08;密文&#xff09;的過程。在加密過程中&#xff0c;信息通過加密算法和加密密鑰被加密處理&#xff0c;加密后的信息&#xff08;密…

【代碼隨想錄算法訓練Day17】LeetCode 110. 平衡二叉樹、LeetCode 257.二叉樹的所有路徑、LeetCode 404.左葉子之和

Day17 二叉樹第四天 LeetCode 110. 平衡二叉樹【后序遍歷】 平衡二叉樹仍是后序遍歷&#xff0c;就是獲取左右子樹的高度然后作差&#xff0c;如果子樹就不平衡&#xff0c;那么就直接將-1向上傳給父節點&#xff0c;否則該數的高度為左右子樹高度的最大值1。 class Solutio…

day 38 435.無重疊區間 763.劃分字母區間 56. 合并區間 738.單調遞增的數字 968.監控二叉樹

435.無重疊區間 思路 為了使區間盡可能的重疊所以排序來使區間盡量的重疊&#xff0c;使用左邊界排序來統計重疊區間的個數與452. 用最少數量的箭引爆氣球恰好相反。 代碼 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,…

如何在cPanel面板中開啟盜鏈保護

本周有一個客戶&#xff0c;購買Hostease的主機&#xff0c; 客戶購買的是Linux虛擬主機&#xff0c;帶cPanel面板的。詢問我們的在線客服&#xff0c;如何可以防止他的網站上的圖片不被盜用。cPanel的盜鏈保護功能可以幫助客戶防止圖片被盜鏈。 盜鏈&#xff08;Hotlinking&a…

.NET Core與.NET Framework的區別

.NET Core和.NET Framework是微軟提供的兩種主要的開發平臺&#xff0c;用于構建各種應用程序。雖然它們都基于.NET技術&#xff0c;但在架構、平臺支持、性能、開發工具和社區支持等方面存在顯著差異。本文將詳細探討.NET Core和.NET Framework的主要區別&#xff0c;幫助開發…

呆馬科技----構建智能可信的踏勘云平臺

近年來&#xff0c;隨著信息技術的快速發展&#xff0c;各個行業都在積極探索信息化的路徑&#xff0c;以提升工作效率和服務質量。智慧踏勘云平臺是基于區塊鏈和大數據技術構建的全流程智慧可信踏勘解決平臺。平臺集遠程視頻、數據顯示、工作調度、過程記錄為一體&#xff0c;…