一、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...