新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > μC/OS-III中的高效時鐘節(jié)拍管理機制

μC/OS-III中的高效時鐘節(jié)拍管理機制

作者: 時間:2013-01-11 來源:網絡 收藏

2.2 延時任務管理
;;為了提高時鐘節(jié)拍的處理速度,采用了機制來管理所有正在延時的任務和指定了超時時限的等待任務。這些任務都記錄在時鐘節(jié)拍列表(Tick List)中。時鐘節(jié)拍列表包含兩部分:一個稱為時鐘節(jié)拍輪盤的數(shù)組(OSCfg_TickWheel[])和一個時鐘節(jié)拍計數(shù)器(OSTickCtr),如圖2所示。

本文引用地址:http://2s4d.com/article/148142.htm

d.JPG


時鐘節(jié)拍列表中的每個任務都有一個延時結束時刻或等待超時時限,假設為TM。比如,一個任務在時鐘節(jié)拍計數(shù)器數(shù)值為OSTickCtr時調用OSTimeDly()延時dly個時鐘節(jié)拍,那么該任務的延時結束時刻TM就等于OSTickCtr+dly。然后,用TM和時鐘節(jié)拍輪盤的表項個數(shù)(OS_CFG_TI CK_WHEEL_SIZE)做取模運算,就可以得到一個余數(shù)I(I=TM%OS_CFG_TICK_WHEEL_SIZE)。那么,該延時任務就會放到時鐘節(jié)拍輪盤第1個表項指向的任務鏈表中。
時鐘節(jié)拍輪盤的每個表項都有3個成員:“.NbrEntriesMax”、“.NbrEntries”和“.FirstPtr”。其中,“.FirstPtr”指向該表項對應的任務鏈表,所有分配到該表項的延時任務或指定超時時限的等待任務都會放到該任務鏈表中。“.NbrEntries”和“.NbrEntries Max”分別記錄任務鏈表中的當前任務數(shù)目和歷史最大任務數(shù)目。在任務鏈表中,任務按照延時結束時刻或超時時限排序,結束時刻早的任務排在鏈表的前面。
通過采用機制,在每次時鐘節(jié)拍服務時,只需要處理時鐘節(jié)拍輪盤的某個特定表項所指向的任務鏈表,因為恰好在該時鐘節(jié)拍服務時延時結束或等待超時的任務都一定處于該表項所指向的任務鏈表中,而該表項的索引號就等于OSTickCtr%OS_CFG_TICK_WHEEL_SIZ E。另外,由于各個表項指向的任務鏈表中的任務是按照延時結束時刻和等待超時時限的順序進行排序的,這樣,在處理當前任務鏈表時,就可以從位于鏈表頭部的任務開始判斷任務延時結束時刻或等待超時時限是否等于OSTickCtr的當前值。如果等于,說明該任務延時結束或等待超時了,然后,再判斷下一個任務;如果不等于,說明該任務延時沒有結束或等待沒有超時,同時也說明,排在鏈表后面的任務都不可能延時結束或等待超時,因此,可以立即結束對任務鏈表的處理。
由于采用了機制,;;中的時鐘節(jié)拍服務在大部分情況下只需要判斷極少數(shù)任務的延時結束時刻或超時時限,看其是否等于時鐘節(jié)拍計數(shù)器的當前值,這相比;;II中需要遍歷整個任務鏈表的時鐘節(jié)拍服務,顯然效率要高很多。

結語
μC/OS—II中的時鐘節(jié)拍服務有兩個不足之處:一是需要遍歷整個任務鏈表,二是需要在時鐘節(jié)拍中斷服務程序中進行時鐘節(jié)拍的處理工作。當系統(tǒng)中任務數(shù)目較多時,會影響系統(tǒng)的實時性,這對于一個實時嵌入式操作系統(tǒng)來說是不完善的地方。在μC/OS—中,通過增加一個時鐘節(jié)拍系統(tǒng)任務并采用哈希散列表機制,很好地解決了這兩點問題,即使在系統(tǒng)任務數(shù)目很多的時候,也可以確保系統(tǒng)的實時性。


上一頁 1 2 3 下一頁

評論


相關推薦

技術專區(qū)

關閉