C# Windows CE特點之實時性
C# Windows CE特點之實時性
C# Windows CE的***一條設(shè)計目標是要支持實時系統(tǒng)的開發(fā)。在嵌入式編程中,實時性就是指在指定時間內(nèi)完成指定任務(wù)的能力,這些任務(wù)可能是計算某個值,記錄某次輸入,或者是向某個外部設(shè)備發(fā)送一條命令。很多系統(tǒng)要求無論負荷有多么重,系統(tǒng)都應(yīng)該能夠連續(xù)可靠地執(zhí)行這樣的一個任務(wù)(或者是一些任務(wù))。
從C# Windows CE 3.0開始,C# Windows CE開發(fā)團隊就加入了一系列特性以支持實時系統(tǒng)的開發(fā)。其中包括支持256個線程優(yōu)先級(C# Windows CE一直都支持多線程編程)和嵌套的中斷請求。C# Windows CE對實時性的支持在C# Windows CE Platform Builder的文檔中定義如下:
◆保證高優(yōu)先級線程安排的上限,但僅對所有排隊線程中優(yōu)先級***的線程有效。
◆在執(zhí)行高優(yōu)先級中斷服務(wù)程序(ISR,interrupt service routine)時保證延時的上限。在內(nèi)核中專門設(shè)置了一些空間用于臨時關(guān)閉中斷服務(wù)。
◆確保對調(diào)度程序的控制,使其能順利地安排線程。
實時系統(tǒng)可以根據(jù)需求分為兩種,一種要求硬實時,另一種則要求軟實時。軟實時需求的系統(tǒng)在沒有嚴重后果的情況下允許出現(xiàn)一些延時,而硬實時需求的系統(tǒng)中則不能出現(xiàn)任何一點延時。
硬實時需求系統(tǒng)的例子如工廠里控制機器手臂動作的系統(tǒng)。有時也許必須移開這個手臂才能讓生產(chǎn)線繼續(xù)向前流動,或者才能讓其它的機器進入生產(chǎn)線開展工作,但是如果沒有及時移開它,結(jié)果可能會導(dǎo)致這個手臂、產(chǎn)品或者部分生產(chǎn)線被破壞。(我們假設(shè)這樣的事故會使整條生產(chǎn)線停下來,造成大量時間和成本的損失。)
盡管C# Windows CE提供很好的實時性支持,但.NET精簡框架卻不是一個理想的構(gòu)建實時組件的編程接口。這是因為運行時引擎可能會出現(xiàn)各種時間間隔不等的延時。例如,在使用運行時編譯執(zhí)行(JIT,just-in-time)編譯器(本章后面會有介紹)裝載代碼和將代碼編譯為本地機器代碼時,都會出現(xiàn)延時。
托管代碼與非托管代碼
.NET精簡框架代碼有時也可作為托管代碼,但對應(yīng)用程序程序員來說,它最重要的特性是由運行時來管理數(shù)據(jù),特別是已清除的數(shù)據(jù)。盡管代碼也可以被托管,但是必須確保其中沒有錯誤的內(nèi)存指針。本書第3章將重點介紹這個問題。
相反,Windows API代碼有時也可作為非托管代碼。這是一種以.NET為中心處理問題的方法,盡管我們有時使用如本地代碼和Win32代碼之類不同的術(shù)語來指代它。
C# Windows CE遇到的問題,另外,當(dāng)垃圾回收器工作的時候也可能出現(xiàn)延時,因為這時所有在托管代碼中運行的線程都被凍結(jié)了,然而非托管代碼則不會。因此,.NET精簡框架托管代碼可以支持實時線程16,但是多數(shù)情況下實時線程是通過調(diào)用Win32的DLL在非托管代碼中實現(xiàn)的。當(dāng)然,以上只是一些基本原則,如果是一個很快的CPU,系統(tǒng)負荷也很輕,在托管代碼中運行的線程也能提供足夠快的響應(yīng)以滿足這個系統(tǒng)實時性支持的要求。對于定時和性能的關(guān)系,我們需要“三思而后行”(measure twice and cut once),測量所需性能的次數(shù)往往跟錯失實時性底限的程度成正比。
C# Windows CE特點之實時性的相關(guān)內(nèi)容就向你介紹到這里,希望對你了解和學(xué)習(xí)C# Windows CE特點之實時性有所幫助。
【編輯推薦】