uC OS II的時間管理

2021-07-05 03:46:58 字數 990 閱讀 2692

上一次我們談到了任務管理,今天來講一下uc/os的時間管理。

大家初學微控制器的時候都跑過流水燈這個例程吧,流水燈程式裡一定有延時函式delay吧,想想那時候delay是怎麼寫的:讓cpu空轉!空轉啊同學們,多麼令人心疼的事,8051核這麼經典的設計讓你們用來空轉啊(咳咳,當然了51跑多工還是比較吃力的)。

那麼說回來,uc/os是如何處理眼是這個問題的呢?μc/os需要使用者提供週期性訊號源,它利用這個訊號源定義乙個時鐘節拍,用這個時鐘節拍實現時間延時和確認超時。(時鐘節拍率應在10到100hz之間,時鐘節拍率越高,系統的額外負荷就越重);

時鐘節拍是一種特殊的中斷,相當於作業系統的心臟起搏器。那麼這個中斷裡做了什麼事,我看了下這個isr的偽**

void ostickisr(void)

ostimetick()這個函式就是把每個任務的tcb塊裡的ostcbdly變數減1,當ostcbdly==0時則檢查該任務是否被掛起,若沒被掛起則將該任務列到就緒表,準備執行。同時把系統時間變數(uint32)ostime++。也就是說系統在2^32個系統節拍後從0開始重新計數,我們可以算一下,若時間節拍為100hz也就是10ms,則我們的系統在497天後重新執行,呵呵這下好了,開機一年都沒問題!

與時間管理的相關系統服務有   

ostimedly();//任務延時函式,申請該服務的任務可以延時一段時間, 呼叫ostimedly後,任務進入等待狀態

ostimedlyhmsm();//ostimedly()的另乙個版本,即按時分秒延時函式;

ostimedlyresum();//讓處在延時期的任務提前結束延時,進入就緒狀態;

ok,如果現在我想執行流水燈程式,那麼按照程式來,點亮乙個燈。。。延時。。。點下乙個燈。。。這時候就可以在waterlight這個task裡申請乙個延時函式ostimedly();任務讓出cpu,進入等待狀態,等待--ostimedly == 0。

cpu現在空下來了,好嘞,執行ossched()進行任務排程。這樣就充分利用了cpu的資源,壓榨每一乙個電晶體的勞動力哈哈!

UC OS II 時間管理

volatile int32u ostime全域性變數是時間管理最重要的資料結構。時間管理的函式都在os time.c中定義 時間獲取和設定函式 nt32u ostimeget void void ostimeset int32u ticks 乙個是獲取ostime的值,乙個是修改ostime的值。...

uC OS II系統學習筆記(7) 時間管理

任務延時函式即ostimedly 申請該服務的任務可以延時一段時間,這個時間是根據時鐘節拍的數目來定的。其入口引數為 void ostimedly int16u ticks 由以上可看出,傳入的引數是ticks,即時鐘節拍。如果時鐘節拍是1ms,那麼ostimedly 1 即為延時1毫秒,若時鐘節拍...

管理感悟 時間管理

管理感悟 時間管理 栁鯤鵬2017 12 01 關鍵字 管理 時間管理 簡介 介紹如何進行時間管理,做好工作。目錄為什麼我這麼忙,事情還沒搞好 1 重要與緊急的關係 2 維護每日工作列表 2 對重點的判斷 3 學會時間管理是很難的 3 為什麼我這麼忙,事情還沒搞好 每個人都說自己很忙。是真的忙嗎?1...