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

2021-07-22 09:35:19 字數 3576 閱讀 6039

ⅰ、寫在前面

ucos2_stm32f1移植詳細過程(彙總文章)

ucos2系統核心講述(一

)_總體描述

ucos2系統核心講述

(二)_初始化呼叫函式

tcb任務控制塊是用來記錄任務的堆疊指標、任務的當前狀態、任務的優先級別等一些與任務有關屬性的乙個資料結構表(因此,學習本文之前需要了解資料結構)。任務控制塊相當於乙個任務的「身份證」,它記錄著任務的重要資訊。

對於系統核心而言,各個任務就是通過控制任務塊將其鏈結成乙個表。因此,任務控制塊在任務中佔據重要地位。

本文還是結合前面移植好、可以執行的源**來進行講述關於

最新版本

ucos2系統核心部分**(圍繞源**來講述)。

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

下看。

ⅱ、

全域性tcb

在該函式中可以看到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    即上面的"對應"組

這四個引數是計算任務優先順序用的,至於是如何計算的,可以自己研究一下。

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

ucos基於stm32f0、f1、f3、f4系列例項

工程源**(彙總)

:訪問密碼 048d

訪問密碼 49c2

基於stm32平台的ucos源**工程(官方原始軟體工程)

訪問密碼 c82c

、說明當你掌握ucos在一種平台上的移植,其他平台移植原理類似,請不要侷限某一平台。

以上總結僅供參考,若有不對之處,敬請諒解。

ⅵ、最後

UCOS2系統核心講述(二) 初始化呼叫函式

寫在前面 ucos2 stm32f1移植詳細過程 彙總文章 ucos2系統核心講述 一 總體描述 本文還是結合前面移植好 可以執行的源 來進行講述關於 最新版本 ucos2系統核心部分 圍繞源 來講述 本文講述的內容不必深入理解,可以先做個了解。下看。osinit 所呼叫的函式 我將osinit所呼...

ucos2學習筆記 3 核心架構

核心結構 1.處理臨界 為了是有些 不被中斷或其他任務打斷,使其完整操作,同時核心中有 許多臨界 需要儲存。從而ucos中加入開關中斷的巨集定義 os enter critical 關中斷 os exit critical開中斷 在ocos2中,開關中斷有有三種實現方法 1 os critical ...

UCOS2作業系統學習筆記(4)

讀 嵌入式實時作業系統uc os ii 第二版 1 與處理器型別無關的 p73 os core.c os flag.c os mbox.c os mem.c os mutex.c os q.c os sem.c os task.c os time.c ucos ii.c ucos ii.h 2 與應...