国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

UCOS2系統內核講述(三)_ TCB任務控制塊

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-25 10:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Ⅰ、寫在前面

學習本文之前可以參看我前面的文章:

UCOS2_STM32F1移植詳細過程(匯總文章)

UCOS2系統內核講述(一)_總體描述

UCOS2系統內核講述(二)_初始化調用函數

上一篇文章講述了關于OSInit函數體中幾個關于系統內核重要的函數,本文將針對上一篇文章中OS_InitTCBList(初始化任務控制塊)函數重點講述一下TCB(Task Control Block)任務控制塊。

TCB任務控制塊是用來記錄任務的堆棧指針、任務的當前狀態、任務的優先級別等一些與任務有關屬性的一個數據結構表(因此,學習本文之前需要了解數據結構)。任務控制塊相當于一個任務的“身份證”,它記錄著任務的重要信息。

對于系統內核而言,各個任務就是通過控制任務塊將其鏈接成一個表。因此,任務控制塊在任務中占據重要地位。

本文還是結合前面移植好、可以運行的源代碼來進行講述關于最新版本UCOS2系統內核部分代碼(圍繞源代碼來講述)。

對于想學習UCOS的朋友,本文講述的內容可不用深入理解,可以先做個了解。

關于本文的更多詳情請往下看。

Ⅱ、全局TCB

在上一篇文章中講述的OS_InitTCBList是整個系統初始化重要的一個函數。


在該函數中可以看到OS_TCB這么一個數據類型,在第一條執行語句中可以看到“OSTCBTbl”這個TCB表,下面可以看到“OSTCBPrioTbl”、“OSTCBList”、“OSTCBFreeList”等一些關于TCB數據類型的變量。由此可知道,這個函數體里面的內容全是關于OS_TCB類型的。

跟蹤代碼可以知道“OSTCBTbl”這些變量定義在ucos_ii.h中,其實這些變量是控制整個系統任務的一些全局TCB.


從變量后面的注釋可以知道關于任務的切換需要修改多少變量(指針),下一章節我們將進一步講述關于“OS_TCB”這個數據結構體。

Ⅲ、OS_TCB數據結構體

要想理解OS_TCB結構體,需要理解數據結構(也就是C語言中結構體、指針、鏈表等這些知識),因為OS_TCB里面使用的就是這些知識,先看一下ucos_ii.h中定義的OS_TCB結構體,如下圖:


上面的截圖就是整個“OS_TCB”結構體的內容,最重要的幾個參數就是我用紅色框出來的那些,其他都是次要,或者不必要的參數。

下面就重點講述一下紅色標記的幾個參數:

1.三個重要的OS_TCB參數

OS_STK *OSTCBStkPtr; 指向當前棧頂的指針

struct os_tcb *OSTCBNext; 指向(TCB鏈表中)下一個TCB的指針

struct os_tcb *OSTCBPrev; 指向(TCB鏈表中)上一個TCB的指針

將這三個參數結合在一起來講述是為了便于理解任務控制塊之間的關聯。學過鏈表的人應該知道這個寫法,其實它就是將各個TCB構成一個關聯的表,利用指針將一個個TCB關聯起來。

指向上一個TCB的指針、指向當前TCB的指針、指向下一個TCB的指針,初學者只需要將這三個結合起來思考,理解起來就不難了。

2.任務運行時重要的OS_TCB參數

這里說的參數見上面截圖中最后紅色標記部分,這些參數是任務運行是重要的參數。

A.INT32U OSTCBDly;任務延時滴答 或 事件超時等待:

這個參數結合實例中三個任務的OSTimeDly函數一起理解就容易多了。OSTimeDly就是將該任務延時(該任務掛起)多少個滴答,其中重要的一個參數就是這里說的“OSTCBDly”,這個參數傳遞的信息就是延時。

B.INT8U OSTCBStat; 任務狀態:

這個參數就是一個標示,標示任務處于什么狀態。包括運行、掛起等,具體見ucos_ii.h第101行“TASK STATUS”的宏定義。

C.INT8U OSTCBStatPend; 任務懸掛狀態:

這個參數和上面“任務狀態”類似。主要包括三個狀態:OS_STAT_PEND_OK、OS_STAT_PEND_TO和OS_STAT_PEND_ABORT。詳情可見ucos_ii.h第117行“TASK PEND STATUS”的宏定義。

D.INT8U OSTCBPrio; 任務優先級:

任務優先級在學習UCOS之前都聽說過這個詞,這個參數就是標明任務優先級的參數。提示的是:任務優先級值越小,其優先級越高。所以,空閑任務優先級是設置最低。

E.優先級計算參數

INT8U OSTCBX; 優先級低3位對應的數值,即=prio&0x07

INT8U OSTCBY; 優先級高3位對應的數值,即=prio>>3

OS_PRIO OSTCBBitX; "對應"就緒表組的值 OSRdyTbl[OSTCBY] |= OSTCBBitX

OS_PRIO OSTCBBitY; 就緒表組 OSRdyGrp |= OSTCBBitY 即上面的"對應"組

這四個參數是計算任務優先級用的,至于是如何計算的,可以自己研究一下。

Ⅳ、實例工程下載

筆者針對于初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的代碼,對初學者一看就明白,以簡單明了的工程供大家學習。

筆者提供的實例工程都是在板子上經過多次測試并沒有問題才上傳至360云盤,歡迎下載測試、參照學習。

我將最新UCOS2.92操作系統移植到F0、F1、F3、F4各個硬件平臺上,可以根據你芯片系列選擇下載。

UCOS基于STM32F0、F1、F3、F4系列實例工程源代碼(匯總):

https://yunpan.cn/cM9Fjv88cXbjI訪問密碼 048d

本文所講述部分注釋修改為中文(軟件工程源代碼):

https://yunpan.cn/cMGZKfnVVb2Li訪問密碼 49c2

基于STM32平臺的UCOS源代碼工程(官方原始軟件工程)

官網下載(需要賬號):

https://www.micrium.com/downloadcenter/download-results/?searchterm=hm-stmicroelectronics&supported=true

360云盤下載:

https://yunpan.cn/cM9Gzv4drXqxv訪問密碼 c82c

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

    關注

    0

    文章

    5

    瀏覽量

    6479
  • STM32F10
    +關注

    關注

    0

    文章

    49

    瀏覽量

    16223
  • ucos2
    +關注

    關注

    0

    文章

    15

    瀏覽量

    3707
  • 操作系統內核

    關注

    0

    文章

    8

    瀏覽量

    2485
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Linux內核伙伴系統內存申請函數詳解:從原理到實戰

    在 Linux 內核中,內存管理是整個系統穩定運行的基石,而伙伴系統(Buddy System) 作為內核物理內存分配的核心機制,更是驅動開發、內核
    的頭像 發表于 02-10 16:58 ?3632次閱讀
    Linux<b class='flag-5'>內核</b>伙伴<b class='flag-5'>系統</b>內存申請函數詳解:從原理到實戰

    【瑞薩FPB-RA6E2試用】【瑞薩RA × Zephyr開發板評測】+線程創建及測試

    是存儲局部變量、函數調用記錄、CPU 寄存器狀態等。 棧大小需在創建時加以指定,若太小會溢出,而太大則會浪費內存。 線程控制 線程控制TCB
    發表于 02-03 21:33

    【瑞薩FPB-RA6E2試用】【瑞薩FPB-RA6E2】RTOS(Real-Time Operating System,實時操作系統)《線程》個人理解及項目實現

    時指定(太小會溢出,太大會浪費內存)。 2. 線程控制TCB, Thread Control Block) 內核為每個線程維護一個數據結
    發表于 01-14 11:50

    【「Linux 設備驅動開發(第 2 版)」閱讀體驗】Linux內核開發基礎

    感謝電子發燒友論壇提供的《Linux設備驅動開發(第2版)》閱讀機會,測評將從Linux內核開發基礎、Linux內核平臺抽象和設備驅動程序、發揮硬件潛力以及嵌入式領域內的多種內核子系統
    發表于 01-12 22:45

    【「Linux 設備驅動開發(第 2 版)」閱讀體驗】+讀內核處理的核心輔助函數

    上周收到《Linux 設備驅動開發(第 2 版)》書籍,這是一本介紹Linux內核開發的指導性書籍。全面了解Linux內核所提供的一些接口函數,是一位Linux設備驅動開發從業者所必備的知識點。書籍
    發表于 01-10 22:08

    米爾RK3506核心板SDK重磅升級,解鎖核A7實時控制新架構

    的操作系統選擇,更關鍵的是,通過軟件架構優化,全面激活了芯片的異構實時控制潛能,幫助您在工業通信、運動控制與邊緣計算場景中,構建性能、成本與可靠性平衡的解決方案。 一、按需選擇:
    發表于 12-19 20:35

    嵌入式基礎知識-系統調度

    完成實時任務,并控制所有實時任務協調一致運行的操作系統。 RTOS屬于多任務系統,與進程切換
    發表于 12-16 08:15

    什么是嵌入式操作系統

    、嵌入式操作系統的定義 嵌入式操作系統是專門為資源受限的嵌入式設備(比如 STM32 單片機、物聯網模塊、工業控制器)設計的微型操作系統,核心作用是:管理硬件資源、調度多
    發表于 12-09 10:33

    RTOS Crash 問題全維度分析與解決指南

    . 定時器/事件標志組泄露3. 任務創建數超過configMAX_PRIORITIES 內核返回錯誤碼(如errQUEUE_FULL)、后續API調用崩潰、系統無可用任務
    發表于 12-08 03:56

    ucos與freertos哪個好?

    選擇uCOS或FreeRTOS取決于項目的具體需求和資源限制。 FreeRTOS的優點包括: 更小的內核ROM和RAM占用,特別是在RAM方面,適合資源受限的嵌入式系統。 支持協程
    發表于 12-05 07:13

    單片機的操作系統

    搶占和輪轉調度,適用于低資源消耗場景(如STM32F0系列)。 ? ? μC/OS-II ?:搶占式多任務內核,支持64個任務,內存分區管理避免碎片,中斷嵌套深度達255層,適合工業控制系統
    發表于 11-14 06:18

    使用函數實現相電機正反轉控制

    在使用西門子S1200PLC,所使用的軟件是博途軟件,在這個軟件里運用了的概念。比如我們常見的組織(OB)、函數(FB)、數據(DB)以及函數FC等。今天我們來具體交流一下這個
    的頭像 發表于 10-15 14:40 ?2719次閱讀
    使用函數<b class='flag-5'>塊</b>實現<b class='flag-5'>三</b>相電機正反轉<b class='flag-5'>控制</b>

    氧濃度監控在熱壓鍵合(TCB)工藝過程中的重要性

    ,在高性能、高密度封裝領域占據了一席之地,傳統的倒裝回流焊封裝工藝,因其翹曲、橋接、移位等各種缺陷,逐漸被熱壓鍵合TCB所取代。本文主要跟大家分享的就是剖析熱壓鍵合技術,并探討氧氣濃度監控在TCB工藝中的重要性。 熱壓鍵合(TCB
    的頭像 發表于 09-25 17:33 ?1224次閱讀
    氧濃度監控在熱壓鍵合(<b class='flag-5'>TCB</b>)工藝過程中的重要性

    【RA4E2開發板評測】電壓檢測器 ThreadX顯示量程0-3300 mV+CPU利用率+任務當前使用棧

    續前【RA4E2開發板評測】電壓檢測器 ThreadX顯示量程0-3300 mV 了解系統使用情況對于系統優化和配置特別重要。 ThreadX 的 CPU 利用率主要是通過創建一個統計任務
    發表于 09-07 08:05

    強實時運動控制內核MotionRT750(一):驅動安裝、內核配置與使用

    強實時運動控制內核MotionRT750的驅動安裝與內核配置
    的頭像 發表于 07-03 15:48 ?3680次閱讀
    強實時運動<b class='flag-5'>控制</b><b class='flag-5'>內核</b>MotionRT750(一):驅動安裝、<b class='flag-5'>內核</b>配置與使用