.Net Micro Framework系統架構如下圖所示,其中移植工作主要在平台抽象層(PAL)和硬體抽象層(HAL),大部分常用的PAL層的程式已經寫好,基本上不需要什麼修改,隻有HAL會根據特定的硬體進行微調。不過如果添加新的裝置驅動,則HAL和PAL層都需要定義和重寫,假設CLR層不支援類似的裝置接口,就隻有通過Interop接口來通路了。後續的文章我會介紹一個最簡單的序列槽驅動來說明MF的驅動是如何設計的,這篇文章我就先介紹一下MF中的CLR運作時原理。
MF系統目前最為人诟病的就是,它不是一個實時系統。WINCE至少還算一個軟實時系統,可MF不是,雖然V3.0版本引入了Interop接口,就是為了緩解人們對嵌入式實時性的應用需要。但這不可能從根本上去解決這個沖突。據說明年推出的MF V4.0将是一個實時系統,這确實令人非常期待,不過時間緊迫,我真為美國微軟MF開發團隊捏把汗。
TinyCLR僅一個執行緒,接管所有的記憶體配置設定。采用輪詢算法,根據線程的優先級,配置設定最小為20ms的時間片。
運作原理圖如下:
TinyCLR中的線程分5種優先級:
0 = Lowest 最低的
1=BelowNormal 比正常偏低
2=Normal 正常
3=AboveNormal 比整個偏高
4=Highest 最高的
以兩倍的CPU時間機關作為這種優先級的量度等級。越進階的線程,獲得時間片就越多。
由以上可以看出,20ms的時間片,再加上CLR的垃圾回收機制,确實談不上實時系統。不過,如果我們想在V3.0版本上開發一個對時間要求比較迫切的應用該怎麼辦?也許Interop是目前唯一的辦法,後續的文章我就介紹這方面的内容。