1. 程式人生 > >μC/OS任務狀態及具體內容描述

μC/OS任務狀態及具體內容描述

1、任務的5種狀態:①睡眠狀態(任務只以程式碼的形式駐留在程式空間,還沒有交給作業系統管理時的情況)②就緒狀態(系統為任務配備了任務控制塊且在任務就緒表中進行了就緒登記)③執行狀態(處於就緒狀態的任務經過排程獲得了CPU的使用權)④等待狀態(正在執行的任務,需要等待一段時間或者需要等待一個事件發生在執行的時候為等待狀態)⑤中斷服務狀態(一個正在執行的任務一旦響應中斷申請就會中止執行而去執行中斷服務程式)

25種狀態之間的轉換


1.任務的執行程式碼通常是一個無限迴圈結構,為了有效的對中斷進行控制,可使用定義的巨集OS_ENTER_CRITICAL()OS_EXIT_CRITICAL()

來控制任務何時響應中斷,何時遮蔽中斷。在執行這兩個巨集之間的程式碼時是不會響應中斷的,這種受程式碼抱回的程式碼段叫做臨界段

μC/OS預定義了兩為應用程式服務的系統任務,空閒任務和統計任務。空閒任務是每個應用程式必須使用的,而統計任務是應用程式根據實際需要來選擇使用的

1.空閒任務

在空閒任務的程式碼中有一行為pdata=pdata,因為在這個任務中沒有用到引數pdata。因為一些編譯器會對一個定義了卻沒有使用的變數進行報錯,從而加了這行程式碼,那麼編譯器就不會報錯

2.統計任務(OSTaskStat())

統計任務每秒計算一次CPU在單位時間內被使用的時間,並把計算結果以百分比的形式存放在變數

OSC-PUUsage

2.1.4

μC/OS把任務的優先級別分成64個優先級別,用數字來表示每一個級別,0表示任務的優先級別最高,數字越大表示任務優先級別越低

2.2

堆疊,就是在儲存器中按資料“後進先出(LIFO)”的原則組織的連續儲存空間,任務堆疊是任務的重要組成部分

2.2.1

為了方便定義任務堆疊,定義一個數據型別OS-STK : typedef unsigned int OS-STK(該型別長度為16位)

1#define TASK_STK_SIZE 512  //定義堆疊的長度(1024位元組)

OS_STK TaskStk[TASK_STK_SIZE]  //定義一個數組來作為任務堆疊

當呼叫函式OSTaskCreate()來建立任務時,把陣列的指標傳遞給函式OSTaskCreate()中的堆疊棧頂引數ptos,就可以把該陣列與任務關聯起來而成為該任務的任務堆疊

建立任務函式OSTaskCreate()的原型:

INT8U OSTastCreate(

                 void (*task)(void *pd),  //指向任務的指標

                 void *pdata,          //傳遞給任務的引數

                 OS_STK *ptos,        //任務堆疊棧頂的指標

                 INT8U prio           //指定任務優先級別的引數

                 );

2、堆疊的增長方向隨系統的處理器的不同而不同,增長方向分為向下增長或者向上增長

3、對於處理向上增長的堆疊(處理器支援向下增長的堆疊)方式:

OSTaskCreateMyTask&MyTaskAgua&MyTaskStk[0],20;

2.2.2

任務堆疊的初始化工作應該由作業系統負責,μC/OS-II在建立任務函式OSTaskCreate()中通過呼叫任務堆疊初始化函式OSTaskStkInit()來完成任務堆疊的初始化工作,原型為:

OS_STK *OSTaskStkInit(

                   Void (*task) (void *pd),

                   Void *pdato,

                   OS_STK *ptos,

                   INT16U opt

                   );

2.3

1、μC/OS-II用來記錄任務的堆疊指標、任務的當前狀態、任務的優先級別等一些與任務管理有關的屬性的表稱作任務控制塊(OS_TCB

2、任務控制塊是一個數據型別資料,當程式呼叫OSTaskCreate()函式的時候,這個函式就會對任務控制塊中的所有成員賦予與該任務相關的資料,並且駐留在RAM

OSTCBStat的成員變數



1、μC/OS-II用兩條連結串列來管理任務控制塊,一條是空任務塊連結串列(在應用程式呼叫函式OSInit()對μC/OS-II系統進行初始化建立的),另一條是任務塊連結串列(在呼叫函式OSTaskCreate()建立任務時建立的)

2、μC/OS-II初始化時建立的一個空的任務控制塊連結串列


1、μC/OS-II任務控制塊連結串列和OSTCBPrioTHl[ ]陣列及變數OSTCBCur


任務控制塊的初始化:OSTaskCreate()函式首先為被建立任務從空任務控制塊連結串列獲取一個任務控制塊,然後用任務的屬性對任務控制塊各個成員進行賦值,最後在把這個任務控制塊鏈入到任務控制塊連結串列的頭部

2.4

1、多工作業系統的核心工作就是任務排程。所謂排程,就是通過一個演算法在多個任務中確定哪個任務來執行,做這項任務的函式就叫做排程器

2、μC/OS-II進行任務排程的依據就是任務就緒表


①由圖可以看到,系統總是從屬於就緒狀態的任務中來選擇一個任務執行。μC/OS-II用一個型別為INT8U的陣列OSRdyTbl[]來充當任務就緒表,而且此圖也表示的是一個最多可記錄32個任務就緒狀態的任務就緒表。在此就緒表當中,是以任務的優先級別高低為順序,為每個任務安排一個二進位制位,並規定該位的值為1表示對應的任務處於就緒狀態,若值為0表示對應的任務處於非就緒狀態。

②由圖可看出,由於每個任務的就緒狀態只佔據一位,因此OSRdyTbl[]陣列的一個元素可表達8個任務的就緒狀態

3、變數OSRdyGrp的格式及含義


由於變數OSRdyGrp8個二進位制位,每位對應OSRdyTbl[]陣列的一個元素,每個元素可記錄8個任務的就緒狀態,從而μC/OS最多可管理8*8=64個任務。

①根據優先級別查詢任務在就緒表中的位置:優先級別是一個單位元組的數字,而且其最大值不會超過63,即二進位制位00111111,從而可把優先級別看成一個6位的二進位制數,這樣就可以用高3位(D5D4D3)指明變數OSRdyGrp的具體資料位,且用來確定就緒表陣列元素的下標;用低三位(D2D1D0)來指明該陣列元素的具體資料位。


相關推薦

μC/OS任務狀態具體內容描述

1、任務的5種狀態:①睡眠狀態(任務只以程式碼的形式駐留在程式空間,還沒有交給作業系統管理時的情況)②就緒狀態(系統為任務配備了任務控制塊且在任務就緒表中進行了就緒登記)③執行狀態(處於就緒狀態的任務經過排程獲得了CPU的使用權)④等待狀態(正在執行的任務,需要等待一段時間

μC/OS排程器任務建立、掛起、恢復、刪除、初始化函式的使用

1、在多工系統中,令CPU中止當前執行的任務轉而去執行另一個任務的工作叫做任務切換,而按照某種規則進行任務切換的工作叫做任務的排程 2、在μC/OS-II中,任務排程是由任務排程器來完成的 3、任務排程器主要兩項工作:①在任務就緒表中查詢具有最高優先級別的就緒任務②中斷級的

µC/OS-Ⅱ任務切換函式OSCtxSw()原型

任務級的切換問題是通過發軟中斷命令或依靠處理器執行陷阱指令來完成的。中斷服務例程,陷阱或異常處理例程的向量地址必須指向OSCtxSw()。        如果當前任務呼叫µC/OS-Ⅱ提供的系統服務,並使得更高優先順序任務處於就緒狀態,µC/OS-Ⅱ就會藉助上面提到的向量地

Linux命令備忘錄: jobs 顯示Linux中的任務列表任務狀態命令

Linux jobs命令用法詳解:顯示Linux中的任務列表及任務狀態命令 jobs命令用於顯示Linux中的任務列表及任務狀態,包括後臺執行的任務。該命令可以顯示任務號及其對應的程序號。其中,任務號是以普通使用者的角度進行的,而程序號則是從系統管理員的角度來看的。一個任務可以對應於一個或者多個程

C++設計模式——簡單工廠模式具體應用(含例子)

前言 Iphone 6即將面世過程中,富士康集團正在為Iphone6的面世做著最後的衝刺,生產線上的工人正忙碌著為Iphone6進行各道流程的加工操作。作為代工工廠,富士康為世界上IT巨頭,如:蘋果,惠普等加工出各種產品。市場上看到的各種品牌電腦,絕大部分來在富士康這

μC/OS Ⅱ學習筆記--空閒任務和統計任務

μC/OS Ⅱ中的空閒任務與統計任務 空閒任務        先上一段轉自他人部落格的一段關於空閒任務為什麼存在的一段描述: uc/os-II作業系統關於空閒任務是這樣描述的:     1、系

μC/OS Ⅱ學習筆記--任務的排程

任務就緒表 任務就緒表的結構         μC/OS Ⅱ是一個搶佔式實時作業系統,當前執行的任務總是就緒佇列中優先順序最高的那一個任務。所以μC/OS Ⅱ的任務排程機制就是挑選就緒佇列中優先順序最高的任務,然後切換任務執行

μC/OS-II與RT-Thread對比——任務排程

        RT-Thread中提供的執行緒排程器是基於優先順序的全搶佔式排程:在系統中除了中斷處理函式、排程器上鎖部分的程式碼和禁止中斷的程式碼是不可搶佔的之外,系統的其他部分都是可以搶佔的,包括執行緒排程器自身。系統總共支援256個優先順序(0 ~ 255,數值越小的優先順序越高,0為最高優先順序,2

詳解μC/OS-II如何檢測任務堆疊實際使用情況——即如何設定ucosii任務堆疊大小

不少屌絲同學都有類似經歷吧,在使用ucosii建立任務時,關於任務堆疊大小設為多大合適搞的不清不楚,鬱悶之下就隨便整個數,比如就1024吧,呵呵,反正也沒見得出問題,那就不多想了。         我想大多數同學都是這樣做的吧。這樣只是因為在一般情況下,1024確實已經足夠

μC/OS-II 的任務排程演算法分析

/* ********************************************************************************************************* *                                       PRIORI

uC/OS-III-6.2-uC/OS-III內部任務管理(任務狀態

1.任務狀態 從使用者的觀點來看,任務可以是有 5種狀態,見圖 5-6。展示了任務狀態間的轉換關係。 {休眠狀態,就緒狀態,執行狀態,掛起狀態,中斷狀態} (1).處於休眠狀態的任務駐留於記憶體但未被uC/OS-III使能。通過呼叫OSTaskCrea

µC/OS-II核心任務排程模組的擴充套件

  摘 要:µC/OS-II是一個實時作業系統核心,支援64種不同優先順序的任務。以簡單實用為原則,借用核心中的兩個優先順序任務,充當時鐘源和輪詢引擎,讓同級任務在最低優先順序任務下輪流執行。這在不失實時性的前提下,讓核心支援多達192個同級任務,極大地擴充套件了µC/OS

嵌入式實時作業系統uc-os-ii原理應用 第三章 uc/os-ii中的任務

3.1-3.4.3  印象比較深的點在作業系統中程式叫做程序或執行緒。系統任務:空閒任務和統計任務。不同處理器,堆疊的增長方向不同。實時作業系統,時間操作必須為常量,所以不能用for,配合break或continue。不然每個任務執行時間不同。

C語言獲取檔案長度全部內容

       FILE*fp;        fp=fopen("localfile","rb");// localfile檔名              fseek(fp,0L,SEEK_END); /* 定位到檔案末尾 */   flen=ftell(fp); /*

PHP實現獲取“分享到朋友圈”按鈕點選狀態自定義分享內容介面

1.請參考我上個文章http://blog.csdn.net/wxs55555/article/details/72652058生成選單 { "button": [ { "type": "view",

C語言獲取檔案位元組大小讀取內容到記憶體簡單例子

說明:此方式主要用於讀取檔案為內容連續無換行符檔案(如json資料),若有很多換行符想讀取每行資料或挑出哪一行資料讀取可用別的方法更易讀取。 demo: #include <stdio.h> #include <stdlib.h> #

獲取印表機連線狀態列印任務是否錯誤

HANDLE   PrnHandle;        if   (OpenPrinter("EPSON Stylus Photo R270 Series",&PrnHandle,NULL))        {           unsigned    char

【BZOJ1935/4822】[Shoi2007]Tree 園丁的煩惱/[Cqoi2017]老C任務 樹狀數組

tchar get ont n+1 div 區域 spa 都是 struct 題意:兩道題差不多,都是給你一堆平面上的點,每個點有權值,然後m次詢問求某一矩形區域內的點權和 題解:先離散化,然後將詢問拆成左右兩條線段,然後將點和這些線段一起按x坐標排序,在y軸上維護樹狀數

Python-模塊:OS,目錄文件的簡單操作

-1 close pytho print nbsp nco 刪除目錄 os.path window 1.目錄操作 #encoding=UTF-8import unittest,osfrom time import sleep print dir(os)#獲取文件路徑‘‘‘獲

C語言printf()函數具體解釋和安全隱患

color getc .net 正常 world! print hello mat 內容 一、問題描寫敘述 二、進一步說明 請細致註意看,有例如以下奇怪的現象 int a=5; floatx=a;