uC/OS-III檔案結構
1、配置檔案
cpu_cfg.h:定義CPU相關指令(計算前導0)存在與否、CPU_NAME、時間戳、關中斷時間測量等CPU相關配置
lib_cfg.h:庫的相關配置
os_cfg.h:系統相關程式碼的配置,這部分是拓展性的,比如可以配置是否裁剪定時器等核心物件的巨集
os_cfg_app.h:系統相關程式碼配置,這部分是必須設定的,比如節拍頻率的配置
2、應用程式
app.c任務相關程式碼的編寫
app.h:任務相關宣告、堆疊大小定義、優先順序的設定
3、uC/OS-III與CPU無關程式碼
os_cfg_app.c:系統任務配置
os_type.h:核心物件資料型別定義、及相關程式碼
os_dbg.c:和除錯相關的資料型別的定義、及相關程式碼
os_flag.c:時間標誌組相關函式
os_int.c:中斷延遲相關函式
os_mem.c:記憶體分割槽相關函式
os_msg.c:訊息相關函式
os_mutex.c:二值訊號量相關函式
os_pend_multi.c:等待多個核心相關函式
os_prio.c:優先順序相關函式
os_q.c:佇列相關函式
os_sem.c:多值訊號樓相關函式
os_stat.c:統計資訊相關函式
os_task.c:任務相關函式
os_tick.c:時鐘節拍相關函式
os_time.c:時間管理相關函式
os_tmr.c:定時器相關函式
os_var.c:變數定義相關函式
os.h:相關資料型別結構定義
os_core.c:整個uC/OS-III相對比較底層的函式,供其他物件核心呼叫,另外部分是uC-III核心的函式
4、庫
lib_ascii.c
lib_ascii.h
lib_def.h
lib_math.c
lib_math.h
lib_mem_a.asm
lib_mem.c
lib_mem.h
lib_str.c
lib_str.h
5、uC/OS-III與移植相關的程式碼
os_cpu_a.asm:CPU相關的彙編函式定義及宣告,比如關中斷,前導零指令的呼叫
os_cpu_c.c:CPU相關c語言函式的定義及宣告,c語言計算前導零個數等。
os_cpu.h:CPU相關配置及以上兩個檔案函式的宣告
6、uC/OS-III與CPU相關的程式碼
cpu_def.h:CPU相關配置,比如關中斷方式,堆疊增長方向,字長等等
cpu_c.c:uC/OS-III封裝好的CPU相關c語言程式碼,比如中斷優先順序的配置
cpu_a.asm:uC/OS-III封裝好的相關彙編程式碼,比如關中斷
cpu_core.c:CPU初始化函式、CPU名字、時間戳計算CPU核心函式
cpu_core.h:CPU核心配置,編譯設定,cpu_core.c相關函式宣告等
7、其他CPU相關檔案
。。。
①配置檔案,通過定義這些檔案裡巨集的值可以輕易地裁剪 uC/OS-III 的功能。
②使用者應用檔案,定義和宣告應用任務。
③核心服務檔案,其程式碼與 CPU 無關,可以不做任何修改移植到任何 CPU。本書主要講解
這部分內容。
④底層函式庫,比如字串的常規操作,常用的數學計算,等等。
⑤CPU 移植檔案,使用者如果想要移植 uC/OS-III 到不同平臺上,需要修改這部分程式碼。
⑥CPU 配置檔案,主要是 CPU 的一些工作模式和服務函式。
⑦其他 CPU 相關檔案。
軟體定時器
軟體定時器的功能跟硬體定時器一樣,主要用於定時,但其精度達不到硬體定時器的標準,可以用於定時一些精度要求不是特別嚴格的事件。理論上,uC/OS-III 可以建立無數個軟體定時器,這是硬體定時器無法媲美的。
多值訊號量
多值訊號量主要用於管理資源和標誌事件的發生。 管理資源的一個常用仿例就是停車場,把總停車位看做訊號量,每次申請一個停車位訊號量就減 1,如果停車位為 0,就申請不到,但可以等待其它汽車釋放停車位。標誌事件的發生類似於裸機裡常用的事件標誌變數,就是標誌某事是否發生,然後通知任務。
互斥訊號量
互斥訊號量的作用是保護共享資源,避免共享資源正在被重寫時被其它任務讀取,這樣讀取到的資料就有錯誤。互斥訊號量的作用跟多值訊號量的作用有些重疊,多值訊號量的執行時間少於互斥訊號量,但多個任務訪問共享資源時,容易出現優先順序反轉的問題,這會降低系統的可預知性,而互斥訊號量可以防止優先順序反轉,所以建議在互斥訊號量可以解決需要時,就優先使用互斥訊號量。
訊息佇列
訊息佇列是由多個訊息串聯而成的一個機制, 需要訊息的任務就從訊息佇列的出口端獲取,如果訊息佇列裡沒有訊息了,可以選擇等待或者不等待訊息的到來。訊息可以比訊號量攜帶更豐富的資訊,可以是任意長度的訊息內容。
事件標誌組
事件標誌組用於標誌若干個事件否發生的組合。 這個功能可以輕易地實現鍵盤的按鍵組合。
任務訊號量
任務訊號量的作用與多值訊號量的一樣,但多值訊號量是所有任務都可以申請使用,而任務訊號量卻只能給一個特定任務使用,也就是說任務訊號量是一個任務本身的屬性,但其他任務都可以給這個任務傳送任務訊號量。
任務訊息佇列
任務訊息佇列的作用與(普通)訊息佇列的一樣,但(普通)訊息佇列是所有任務都可以申請它的訊息,而任務任務訊息佇列的訊息卻只能給一個特定任務使用,也就是說任務訊息佇列是一個任務本身的屬性,但其他任務都可以給這個任務傳送任務息。
記憶體管理(分割槽)
記憶體管理(分割槽)主要是為了儘量減少記憶體在不斷分配和釋放過程造成的記憶體碎片,避免過多的浪費記憶體。記憶體分割槽就是一次性開闢一大塊連續記憶體,然後將記憶體分割槽平均分成若干個記憶體塊,需要使用記憶體時就申請一個記憶體塊,用完了再釋放回記憶體分割槽,這樣就實現記憶體塊的迴圈使用。