Ⅰ、寫在前面
學習本文之前可以參看我前面的文章:
UCOS2系統內核講述(一)_總體描述
還是按照上一篇文章的思維(從外到內),本文(結合源代碼)進一步深入UCOS系統內核,我會將講述過的源代碼注釋修改為中文,提供給大家參考。
上一篇文章總體描述了一下整個工程“外圍”的代碼,本文將進一步“入圍”,進一步講述OSInit所調用的函數。
本文還是結合前面移植好、可以運行的源代碼來進行講述關于最新版本UCOS2系統內核部分代碼(圍繞源代碼來講述)。
本文講述的內容不必深入理解,可以先做個了解。
關于本文的更多詳情請往下看。
Ⅱ、OSInit所調用的函數
上一篇文章大概講述了關于該函數的內容,本文將進一步講述OSInit系統初始化。
我將OSInit所調用的函數分為兩類:必須類和非必須類。
必須類:與系統、任務緊密相關的初始化。其實這些初始化就是對變量、結構體等賦予初始值。(如:系統運行標志位初始化暫停運行、最高優先級指向空等)它們的初始化位于系統內核os_core.c里面。
非必須類:這一類就是可以不調用來初始化的一類。從代碼可以看他們前面有一個預處理標志位【如:#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)】,這些標志位位于os_cfg.h(前面說過系統的裁剪),當我們不使用這些功能時,也就是系統裁剪掉了這些功能,它們就不會被初始化。
事件標志組、內存管理、消息隊列等這些就屬于非必須類,它們的初始化位于自身的.c文件里面(不位于os_core.c)。【如:OS_FlagInit位于os_flag.c文件里面】
下面講述一下必須類(非必須類在后面結合相關資源講述):
1.OS_InitMisc(必須類)
這個函數會被OSInit()調用來初始化各項變量。對紅色框內參數初始化數值,這些參數是系統必須的變量,類似于我們定義一個全局變量,初始的時候對它進行賦值。
2.OS_InitRdyList(必須類)
這個函數被OSInit()調用來初始化就緒表。這里說的就緒表其實指的是把一個一個任務排列成一個表,要將這個表初始化的意思。要執行響應任務就需要知道任務的優先級、任務控制塊、目前指向的任務等一系列信息。
3.OS_InitTCBList(必須類)
這個函數會被OSInit()調用來初始化空閑TCB(任務控制塊)。這個初始化函數包含的信息是比較難的,也是系統比較重要的(后面會對TCB進行講述)。
所謂任務控制塊,就是控制任務相關變量數據信息各類的結構體的歸類,其結構體里面包含的信息是很多的。
理解TCB就需要對數據結構有一定的熟悉才行。
4.OS_InitEventList(必須類)
這個函數會被OSInit()調用來初始化空閑ECB(事件控制塊)。這個函數雖然我把它歸類到系統必須類這一塊,其實不完全正確。這里所說的事件,其實就是系統相關資源(消息隊列、郵箱、信號量、互斥信號量等)的一個或集。在ucos_ii.h中可以看到下面宏定義:
#define OS_EVENT_EN (((OS_Q_EN > 0u) && (OS_MAX_QS > 0u)) || (OS_MBOX_EN > 0u) || (OS_SEM_EN > 0u) || (OS_MUTEX_EN > 0u))
消息隊列、郵箱、信號量、互斥信號量等這些資源要被系統所調用,就需要進行初始化。系統把他們定義為事件,而使用是需要調用相關數據,系統就把他們定義為ECB(事件控制塊),有點類似于TCB(任務控制塊)。
5.OS_InitTaskIdle(必須類)
這個函數會被OSInit()調用來創建空閑任務。這個函數在本節開頭截圖中沒有截取出來(屏幕高度有限),其實這個函數也是屬于系統必須初始化的函數。空閑函數其實就是系統把所創建的任務都處理完了,那些都掛起了,或刪除了,系統空閑沒事做了,它就會來執行這個空閑任務。
空閑任務在統計中起到一定作用,所謂統計,就是我們都知道的CPU占用率,空閑統計的越多,CPU空閑越多,那么CPU占用率就越低。【從CPU使用率應該很容易理解為什么要創建空閑任務】
Ⅲ、實例工程下載
筆者針對于初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的代碼,對初學者一看就明白,以簡單明了的工程供大家學習。
筆者提供的實例工程都是在板子上經過多次測試并沒有問題才上傳至360云盤,歡迎下載測試、參照學習。
我將最新UCOS2.92操作系統移植到F0、F1、F3、F4各個硬件平臺上,可以根據你芯片系列選擇下載。
UCOS基于STM32F0系列實例:
https://yunpan.cn/cByHFxCfpaIbh訪問密碼 4437
UCOS基于STM32F1系列實例:
https://yunpan.cn/cByHum5BStkEK訪問密碼 00a6
UCOS基于STM32F3系列實例:
https://yunpan.cn/cByHrMmkekIar訪問密碼 da90
UCOS基于STM32F4系列實例:
https://yunpan.cn/cByHx47jehTgX訪問密碼 5a04
本文所講述部分注釋修改為中文:
https://yunpan.cn/cMGZKfnVVb2Li訪問密碼 49c2
-
ucos2
+關注
關注
0文章
15瀏覽量
3557 -
操作系統內核
+關注
關注
0文章
8瀏覽量
2368 -
調用函數
+關注
關注
0文章
11瀏覽量
2305
發布評論請先 登錄
相關推薦
評論