天天看點

再談.NET Micro Framework移植

       初次移植.NET Micro Framework是基于V 4.0版本,目前最新的版本已經是V4.2了,并且官方代碼中也已經內建了第三方開發的基于STM32F103的代碼,不過該代碼移植的相對簡單一些,并且大部分代碼取之于ST官方的庫,是以代碼效率和未來擴充性方面還是有一定局限性的。

       此外在此期間深圳的莫雨也推出了基于STM32F103移植的書籍《玩轉.NET Micro Framework移植-基于STM32F10x處理器》。

        我在台北做.NET Micro Framework的教育訓練和為一些網友做移植介紹的時候都會這樣評價移植的難度。個人認為,移植由難到易分三種難度層次:

        第一種:系統架構和CPU層面的移植最難

       以前.NET Micro Framework僅支援ARM7和ARM9架構,Cortex-M3架構并不支援,這二者的最大的差別就是中斷模式,ARM7和ARM9架構有兩種中斷,普通中斷和快速中斷,而Cortex-M3的中斷模式更類似X86架構,有中斷向量表,硬體層面支援中斷嵌套。是以如果涉及到這方面的移植,相關中斷架構必須調整。

       目前官方的代碼支援的MCU類型如下:

Atmel:AT91SAM7X 、AT91SAM9RL64、AT91SAM9260、AT91SAM9261

Analog Devices:ADSP-BF537

恩智浦(NXP):LPC22XX、LPC24XX

飛思卡爾(Freescale):MC9328

英特爾(Intel):PXA271(XSCALE)

瑞薩電子(RENESAS):SH2、SH2A、 SH7216、SH7264

意法半導體:STM32F103

       如果你打算設計的硬體,所選的MCU恰好在上述清單,那麼恭喜你,CPU相關層面的移植的工作就不需要做了。但是即使所選的MCU不在上述清單,移植的工作量也是有差別的,比如Atmel的 AT91SSAM9263雖然不在清單中,但是其寄存器定義和AT91SAM9260、AT91SAM9261有很大的相似性,是以工作量也相對較少。工作量最大的移植,就是MCU架構和已有的不同(非ARM7,ARM9和Cortex-M3),且MCU亦非上述清單的廠家,比如我曾經移植過的TI的DM355,這就需要你從零開始移植。

      目前不少Cortex-M3核心的MCU晶片廠家都提供了相應的支援庫,是以直接采用庫代碼也是一種省時省力的選擇。不過如果選擇庫,就對庫有了一種依賴性,如果庫本身的函數有bug,那麼調試的難度就會加大,并且也受限于庫本身所支援的功能,因為你在庫的基礎上再擴充一些功能,相對比較難一些。

     第二種:外圍子產品移植次難

      如果所選擇的MCU就是第一種中所列的MCU,那麼這部分工作一般情況下,就不需要做了,剩下的就看你所選擇的LCD、觸摸屏、NandFlash以及以太網等子產品了,建議還是選擇.NET Micro Framework已經支援的子產品,這樣你的工作量就會大大降低。

     第三種:子產品內建和參數調整最易

      自己設計的闆子已經和官方支援的平台相容了,所選的子產品也都是官方代碼所支援的,那麼剩下的工作,無非就是個别參數調整(比如RAM的大小,位址等等),還有工程檔案把各個子產品代碼進行內建了。

       所有代碼工作做好之後,最後一步,就是調試,調試,再調試了!!!這一步,老手,新手的差别就凸顯出來了。嵌入式開發就是這樣,代碼完成僅僅占移植的工作量30%左右,剩下大部分工作就是調試,所謂老手,就是指調試經驗異常豐富(其實不僅僅指調試功底,還應該包括對某些開發的原理異常清晰,比如USB,比如以太網,必須了解其運作機理,才能事半功倍的進行調試)的嵌入式開發者,是以說同樣的開發工作有人幾天就可以完成,而有人幾個月不一定搞定,其緣由也在這裡了。

        周立功曾經在他的微網誌中這樣說,他們這樣的公司,真正會進行系統移植的不超過5個人(後來又進一步明确指出,他所謂的移植就是對新出的MCU,在沒有多少可參考的資料的情況下,進行移植)。不過這個微網誌發出後,不少人進行吐槽,說什麼能進行移植的人一大把之類了,其實就是因為,每個人心目中移植的标準是不一樣的,大部分人所謂的移植,估計很像普通人心目中的IT高手,就是會裝機的高手一樣,而不是真正的代碼編寫級别的移植高手。

        說了以上三種代碼移植層次,其實這僅僅限于移植官方.NET Micro Framework現有的代碼和功能,如果你想自己擴充自己的接口,并且希望自己的接口靈活,參數接口支援類,也支援事件等等功能,那麼移植的難度會更上一個台階,這就需要非常深入的了解.NET Micro Framework底層相關代碼了。

        總體而言,.NET Micro Framework的移植工作,比UCOSII複雜,但是比Linux和WinCE又要簡單的多。此外.NET Micro Framework不是所謂的嵌入式系統,而是一個架構,不僅可以獨立運作,還可以移植到Linux、WinCE和UCOSII等系統平台上來,這樣的好處就是基于.NET Micro Framework的代碼也許可以真正做到,一次編譯到處運作了。

繼續閱讀