UCOS III學習筆記(個人總結)

2021-07-03 14:33:56 字數 3109 閱讀 8663

一、ucosiii簡介

二、usosiii源**分析

1、evalboards資料夾

stm32f4的工程檔案。

2、uc-cpu資料夾

與cpu相關的**。

3、uc-lib資料夾

由可移植並且與編譯器無關的函式組成。

3、ucos-iii資料夾

1),ports檔案:與cpu平台有關的檔案。

2),source檔案:ucosiii的源**,具體如下:

三、ucos-iii的移植步驟

1、向工程中新增相應的檔案。

2、修改bsp.c和bsp.h檔案。

3、修改os_cpu_a.asm檔案。

4、修改os_cpu_c.c檔案。

6、修改system資料夾

(1)、修改sys.h檔案

(2)、修改delaly.c檔案

7、移植完畢,編寫 簡單測試程式測試移植是否正確。

三、ucos-iii的任務管理

1、ucos-iii的啟動和初始化

2、任務狀態

3、任務控制塊

任務控制塊os_cpu是ucos-iii中的一種資料結構。用來儲存任務的資訊,用ostaskcreate()函式來建立任務的時候就要給任務分配乙個任務控制塊。任務控制塊是乙個結構體。

4、任務堆疊

任務堆疊用來在切換任務和呼叫其他函式的時候儲存現場。

定義堆疊的格式:

用下面紅色的指令表示將建立的堆疊傳遞給任務

5、任務就緒表

ucos-iii將已經就緒的任務放到任務就緒表裡面,分為兩部分:

(1),優先順序位對映表ospriotbl

(2),就緒任務表osrdylist

任務就緒表操作函式:

6、任務排程和切換

(1)可剝奪型排程

任務排程和切換就是讓就緒表中優先順序最高的任務獲得cpu的使用全年,ucos-iii是可剝奪型,搶占式的rtos,可以搶了低優先順序任務的cpu使用權。

1)任務排程器

任務排程器位ossched(),在os_core.c檔案中。如下圖:

2)中斷排程器

中斷級排程器為osintexit(),呼叫osintexit()時,中斷應該是關閉的。**如下:

(2)時間片輪轉排程

ucos-iii中支援多個任務同時擁有同乙個優先順序,要使用這個功能,需要定義os_cfg_sched_round_robin_en為1.

ucos-iii允許乙個任務允許一段時間()

片後讓出cpu的使用權,讓擁有統一優先順序的下乙個任務執行。

四、任務相關api函式使用

4.1、任務建立和刪除實驗

ostaskcreate()函式用來建立任務;

ostaskdel()函式用來刪除任務。

4.2、任務掛起和恢復實驗

ostsaksuspend()函式,使任務暫停執行;

ostaskresume()函式用來恢復掛起的任務。

4.3、時間片輪轉排程實驗

要使用時間片輪轉排程發,就要將ox_cfg.h檔案中的巨集os_cfg_sched_round_robin_en定義為1.

4.3.1、osschedroundrobincfg()函式用來使能或者失能ucos-iii.

4.3.2、osschedroundrobinyield()函式:

當乙個任務想放棄本次時間片,把cpu的使用去讓給同優先順序的下乙個任務的時候使用。

五、ucos-iii的中斷和時間管理

5.1、ucos-iii中斷處理過程:

編寫中斷服務程式需要用到osintenter( )和osintexit()。

中斷服務函式格式:

5.2、直接發布和延遲發布的對比:

5.3、ostimetick ()函式

systick的中斷服務程式中就必須呼叫ostimetick()函式。

**如下:

5.4、臨界段**保護

有些**需要保證完整執行,不能被打斷,這就是臨界段**。

進入臨界段**使用巨集os_critical_enter(),

退出臨界區使用巨集os_criticla_exit( ).

5.5、時間管理

5.5.1 ostimedly()函式

進行延時操作時用到。

5.5.2、ostimedlyhmsm()函式

更加直觀的對某個任務延時。

六、ucos-iii的軟體定時器

6.1、定時器的工作模式

1) 如果要使用定時器,就要把巨集os_cfg_tmr_del_en定義為1.

2)定時器的解析度由系統節拍頻率os_cfg_tick_rate_hz決定。

6.1.1建立乙個定時器

ostmrcreate()函式建立乙個定時器

6.1.2單次定時器

把引數opt設定為os_opt_tmr_one_shot

6.1.3週期定時器(無初始化延遲)

把引數opt設定為os_opt_tmr_periodic

6.1.4週期定時器(有初始化延遲)

七、ucos-iii的訊號量和互斥訊號量

7.1訊號量

有關訊號量的api函式如下表:

7.2優先順序反轉

7.3互斥訊號量

為了避免優先順序反轉為題,ucos-iii支援二進位制訊號量:數值訊號量。

互斥型訊號量操作的api函式:

7.4直接訪問共享資源區

7.5使用訊號量訪問共享資源區

7.6任務同步

八、ucos-iii訊息傳遞

8.1訊息佇列

訊息一般包括:指向資料的指標,表明資料長度的變數和記錄訊息發布時刻的時間戳。

指標指向的可以是一塊資料區或者乙個函式,訊息的內容必須一直保持可見性,發布資料採用的是引用傳遞而不是值傳遞。也就是說,發布的資料本身不產生資料拷貝。

ucos-ii中有訊息郵箱和訊息佇列。

ucos-iii中只有訊息佇列。

8.2訊息佇列相關函式

九、事件標誌組

9.1、事件標誌組

用來解決乙個事件和多個任務同步的方法。

兩種同步機制:

「或」同步:當任何乙個事件發生,任務都被同步。

「與」同步:需要所有的事件發生才會被同步。

同步機制如下圖:

UCOS III學習筆記(一)

使用者指定元素的位數 如32bit 那麼ospriotbl結構即為任務就緒表,其中每乙個元素是乙個使用者制定位數的元素 os priogethighest 函式遍歷這個陣列並找到第乙個不為零的元素 找到那一行 計算這個元素的前導零個數之後即可得到最高的優先順序任務 前導零為乙個二進位制數第乙個1前出...

uc os iii學習筆記 任務管理

記了幾篇筆記後發現,基本就是在抄書,而且由於本人繪圖能力有限,也無法貼上圖表去說明,可能導致後來的讀者完全摸不清頭腦,所以再次宣告,本人只是在給自己做知識點筆記,相關圖示和介紹請閱讀書籍 嵌入式實時作業系統us os iii void ostaskcreate os tcb p tcb,cpu ch...

uc os iii學習筆記 中斷管理

中斷 應內部或外部非同步事件的請求中止當前任務,而去處理非同步事件所要求的任務的過程叫做中斷 void usart1 irqhandler void 進入中斷服務函式以後使用函式osintenter void osintenter void if osintnestingctr os nesting...