BLOG記事用論壇

 找回密碼
 註冊
搜索
熱搜:
查看: 853|回復: 0

OSInit() , OSRdyGrp和OSRdyTbl[]

[複製鏈接]
發表於 2023-6-5 14:03:26 | 顯示全部樓層 |閱讀模式

OSInit() 函數是 uC/OS-II 系统初始化的主要方法,這個函數在 uC/OS-II 啟動過程中被調用,負責初始化 uC/OS-II 的內部數據結構,並創建一些基本的系統任務。

以下是 OSInit() 中進行的主要操作:
  • 初始化內部數據結構:初始化 uC/OS-II 系统所需的各種數據結構,包括:

    Task ready list任務就緒列表:這是一個總覽哪些任務已就緒(即已準備好運行,等待調度)的列表。
    Priority table優先級表:這是一個對應各種任務優先級的數據結構。
    Task control blocks (TCB)任務控制塊(TCB):這是一個數據結構,對每個任務的狀態,包括任務堆棧、優先級、狀態等等進行記錄和控制。
    Free pool空閒池:這是一個由尚未分配的記憶體塊構成的數據結構,可供新任務或其他需要的地方使用。
  • 創建保守任務:除了初始化數據結構,OSInit() 還會創建一些基本的系統任務,包括:

    idle task空閒任務:當沒有其他任務需要運行時,uC/OS-II 會執行這個空閒任務。空閒任務通常不做任何有實質意義的工作,只是進入一種低耗能模式,等待有其他更高優先級的任務就緒時再退出。
    The statistics task統計任務:這個任務主要負責收集和報告關於系統性能的信息,比如 CPU 使用率、任務的運行時間等等。

OSInit() 是 uC/OS-II 系统的起點,他為系統的運行打下了基礎,使得 uC/OS-II 可以開始接收和執行其他任務。


Ready List
在 uC/OS-II 中,OSRdyGrp和OSRdyTbl[]都是用於跟蹤準備好運行的任務的重要數據結構。這兩種數據結構的關聯性與優先級有關。

OSRdyGrp:這是一個 8 位的數據,每個位都代表一個優先級組。如果一個組中至少有一個任務就緒,那麼該組的對應位就會被設置為 1。因此,如果 OSRdyGrp 的值為零,那麼表示沒有任務就緒。

OSRdyTbl[]:這是一個 8 元素的數組,每個元素都是一個 8 位的數據。每個元素代表一個優先級組,並且每個位代表組中的一個特定優先級。如果一個特定優先級的任務已經就緒,則相應的位會被設置為 1。

當一個任務就緒時,uC/OS-II 會根據其優先級找到對應的組,並在 OSRdyTbl[] 中對應的位置設置為 1,然後在 OSRdyGrp 中將對應的組設置為 1。反之,當一個任務不再就緒時,相應的位將被清除,並且如果組中沒有其他就緒的任務,則在 OSRdyGrp 中也將清除對應的組。

這種使用位操作的方式可以快速且有效地查找就緒的任務,並且有助於實現高效的任務調度。

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|綜合討論區

GMT+8, 2026-6-24 18:45 , Processed in 0.037113 second(s), 9 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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