在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FreeRTOS任務調度器外部接口、以及大體作用,基本組成情況

Q4MP_gh_c472c21 ? 來源:嵌入式ARM ? 作者:逸珺 ? 2020-12-24 15:56 ? 次閱讀

學習梳理一下FreeRTOS任務管理單元實現思路,代碼分析基于V10.4.3。從本文開始計劃寫個圖解freeRTOS內核系列筆記分享給朋友們,希望大家喜歡。文章中或有錯誤,也請留言交流指正

本文主要學習梳理FreeRTOS任務管理器的基本原理,大體框架。

內核任務管理器需求

先來對比一下裸奔系統與RTOS應用系統的編程模型,看看兩種編程的不同畫風。

裸奔系統

在不用RTOS的單片機應用開發(fā)時,編程模型大概是這樣的畫風:

db8ffb76-45b8-11eb-8b86-12bb97331649.png

程序的主體是一個死循環(huán),該應用程序由一系列協同工作的函數片段組成,相互實現邏輯配合,實現用戶業(yè)務需求。該應用程序獨占單片機,常規(guī)的單片機系統都僅有有一個計算單元核。

普通外設I/O,這里所說I/O是指廣義的I/O,比如GPIO、PWM、ADCDAC、LCD顯示(當然這里并不嚴謹,比如ADC,DAC、LCD等也可以產生中斷)等。中斷函數將異步事件接收成或報文或標志或數值,在與主循環(huán)發(fā)生邏輯關聯。

中斷外設,比如UARTUSBI2C定時器DMA等根據應用需求而使用的中斷。這些中斷都需要相應的中斷函數進行處理異步中斷事件。對于輸出可能采樣主動輸出,一般由主循環(huán)某一個動作執(zhí)行;對于輸入設備或許采用輪詢方式,在與主循環(huán)進行耦合

RTOS應用系統

在一個基于RTOS應用系統中,其編程模型大致是下面這樣一個畫風,有多個并行的任務在相對長的宏觀時間維度看起來,多個任務是并行運行的,但對于常規(guī)單片機而言(一般都是單核),任一時刻只有一個任務或中斷函數在獨占CPU核。

dbbe5854-45b8-11eb-8b86-12bb97331649.png

常見的RTOS沒有設備驅動模型,沒有對外設設備進行抽象,中斷函數將會由用戶或調用RTOS 機制,比如event/signal等與任務進行通信

任務間還有可能需要通信,或傳遞消息,或完成某項需求相互間需要同步等

同樣任務需要與硬件普通IO外設進行打交道,或入或出。但有可能是這個任務實現,也有可能是哪個任務執(zhí)行。完全取決于開發(fā)人員如何設計。

RTOS實現任務的切入切出,切入使某任務運行;切出使某任務掛起,出讓CPU,暫停運行。

RTOS充當底層支持功能,RTOS還提供豐富的時間管理,隊列、郵箱等機制供應用開發(fā)使用。

......

對于單片機而言,一般只有一個核,所有RTOS為了方便理解,可以看成是最最主要的目就是通過軟件方法將硬件CPU核程序運行環(huán)境抽象為每一個應用任務虛擬出一個軟核。這樣從時間維度上看起來多任務是并行的,而事實上這種并行是偽并行。

dc1a7f8a-45b8-11eb-8b86-12bb97331649.png

上圖僅僅為理解RTOS作用方便,這種虛擬核本質上并不存在,只是將硬件CPU核的運行時上下文(PC指針、狀態(tài)寄存器等寄存器組、任務運行時臨時變量等)通過快照保存切入切出而實現多任務的偽并行運行。

FreeRTOS任務管理器需求

從前文看出,任務管理要實現任務的切入、切出,則首先需要對任務進行抽象描述,以實現在CPU上能夠實現切換。根據閱讀代碼以及文獻加上自己的理解,將內核任務管理器的主要功能需求大致梳理成下面這樣一張用例圖Use case Diagram,僅僅為理解方便,或許并不嚴謹。

dc47f4d8-45b8-11eb-8b86-12bb97331649.png

從上圖,大致可以看出FreeRTOS任務調度器需要以下一些功能需求:

任務抽象描述,一個任務一般本質上是一個死循環(huán)程序片段(當然也有任務運行著會退出被殺掉的可能)。對于任務的抽象:

一般會有任務的執(zhí)行主體,利用函數主體函數指針進行抽象

RTOS常規(guī)都是的基于優(yōu)先級搶占調度算法,因此需要抽象出哪個任務具有更高概率能被執(zhí)行,用優(yōu)先級進行描述

任務需要得以切換,就需要將任務在切換間的臨時狀態(tài)進行保存,棧機制就能很好的滿足這樣的需求,因此每個任務都有一個或大或小的任務棧。其本質上是一片連續(xù)的FILO(先入后出)內存。

.....

任務創(chuàng)建、刪除等API接口,供應用開發(fā)使用。

任務調度器控制接口,啟動調度器、停止調度器、掛起所有任務、恢復運行等調度器接口。

任務雜項信息接口,比如獲取任務狀態(tài)、tick信息、調試、獲取任務名等API接口

任務調度算法,基于調度策略對運行時的任務進行調度,或掛起、或運行、或就緒等,主要根據調度策略管理任務的切入切出。這里主要涉及到任務間上下文切換、任務與中斷函數間的上下文切換兩種場景。

抽象C運行時環(huán)境,現代RTOS應用系統一般基于C語言,抽象C運行時環(huán)境,這里主要指棧,當然很多RTOS內核也內核堆,freeRTOS也不例外。熟悉C編程的朋友都知道,堆內存由malloc/free函數操作集提供用戶接口,既然C堆已有,為何RTOS內核重新造輪子?為啥內核額外需要實現自己的堆管理器呢?這大體是基于下面些緣由:

編譯器C堆實現,在小型嵌入式系統上有時候并不能直接使用。

C堆的實現可能相對較大,占用了較大代碼空間。比較浪費有限的代碼存儲空間。

C堆很少是線程安全的。

C堆申請執(zhí)行時間不是確定的, 執(zhí)行功能所需的時間因調用而異。

C堆會在單片機有限的內存資源引發(fā)內存碎片問題。

C堆會使鏈接器配置復雜化。

C堆如引發(fā)未知錯誤,不便于調試。

FreeRTOS任務描述抽象

dcb19dca-45b8-11eb-8b86-12bb97331649.png

對于其中幾項必須的關鍵數據域描述一下其抽象作用:

pxTopOfStack:指向任務棧棧頂指針

xStateListItem:任務狀態(tài)鏈表描述節(jié)點,用于動態(tài)將該任務添加、刪除到就緒或阻塞任務對列鏈表中

xEventListItem:事件鏈表描述節(jié)點,描述本任務相關事件,用于將本任務添加到事件鏈表中。

uxPriority:任務優(yōu)先級,用于描述本任務的優(yōu)先級。

pxStack:任務棧指針,指向本任務的任務棧。

pcTaskName:任務名字符串存儲區(qū),長度可配。默認為16字節(jié)

其他的數據域,可裁剪實現一些更豐富的功能,比如主要用于防治優(yōu)先級反轉的優(yōu)先級繼承機制,trace追蹤功能等。限于篇幅,也主要梳理任務管理器的主要原理,就不展開了。

任務創(chuàng)建刪除管理

FreeRTOS為用戶提供一組函數集用于任務的創(chuàng)建、刪除等管理,先看任務的創(chuàng)建API:

xTaskCreate/xTaskCreateStatic 都是用于創(chuàng)建任務而用,其區(qū)別在于:

xTaskCreate 申請任務控制塊以及棧從內核堆申請

xTaskCreateStatic 創(chuàng)建的任務,其任務控制塊內存以及任務棧內存由用戶傳入。或許有朋友會問StaticTask_t這不是任務控制塊嘛,仔細看看其結構定義其內存對齊及大小剛好是前面說的任務控制塊的定義。

xTaskCreateRestricted() /xTaskCreateRestrictedStatic(),主要用于在有或使能MPU單元的芯片中創(chuàng)建任務。這里的MPU是指Memory Protection Unit (MPU),不是微處理器的意思。這兩者的區(qū)別與上面兩個API類似,主要在于其內存分配方式不同,xTaskCreateRestricted是從內核堆動態(tài)申請,xTaskCreateRestrictedStatic用戶傳入。

PRIVILEGED_FUNCTION 這個宏是用于存儲保護單元芯片的。

這幾個任務創(chuàng)建函數都是用于任務創(chuàng)建,任務一旦創(chuàng)建就會被插入任務就緒鏈表中,當調度器調度啟動后就按任務狀態(tài)機根據調度策略以及外部輸入事件進行調度接管。這里以xTaskCreate繪制一下其內在干了些啥:

dcfc9af0-45b8-11eb-8b86-12bb97331649.png

再看看另外兩個函數:

o4YBAF_kSxaAdRRhAAAqUyKbKfE918.jpg

vTaskAllocateMPURegions: 定義一組內存保護單元(MPU)區(qū)域,供MPU受限任務使用.

vTaskDelete: 刪除用使用xTaskCreate()或xTaskCreateStatic()創(chuàng)建的任務。

任務控制管理接口

pIYBAF_kSzKANjjhAADQex0DNEM347.jpg

這一系列的API接口操作集主要用于對任務進行掛起延時、獲取優(yōu)先級、自中斷函數獲取優(yōu)先級、掛起、恢復運行等操作。基本從其函數名就可以看出其作用。比如:

vTaskDelay調用,會使調用該函數的任務進入阻塞狀態(tài)一段時間,時間為傳入的tick數。

這里需要注意的是有的函數在中斷函數體里面不可以調用,需要使用專用版本,具體可以看看手冊或注釋。

調度器控制接口

o4YBAF_kS0SAKlIGAAA2n1n171k428.jpg

這一組函數API集主要用于調度器的啟動、停止控制:

vTaskStartScheduler,主要用于待用戶任務創(chuàng)建好后,硬件初始化后,啟動內核調度器

vTaskEndScheduler,可用于停止內核調度器,一般很少用到,在一些安全相關的應用可能會在出故障時主動停止調度器。

vTaskSuspendAll,掛起所有任務,可以用用戶邏輯主動掛起所有的任務

xTaskResumeAll,恢復所有任務為就緒態(tài)。

任務雜項API集

我根據代碼及注釋及自己理解,將這些API歸類到雜項API集合:

pIYBAF_kS2eALpnfAADvoaBzhRg859.jpg

o4YBAF_kS22Abh_WAACTpsQ3fUU002.jpg

這些函數具體作用就不贅述,這里僅僅梳理分類,用到時候查手冊即可。

跨平臺移植接口

這些接口不同硬件平臺需要做具化的移植,做差異化的處理,但是對于FreeRTOS統一了內部調用的接口。這樣的思路在應用開發(fā)時也可以考慮使用,對于公共部分可以抽象出統一的接口,這樣在不同平臺上可以很方便的進行移植。對于這些接口后面有機會學習整理分享。

對于用例圖中的其他部分,核心調度部分以及上下文切換,篇幅所限留在后面學習整理分享。

總結一下

本文基本學習梳理了一下對于FreeRTOS任務調度器外部接口、以及大體作用,基本組成情況,水平所限,文章中錯誤難免,歡迎交流指正。

責任編輯:xj

原文標題:圖解FreeRTOS 原理系列之任務管理器基本框架

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • FreeRTOS
    +關注

    關注

    12

    文章

    485

    瀏覽量

    63682
  • 任務管理器
    +關注

    關注

    0

    文章

    15

    瀏覽量

    7835

原文標題:圖解FreeRTOS 原理系列之任務管理器基本框架

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    移植LWIP+FREERTOS時遇到的問題怎么解決?

    :將ST官網的LWIP1.4.1 的例子(關于LWIP的部分)移植到步驟1 的FreeRTOS 系統的工程里面,只是添加LWIP初始化的任務,并沒有調用任何接口情況下可以Ping 通
    發(fā)表于 03-11 06:48

    傳感的基本組成要素

    在當今科技日新月異的時代,傳感作為連接物理世界與數字世界的橋梁,扮演著舉足輕重的角色。從智能家居到工業(yè)自動化,從醫(yī)療健康到環(huán)境監(jiān)測,傳感的身影無處不在,它們默默地收集著各種數據,為我們的生活帶來了前所未有的便利與智慧。那么,這些神奇的傳感
    的頭像 發(fā)表于 11-28 08:45 ?1629次閱讀

    醫(yī)療機器人有哪些基本組成_醫(yī)療機器人有哪些功能

     醫(yī)療機器人是由多個關鍵部分組成的復雜系統,這些部分共同協作以實現其在醫(yī)療領域中的各種功能。以下是醫(yī)療機器人的基本組成
    的頭像 發(fā)表于 10-21 15:31 ?1793次閱讀

    自激振蕩由什么組成 自激振蕩的基本組成有什么和什么

    自激振蕩(自激震蕩)是一種能夠產生連續(xù)振蕩信號的電子設備,其基本組成主要包括 放大器 和 正反饋網絡 。以下是對自激振蕩組成部分的介紹
    的頭像 發(fā)表于 10-06 15:58 ?801次閱讀

    外部存儲有哪些

    外部存儲是指用于存儲數據的獨立設備,它們通常與計算機或其他電子設備連接,并提供額外的存儲空間,允許用戶在不改變主設備內部存儲的情況下保存和訪問大量數據。常見的外部存儲
    的頭像 發(fā)表于 09-05 10:42 ?4566次閱讀

    freertos最多支持多少個任務

    以下幾個因素: 系統資源 :FreeRTOS能夠支持的任務數量受到系統硬件資源的限制,特別是處理的RAM大小和性能。RAM用于存儲任務的控制塊(TCB)和
    的頭像 發(fā)表于 09-02 14:21 ?1912次閱讀

    freertos和裸機有什么區(qū)別

    的、搶占式實時操作系統(RTOS),適用于微控制和小型處理。它提供了多任務處理、任務優(yōu)先級、時間管理、內存管理、同步機制等功能,使得開發(fā)者能夠更容易地編寫復雜的實時應用程序。 1.
    的頭像 發(fā)表于 09-02 14:13 ?2714次閱讀

    定時的基本組成和工作模式

    定時是計算機或電子設備中常見的一個硬件或軟件組件,其主要功能是測量和控制時間的流逝。它在各種應用中起著至關重要的作用,如操作系統調度、多媒體播放、網絡通信、工業(yè)自動化控制以及家電設備
    的頭像 發(fā)表于 08-19 18:28 ?2348次閱讀

    簡述光纖傳輸線路的基本組成

    光纖傳輸線路作為現代通信網絡的基石,其基本組成涵蓋了多個關鍵部分,共同協作以實現高效、穩(wěn)定的光信號傳輸。以下是對光纖傳輸線路基本組成的詳細描述,旨在全面解析其技術架構與工作原理。
    的頭像 發(fā)表于 08-09 15:15 ?1313次閱讀

    數字光纖通信系統的基本組成和關鍵技術

    數字光纖通信系統作為現代通信技術的重要組成部分,以其高速率、大容量、長距離傳輸等顯著優(yōu)勢,在通信領域發(fā)揮著至關重要的作用。該系統主要由光發(fā)射機、光纖傳輸線路、光接收機以及一系列輔助設備組成
    的頭像 發(fā)表于 08-09 10:48 ?2730次閱讀

    LSTM模型的基本組成

    的梯度消失或梯度爆炸問題。LSTM通過引入三個“門”控制結構——遺忘門、輸入門和輸出門,以及一個記憶細胞(memory cell),實現了對信息的有效存儲和更新。本文將對LSTM模型的架構進行詳細分析,包括其基本組成、前向傳播過程、反向傳播算法
    的頭像 發(fā)表于 07-10 17:01 ?2735次閱讀

    工業(yè)機器人控制系統的基本組成有哪些

    工業(yè)機器人控制系統是工業(yè)機器人的大腦,它負責接收輸入信號、處理信息、控制機器人的運動和執(zhí)行任務。一個完整的工業(yè)機器人控制系統通常包括以下幾個基本組成部分: 傳感系統 : 位置傳感
    的頭像 發(fā)表于 06-16 15:26 ?2727次閱讀

    PLC控制電路的工作原理和基本組成

    在工業(yè)自動化領域,PLC(Programmable Logic Controller,可編程邏輯控制)已成為一種不可或缺的控制設備。PLC通過預先編寫的程序,實現對工業(yè)設備的自動化控制,極大地提高了生產效率。本文將詳細介紹PLC控制電路的工作原理和基本組成,以便讀者更好
    的頭像 發(fā)表于 06-14 14:03 ?1769次閱讀

    激光切割機床的基本組成及其作用

    介紹激光切割機床的基本組成及其作用。 一、激光發(fā)生 激光發(fā)生的類型 激光發(fā)生是激光切割機床的核心部件,主要分為固體激光
    的頭像 發(fā)表于 06-14 09:37 ?2212次閱讀

    鴻蒙開發(fā)接口資源調度:【@ohos.workScheduler (延遲任務調度)】

    開發(fā)者在開發(fā)應用時,通過調用延遲任務注冊接口,注冊對實時性要求不高的延遲任務,該任務默認由系統安排,在系統空閑時根據性能、功耗、熱等情況進行
    的頭像 發(fā)表于 06-04 10:01 ?1253次閱讀
    鴻蒙開發(fā)<b class='flag-5'>接口</b>資源<b class='flag-5'>調度</b>:【@ohos.workScheduler (延遲<b class='flag-5'>任務</b><b class='flag-5'>調度</b>)】
    主站蜘蛛池模板: 加勒比日本道 | 欧美激情区 | a爱视频| 久久影院午夜伦手机不四虎卡 | 四虎精品免费永久在线 | 在线天堂中文官网 | 国产色婷婷精品综合在线观看 | 特级深夜a级毛片免费观看 特级生活片 | 天天干人人 | 亚洲天堂不卡 | 爱爱帝国亚洲一区二区三区 | 天天摸夜夜添狠狠添2018 | 亚洲男人的天堂成人 | 亚洲综合第一区 | 亚洲a成人| 欧美日韩中文字幕 | 久久精品国产99国产精品免费看 | 婷婷丁香社区 | 国产欧美高清 | 久久网站免费 | 狠狠操天天干 | 日韩美女奶水喂男人在线观看 | 久久久久久夜精品精品免费 | 日本黄色高清视频网站 | 日韩欧美亚洲一区 | 亚洲美女啪啪 | 国产精品久久久久久久人热 | 操美女在线看 | 你懂的网站在线播放 | www.天天操| 色宅男午夜电影在线观看 | 日韩精品一级a毛片 | 国产汉服被啪福利在线观看 | a看片| 欧美午夜影视 | 成人看的一级毛片 | а8天堂资源在线官网 | 日本三级全黄三级a | 午夜小福利 | 国产一二三区在线观看 | 性欧美高清久久久久久久 |