μC/OSII原有的時鐘管理系統(tǒng)類似于Linux,但是比Linux簡單得多。它僅向用戶提供一個周期性的信號OSTime,時鐘頻率可以設(shè)置在10~100 Hz,時鐘硬件周期性地向CPU發(fā)出時鐘中斷,系統(tǒng)周期性響應時鐘中斷,每次時鐘中斷到來時,中斷處理程序更新一個全局變量OSTime。μC/OSII時鐘中斷服務(wù)程序的核心是調(diào)用OSTimeTick ()函數(shù)。OSTimeTick ()函數(shù)用來判斷延時任務(wù)是否延時結(jié)束從而將其置于就緒態(tài)。其程序偽代碼如下:
void OSTimeTick(void) {
OSTimeTickHook();// 調(diào)用用戶定義的時鐘節(jié)拍外連函數(shù)
while { (除空閑任務(wù)外的所有任務(wù))
OS_ENTER_CRITICAL();//關(guān)中斷
對所有任務(wù)的延時時間遞減;
掃描時間到期的任務(wù),并且喚醒該任務(wù);
OS_EXIT_CRITICAL();//開中斷
指針指向下一個任務(wù);
}
OSTime++;//累計從開機以來的時間
}
在μC/OSII的時鐘節(jié)拍函數(shù)中,需要執(zhí)行用戶定義的時鐘節(jié)拍外連函數(shù)OSTimeTickHook (),以及對任務(wù)鏈表進行掃描并且遞減任務(wù)的延時。這樣就造成了時鐘節(jié)拍函數(shù)OSTimeTick ()有兩點不足:
、 在時鐘中斷中處理額外的任務(wù)OSTimeIickHook (),這樣增加了中斷處理的負擔,影響了定時服務(wù)的準確性;
、 在關(guān)中斷情況下掃描任務(wù)鏈表,任務(wù)越多所需要時間越長,而長時間關(guān)中斷對中斷響應有不利影響,是中斷處理應當避免的。
(1)公開源碼:是為數(shù)不多的公開源碼的RTOS,給二次開發(fā)和移植提供了可能;
(2)可移植性強:μC/OSII絕大多數(shù)源碼用ANSI C編寫,少量用匯編語言編寫,具有較強的移植性;
(3)可固化:微小內(nèi)核,可以和應用程序一起固化到FLASHROM中;