欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6437|回復: 0
打印 上一主題 下一主題
收起左側

uC/OS-II學習筆記—操作系統初始化

[復制鏈接]
跳轉到指定樓層
樓主
操作系統初始化函數OS_Init是操作系統在開始運行時,對全局變量、任務控制塊、就緒表、事件及消息隊列等重要數據結構進行的初始化操作,并創建空閑任務、統計任務等系統任務。該函數必須在創建用戶對象及調用OSStart()啟動實時任務調度之前運行。
內核初始化函數采用模塊化編程,該函數又分為若干子塊,每個子塊實現一定的功能。操作系統初始化函數OS_Init聲明代碼如下所示:

如上面的程序所示,OS_InitMisc實現對操作系統一些混雜的全局變量的初始化(Misc是單詞miscellaneous的前4個字母,是雜項的意思),這些混雜的全局變量是初始化過程或運行過程中需要使用的,因此在第一步完成,非常重要。

這些全局變量在ucos_ii.h中聲明,在這里進行了初始化。接下來的OS_InitRdyList對就緒表進行初始化的工作,程序代碼如下所示:

可見,該函數首先對就緒表和就緒組全部清零,然后對4個重要的任務相關的全局變量進行了初始化。前兩個是當前任務的優先級和最高任務的優先級,后兩個是對應的兩個任務控制塊的指針。
下面該輪到任務控制塊了,由于沒有任務,任務控制塊的兩個鏈表應該初始化為什么樣子呢?
在有用戶任務運行之前,因為沒有用戶任務就緒,就緒鏈表該是個空鏈表。而空閑鏈表這個時候應該是最長的,它的長度是操作系統能容納的任務數。代碼如下所示:


到這里,全局變量、就緒表、就緒組、任務優先級指針表、空閑鏈表、就緒鏈表等重要數據結構都已經完成了初始化的操作。
接下來OS_InitEventList對時間所用數據結構進行初始化,OS_FlagInit對事件標志數據結構進行初始化,OS_MemInit對內存進行初始化,OS_QInit對消息隊列進行初始化。
OS_InitTaskIdle將創建和初始化操作系統的第一個任務——空閑任務,該部分內容個如下所示:

這部分代碼主要是根據配置信息調用創建任務的函數創建空閑任務,其中,無論是OSTaskCreateExt還是OSTaskCreate的第一個參數,都是OS_TaskIdle,OS_TaskIdle是空閑任務函數的地址。該任務的優先級是OS_TASK_IDLE_PRIO,這是一個供用戶配置的宏,默認值是63,是最低優先級的任務。
接著,用類似的方法調用OS_InitTaskSta創建統計任務。

那么,在創建了這兩個系統任務后,那個任務運行了呢?沒有任務運行,因為還沒有真正啟動多任務。只是為任務分配和設置了它們生存的數據結構。
如果系統配置有定時器模塊,執行OSTmr_Init初始化定時器。
后面的兩個空函數,可以編寫合適的內容及顯示一些自己需要的調試信息。
操作系統初始化是操作系統開始運行時首先執行的函數,對操作系統使用的各種全局變量和重要的數據結構如任務控制塊及其鏈表、就緒表等進行初始化。接著創建兩個系統任務——空閑任務和統計任務。對這個流程的總結如下所示:


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

無效樓層,該帖已經被刪除
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表