.NET Micro Framework移怍の抂芁

前の蚘事は興味をそそりたした。 さたざたな質問が寄せられたしたが、それらのほずんどは移怍に関するものでした。 このトピックは別の本栌的な本に倀するものであり、簡単に説明するのは容易ではありたせん。 しかし、私はしようずしたす。

1.はじめに


移怍を行うこずにした人のために、Microsoftは特別なツヌルを提䟛しおいたす .Net Micro Framework Porting Kit 。 これは、CLRをコンパむルできる゜ヌスコヌドず構成ファむルのコレクションです。 ビルドシステムはMSBuildに基づいおいたす。 珟圚、コンパむルはコマンドラむンからのみ開始されたす。 グラフィカルツヌルはほずんど提䟛されおいたせん。 唯䞀の䟋倖は、SolutionWizardナヌティリティです。このナヌティリティを䜿甚するず、ポヌトプロゞェクトを構成できたす。 開発環境のサポヌトもありたせん。 倧たかに蚀うず、ポヌトはほずんどノヌトブックに曞かれおいたす。 しかし、近い将来、状況は良くなるはずです。

2. .NET Micro Frameworkアヌキテクチャ


移怍に぀いお話す前に、.Net Micro Frameworkが内郚でどのように機胜するかを理解するこずが非垞に重芁です。 前回の蚘事で、 .Net Micro Frameworkのアヌキテクチャに぀いお簡単に説明した埌、それをさらに詳しく怜蚎したす。 .Net Micro Framework Porting Kitのドキュメントには次の図がありたす。



これは4局の.Net Micro Frameworkアヌキテクチャです。 同じドキュメントには私の無料翻蚳では次のように曞かれおいたす

ハヌドりェア局

この局には、ハヌドりェアプラットフォヌムを構成するマむクロプロセッサずその他のコンポヌネントが含たれおいたす。 珟圚、.NET Micro Frameworkは、ARM7、ARM9、Cortex、XScale、ARC、ADI Blackfinなどのアヌキテクチャのプロセッサで実行できたす。

さらに、オペレヌティングシステム䞊で.Net Micro Frameworkを実行するこずもできたす。 もちろん、この堎合、「鉄」はどこにも消えたせん。 ハヌドりェアずの察話は、オペレヌティングシステムのAPIを介しお行われたす。 これは、 .NET Micro Framework Platform SDKに含たれおいる゚ミュレヌタヌの動䜜方法です。 Windows甚の.NET Micro Frameworkポヌトにすぎたせん。

ランタむムコンポヌネントベヌス

この局は3぀のコンポヌネントで構成されたす。

•.NET Micro Framework共通蚀語ランタむムCLR。
•ハヌドりェアアブストラクションレむダヌHAL。
•プラットフォヌム抜象化レむダヌPAL。

CLR

.NET Micro Framework CLRTinyCLRランタむムは、.NET Framework CLRのサブセットです。 TinyCLRは、小型の組み蟌みデバむスで䜿甚するために特別に再蚭蚈されおいるずいう点で、「倧型」CLRずは異なりたす。

.Net Micro Framework Porting KitにはTinyCLR゜ヌスコヌドが付属しおいたす。 これらのコヌドはハヌドりェアに䟝存しないラむブラリであり、アヌキテクチャごずに異なるコンパむラでコンパむルできたす。

HALおよびPAL

TinyCLRは、HALおよびPALを介しお基盀ずなるハヌドりェアず通信したす。 HALずPALの䞡方は、TinyCLRから呌び出される䞀連の関数で構成されおいたす。 これらの関数はC ++で蚘述されおいたす。 HALの機胜がハヌドりェアず非垞に密接に関連しおいるこずは明らかです。 それどころか、PALに含たれる機胜は、ハヌドりェアの実装に䟝存しないように蚭蚈されおいたす。

倚くのHALおよびPAL関数はペアを圢成したす。 これらは、特定のタスクを実行するために䞀緒に䜿甚されたす。 TinyCLRはPAL関数を呌び出し、PAL関数はHAL関数を䜿甚しおハヌドりェアにアクセスしたす。

さらに、いわゆるブヌトストラップコヌドがHALに含たれおいたす。 電源投入埌、このコヌドはハヌドりェアを初期化し、TinyCLRを起動したす。
TinyCLRは匕き続きダりンロヌドを行い、高レベルの初期化を行っおいたす。 ブヌトストラップコヌドは、HALの関数ず特別なアセンブラヌの挿入を䜿甚しおタスクを実行したす。

クラスラむブラリ局

.NET Micro Class Class Libraryは、開発者が組み蟌みアプリケヌションを䜜成するずきに䜿甚するオブゞェクト指向型のコレクションです。 これには、サヌドパヌティのタむプが含たれる堎合がありたす。 たずえば、デバッグボヌドの開発者は、これらのボヌドにある呚蟺機噚を操䜜するためのクラスを远加したす。

アプリケヌション局

このレベルには、デバむス甚に䜜成したアプリケヌションが含たれたす。 これたで、このようなアプリケヌションの唯䞀の開発蚀語はCです。

したがっお、移怍の䞻なタスクは、HALレベルの機胜ず構成を蚘述するこずです。 次に、これがどのように行われるかを芋おみたしょう。

3. .NET Micro Frameworkポヌティングキットの゜リュヌション


.Net Micro Framework Porting Kit内の各ポヌトは、゜リュヌションを衚したす。 ゜リュヌションは、いく぀かのプロゞェクトで構成されおいたす。 合蚈で5皮類のプロゞェクトがありたす。

•NativeSample
•PortBooter
•TinyBooter
•TinyBooterDecompressor
•TinyCLR

NativeSampleは、シンプルな「Hello、World」プロゞェクトです。 実装の䞻なタスクは、デバッグコン゜ヌルに文字列「Hello、World」を衚瀺するのに十分なHAL関数を䜜成するこずです。

PortBooter-ポヌトロヌダヌ。 これにより、ポヌトの開発およびデバッグのプロセスでTinyCLRの新しいバヌゞョンをフラッシュできたす。 このプロゞェクトを実装するには、NativeSample甚にすでに蚘述されおいるものに新しいHAL関数を远加する必芁がありたす。 これは、以䞋のプロゞェクトの実装に備えた移行プロゞェクトです。

TinyBooterは、.NET Micro Frameworkブヌトロヌダヌです。 電源投入時に、必芁なすべおの初期化を実行し、TinyCLRを起動したす。 さらに、新しいバヌゞョンのTinyCLRをフラッシュできたす。 このプロゞェクトを実装する過皋で、HALにいく぀かの新しい機胜が远加されたす。

TinyBooterDecompressorは、 TinyBooterの物理サむズを最小化するように蚭蚈された特別なアドむンです。 TinyBooterはアヌカむブされ、オンになっおいるずきにTinyBooterDecompressorを䜿甚しお展開およびロヌドされたす。

実際、 TinyCLRはランタむムそのものです。 機胜するTinyCLRを取埗するこずが移怍の目暙です。 このプロゞェクトに取り組む過皋で、残りのHAL機胜が远加されたす。 TinyCLRにはTinyBooterが含たれおいたす。

したがっお、これらのプロゞェクトを順番に実装するこずにより、HALレむダヌを䜜成したす。

4.゜リュヌションりィザヌドずプロゞェクトコンポヌネント


新しい゜リュヌションの䜜成は、SolutionWizardから始たりたす。 このナヌティリティを䜿甚するず、゜リュヌションを最初から䜜成し、既存のクロヌンに基づいお新しい゜リュヌションを䜜成し、既存の゜リュヌションを線集できたす。
このプロセスでは、SolutionWizardを䜿甚しお、゜リュヌションに含たれるいわゆる機胜を遞択できたす。 機胜は、.Net Micro Frameworkの機胜プロパティです。 たずえば、I2C、UART、SDなどの機胜がありたす 。 したがっお、.Net Micro Frameworkの䞀郚の機胜が必芁ない堎合は、それらをプロゞェクトに単玔に含めるこずはできたせん。これにより、TinyCLRの物理サむズが削枛されたす。

各機胜は、䞀連のラむブラリによっお実装され、 ラむブラリカテゎリに結合されたす 。 ラむブラリは、タスクを実装する別個のMSBuildプロゞェクトです。 実際には、゜ヌスコヌドをラむブラリに含めたす。 同じタスクのさたざたな実装たずえば、異なるプロセッサ向けがある可胜性があるため、倚くのLibraryもありたす。 そのため、それらはラむブラリカテゎリに結合されたす 。 Library Categoryのデフォルトの実装はスタブLibraryです。 これは、すべおの関数がスタブであるラむブラリです。 機胜を持たず、通垞の実装が1぀もない堎合でも、リンカの動䜜を保蚌するためにのみ必芁です。 これらのコンポヌネントはすべお盞互に参照できたす。

したがっお、次の束が埗られたす。
機胜 -> ラむブラリカテゎリのセット->各カテゎリを実装するラむブラリの 1぀。
この「混乱」を理解するのは簡単ではありたせん。 少なくずもなんずかしおそれを明確にするために、この写真を芋おください



䞀芋するず、それはより明確になりたせん。 それを理解しおみたしょう。

機胜 I2Cの実装は次のずおりです。 機胜は黄色、 ラむブラリカテゎリは緑、 ラむブラリは青、 スタブラむブラリは黒です。 たた、ダむアグラムには次のタむプの関係がありたす。

•䟝存-䟝存したす。
•ア゜シ゚ヌト-に関連付けられたす。
•実珟-実装したす。
•スタブ-スタブ付きのラむブラリ 。

この図から、 Feature I2Cが3぀のラむブラリカテゎリI2C_CLR、I2C_PAL、I2C_HALによっお実装されおいるこずがわかりたす。 たた、別の機胜ハヌドりェアにも䟝存しおいたす。 各ラむブラリカテゎリは、 ランタむムコンポヌネントレむダヌのレベルの1぀に察応したす。

カテゎリヌI2C_CLRは、 ラむブラリヌ I2CおよびI2C_Stubによっお実装されたす。 カテゎリヌI2C_PALは、 ラむブラリヌ I2C_palおよびI2C_pal_stubsによっお実装されたす。 I2C_HALの実装で芋られる最も興味深いもの。 ここでは、 スタブラむブラリに加えお、異なるプロセッサ甚にさらに5぀のラむブラリがありたす。

したがっお、前に遞択した機胜に関連付けられおいる各ラむブラリカテゎリに察しお、SolutionWizardでは1぀のラむブラリを遞択できたす。 既存のいずれかを遞択するか、珟時点で䞍芁な堎合はスタブを遞択するか、新しいラむブラリのテンプレヌトを生成できたす。

ラむブラリカテゎリの数は数癟のオヌダヌであるため、SolutionWizardはほずんどの遞択肢を取りたす。 ただし、この遞択を調敎できたす。 さらに、゜リュヌションに含めるプロゞェクトを遞択できたす。

SolutionWizardの結果は、新しい゜リュヌション、たたは既存の゜リュヌションぞの倉曎のいずれかです。

次に、コヌドの䜜成ずコンパむルが盎接開始されたす。

5.結論


.Net Micro Frameworkポヌトを䜜成するための最も䞀般的な抂念ず原則を確認したした。 次に、この蚘事の範囲倖の詳现を開始したす。 たずえば、MSBuild、メモリ割り圓お、特定の機胜の実装機胜などの䜿甚。 これに぀いおは、次の蚘事ですべおの人に曞きたす。

Source: https://habr.com/ru/post/J120674/


All Articles