UCOSII啟動流程詳解(結合原始碼分析)
μC/OS-Ⅱ初始化
在呼叫μC/OS-Ⅱ的任何其它服務之前,μC/OS-Ⅱ要求使用者首先呼叫系統初始化函式
OSIint()。OSIint()初始化μC/OS-Ⅱ所有的變數和資料結構(見 OS_CORE.C)。OSInit()建立空閒任務 idle task,這個任務總是處於就緒態的。空閒任務 OSTaskIdle()的優先順序總是設成最低,即 OS_LOWEST_PRIO。如果統計任務允許 OS_TASK_STAT_EN 和
任務建立擴充套件允許都設為 1,則 OSInit()還得建立統計任務 OSTaskStat()並且讓其進入就
緒態。OSTaskStat 的優先順序總是設為 OS_LOWEST_PRIO-1。
μC/OS-Ⅱ還初始化了 4 個空資料結構緩衝區,每個緩衝區都是單向鏈
表,允許μC/OS-Ⅱ從緩衝區中迅速得到或釋放一個緩衝區中的元素。注意,空任務控制塊
在空緩衝區中的數目取決於最多工數 OS_MAX_TASKS,這個最多工數是在 OS_CFG.H 檔案中定義的。μC/OS-Ⅱ自動安排總的系統任務數 OS_N_SYS_TASKS(見檔案μC/OS-Ⅱ.H)。控制塊 OS_TCB 的數目也就自動確定了。當然,包括足夠的任務控制塊分配給統計任務和空閒任務。
μC/OS-Ⅱ的啟動
多工的啟動是使用者通過呼叫 OSStart()實現的。然而,啟動μC/OS-Ⅱ之前,使用者至少
要建立一個應用任務,如下程式清單所示:
OSStart()的程式碼如下所示:
當呼叫 OSStart()時,OSStart()從任務就緒表中找出那個使用者建立的優先順序最高任務的任務控制塊[L3.25(1)]。然後,Start()呼叫高優先順序就緒任務啟動函式 OSStartHighRdy()[(2)],(見組合語言檔案 OS_CPU_A.ASM),這個檔案與選擇的微處理器有關。實質上,函式 OSStartHighRdy()是將任務棧中儲存的值彈回到CPU 暫存器中,然後執行一條中斷返回指令,中斷返回指令強制執行該任務程式碼。OSStartHighRdy()將永遠不返回到 OSStart()。