1. 程式人生 > >uc/os-iii學習筆記-任務排程

uc/os-iii學習筆記-任務排程

可剝奪含義:
ucos-iii採用的是“可剝奪型”,意味著當一個事件發生,並且使得一個更高優先順序任務就緒時,ucos就會立即將CPU的控制權剝奪,轉交給更高優先順序的任務使用。當一個任務將訊號量釋放給一個更高優先順序的任務,當前任務就會掛起,而更高優先順序的任務則獲得CPU的控制權。同樣,如果是一箇中斷服務程式ISR向一個更高優先順序的任務釋出了訊息或釋放了訊號量,則被中斷的任務將會保持掛起,而新的優先順序更高的任務將會得到執行。

可剝奪型任務排程

任務排程就是中止當前正在執行的任務轉而去執行其他的任務。
UCOSIII是可剝奪型核心,因此當一個高優先順序的任務準備就緒,並且此時發生了任務排程,那麼這個高優先順序的任務就會獲得CPU的使用權!
UCOSIII中的任務排程是由任務排程器來完成的,任務排程器有2種:任務級排程器和中斷級排程器。
任務級排程器為函式OSSched()


中斷級排程器為函式OSIntExit(),當退出外部中斷服務函式的時候使用中斷級任務排程。

任務排程點:

1、釋放訊號量或者傳送訊息,也可通過配置相應的引數不發生任務排程。
2、使用延時函式OSTimeDly()或者OSTimeDlyHMSM()。
3、任務等待的事情還沒發生(等待訊號量,訊息佇列等)。
4、任務取消等待。
5、建立任務。
6、刪除任務。
7、刪除一個核心物件。
8、任務改變自身的優先順序或者其他任務的優先順序。
9、任務通過呼叫OSTaskSuspend()將自身掛起。
10、任務解掛某個掛起的任務。
11、退出所有的巢狀中斷。
12、通過OSSchedUnlock()給排程器解鎖。
13、任務呼叫OSSchedRoundRobinYield()放棄其執行時間片。
14、使用者呼叫OSSched()。

有時候我們並不希望發生任務排程,因為始終有一些程式碼的執行過程是不能被打斷的。此時我們就可以使用函式OSSchedLock()對排程器加鎖,當我們想要恢復任務排程的時候就可以使用函式OSSchedUnlock()給已經上鎖的任務排程器解鎖

時間片輪轉排程

UCOSIII允許一個優先順序下有多個任務,每個任務可以執行指定的時間(時間片),然後輪到下一個任務,這個過程就是時間片輪轉排程,當一個任務不想在執行的時候就可以放棄其時間片。
時間片輪轉排程器為:OS_SchedRoundRobin()

如圖,3個同一優先順序任務,每個任務都是4個時間片。
時間片輪轉排程

相關推薦

uc/os-iii學習筆記-任務排程

可剝奪含義: ucos-iii採用的是“可剝奪型”,意味著當一個事件發生,並且使得一個更高優先順序任務就緒時,ucos就會立即將CPU的控制權剝奪,轉交給更高優先順序的任務使用。當一個任務將訊號量釋放給一個更高優先順序的任務,當前任務就會掛起,而更高優先順序的

uc/os-iii學習筆記-資源管理(中斷、訊號、訊號量、互斥訊號量)

資源管理 最常用的獨佔共享資源和建立臨界區的方法有以下幾種: 關、開中斷 獨佔共享資源最簡單也是最快捷的方法就是關中斷和開中斷,當訪問共享資源的速度很快,以至於訪問共享資源所花的時間小於中斷的關閉時間時,可以使用關、開中斷方法。但是不推薦此方法

uc/os-iii學習筆記---儲存管理(記憶體管理)

記憶體管理 我本人覺得記憶體管理反而是最容易的管理函式。 作為一個RTOS作業系統,記憶體管理是必備的功能,因此UCOSIII也就記憶體管理能力。通常應用程式可以呼叫ANSI C編譯器的malloc()和free()函式來動態的分配和釋放記憶體,但是在嵌

uC/OS-II 學習筆記之:訊息佇列

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

uC/OS-II 學習筆記之:訊息郵箱

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

uC/OS-II學習筆記(1)

by WC 7.9.2015 本文假設讀者對uC/OS-II和多工知之甚少,但有一定的C語言和微控制

UC/OS-II學習筆記之訊息佇列使用

對訊息佇列的學習理解有點難,對技術來說,一本好的書一般是原理和例子相結合的,可惜我找到的很少。書上說訊息佇列實際上是多個郵箱組成的陣列,是一個列表。這個陣列其實是個指標陣列,裡面每個指標可以指向不同型別的變數,通過傳遞一個個指標,我們可以做到傳遞指標所指向的一個個變數。(順便複習下,一個郵箱只能傳遞一個指標,

uC/OS-II 學習筆記:訊息佇列

二、訊息佇列的操作函式: (1)建立訊息佇列函式:OS_EVENT OSQCreate(void **start, INT16U size) (2)請求訊息佇列函式:void *OSQPend(OS_EVENT *pEvent, INI16U timeout, INT8U *err) (3)向訊息佇列傳送訊息

uC/OS-II學習筆記 訊息佇列

對訊息佇列的學習理解有點難,對技術來說,一本好的書一般是原理和例子相結合的,可惜我找到的很少。書上說訊息佇列實際上是多個郵箱組成的陣列,是一個列表。這個陣列其實是個指標陣列,裡面每個指標可以指向不同型別的變數,通過傳遞一個個指標,我們可以做到傳遞指標所指向的一個個變數。(順便

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

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

UCOS-III學習筆記——OS獲取CPU控制權深入理解

μC/ OS III Version: v3.03.01 μC/ CPU Version: v1.29.01 μC/ LIB Version: v1.37.00 FOR: NXP LPC1768 CPU 在UCOS-III學習筆記——main函式中的配

uC/OS-III-6.3-uC/OS-III內部任務(統計任務 OS_StatTask())

1.這個任務能夠統計總的CPU使用率(0到100%),每個任務的CPU使用率( 0到100%),每個任務的堆疊使用量。 2.統計任務在uC/OS-III中是可選的,當設定OS_CFG.H中的OS_CFG_STAT_TASK_EN為1時,統計任務的程式碼會被包含

uc/OS III任務的理解

任務的概念在實際應用中一般是將工作拆分為多個任務的,並且每個任務都是可靠的。在使用uC/OS就可以很好的解決這個問題,任務又叫執行緒,在對於單個CPU來說,在任何時刻,都是隻能有有一個任務被執行。uC/OS-III 支援多工且對任務數量沒有限制,任務數僅取決於處理器記憶體的大

uC/OS-III任務訊號量

1.給任務釋出訊號量是一種非常常用的同步方法,因此,在uC/OS-III中,每個任務都有它自己的內嵌訊號量。 2.當建立任務時,任務訊號量會被自動建立,且初始計數為零。 3.等待任務訊號量使用函式OSTaskSemPend(),它的定義位於os_task.c

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

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

uC/OS-III統計任務堆疊、CPU使用率

1、讀取任務堆疊使用函式 OSTaskStkChk(&TaskBStkTCB,&stk_free,&stk_used,&err); Void OSTaskStkChk(OS_TCB *p_tcb,CPU_STK_SIZE* p_free,C

uC/OS-III 任務詳解(四)

uC/OS系統的任務一般都放在最開始介紹,我放在第四章主要是對模糊的概念作清晰的講解。 從使用者的角度來看,uC/OS-III 中的任務可以分為5 種狀態,分別是休眠態、就緒態、執行態、掛起態和中斷態,如下表所示。      任務狀態之間的具體切換情況如下圖所示。  

uc/os iii移植到STM32F4---IAR開發環境

iar 開發 移植 問題 函數 中斷 發現 返回 設定 也許是先入為主的原因,時鐘用不慣Keil環境,大多數的教程都是拿keil寫的,嘗試將官方的uc/os iii 移植到IAR環境。 1、首先嘗試從官網上下載的官方移植的代碼,編譯通過,但是執行會報堆棧溢出警告(為何kei

μC/OS-III---I筆記13---中斷管理

using 鏈表 oss efault ren skin bool 無法 while 中斷管理先看一下最常用的臨界段進入的函數:進入臨界段 OS_CRITICAL_ENTER() 退出臨界段OS_CRITICAL_EXIT()他們兩個的宏是這樣的. 在使能中斷延遲提交時:

Linux學習_任務排程基本說明

crond 任務排程 crontab 進行定時任務的設定 概述 任務排程:是指系統在某個時間執行的特定的命令或程式。 任務排程分類: 1.系統工作:有些重要的工作必須周而復始地執行。如病毒掃描等 2.個別使用者工作:個別使用者可能希望執行某些程式,比如對my