Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
ニッチなネタですみません。備忘録的に書いておきます。
組込み機器は千差万別。製品が違えば必ずどこかしらHWは違うもの。ついているセンサーやアクチュエーター、UI全部違います。C#で書いてPC上でエミュレートできるのも、.NET Micro Frameworkのメリットの一つ。で、カスタムなハードウェアを作って.NET Micro Frameworkを移植すると、カスタムなエミュレーターが必要になります。複雑なアルゴリズムやネットワーク通信系は、エミュレーター上で動作確認しておけば、実ハードウェアで動かない場合は、ハードウェアのせいか、実ハードウェアの動作に起因するタイミングのせいか、とにかくソフトとハードの問題の切り分けができるからね。
で、カスタムエミュレーターが欲しいケースは、
- デフォルトのエミュレーターには装備されていないセンサーやアクチュエーターをエミュレートしたい
- デフォルトのエミュレーターとは違うUI(表示やキーなど)を使いたい
- デフォルトのエミュレーターのRuntimeライブラリを弄りたい
あたりです。エミュレーターは、Windows上に.NET Micro Frameworkを移植したものなんですね。だから、この作業は、各自のハードウェアに.NET Micro Frameworkを移植するのと基本同じ作業になります。ただ、Windows上で動くので、Visual Studioでビルドできてランタイムもデフォルトのエミュレーターとして公開されているモノをほぼそのまま使えるので、他の諸々のハードウェアに移植するよりは楽。
Runtimeをカスタマイズする、やり方は、https://netmf.codeplex.com の”Documentation”タブの”HowTo Manual to Build a Custom Version of the Runtime for a Device Emulator"に結構詳しく書いてあり、基本これに従ってやっていけばOK。ただ、ちょっと説明が足りなかったりするので、ここで補足しておきます。
あ、この作業やるには、Codeplexのサイトの”DOWNLOADS”タブをクリックして表示されたページの右上の.NETMF 4.3 RTM(QFE1)という項目をクリックして、表示された”PORTING KIT 4.3(QFE1)”をクリックしてZIPファイルをダウンロードし、中に入っているMSIファイルをたたいてポーティングキットのインストールが必要。Runtimeには2種類あって、C++で実装された部分(Porting KitをインストールしてできるディレクトリのSolutionsの下)と、C#で実装された部分(Framework/Tools/Emulatorの下)があり、それぞれ()でくくったところに書いてある場所にあり、それらを自分の好みに修正すればよろし。
Porting Kitをインストールすると√ディレクトリに、”MicroFramework_V4_3というディレクトリが出来ます。前者のC++で実装されている部分のビルドは、マニュアルに書かれてある通りにやって、msbuild.exeを実行する前に、コマンドプロンプトを一個開いて、このディレクトリに移動して、
C:¥MicroFrameworkPK_v4_3> setenv_vs.cmd
と入力し、環境設定用のバッチファイルを実行しておきます。これやらないと全然ビルドできないので、やるように。ハードウェアをエミュレートするドライバなど追加してC++の部分はマニュアルに書かれている通りにビルドすればOK。で、C#で実装されている部分は、このバッチを実行した状態で、”Framework/Tools/Emulator"に移動して、
C:¥MicroFrameworkPK_v4_3¥Framework¥Tools¥Emulator>build /t:Build /p:Flavor=Debug
でビルド開始。終わったらDebugの部分をReleaseに変えて再度実行すれば、デバッグ用、リリース用両方ができあがる。出来上がったDLLは、C:¥MicroFrameworkPK_v4_3¥BuildOutput¥public¥[Release|Debug]¥Server¥dll に、C++のが、Microsoft.SPOT.Emulator.Interface.dll、C#のが、Microsoft.SPOT.Emulator.dllという名前で出来上がっています。
これが出来たら、Visual StudioのC#のプロジェクトテンプレートの”MicroFramework”カテゴリにある、”Device Emulator”を使ってエミュレータ用のプロジェクトを作る。この作り方は、https://msdn.microsoft.com/en-us/library/hh399820.aspx に書いてある。基本これに従って作業を進める。
カスタムのRuntimeを作った場合は、プロジェクトの参照の”Microsoft.SPOT.Emulator.dll”と”Microsoft.SPOT.Emulator.Interface.dll”を作成したものと置き換えてね。
が、しかし、…なんとWinFormなんですね、今時。
やっぱりWPFでやりたいよね今時…ということで、
先ず、参照設定に、PresentationCore、PresentationFramework、System.Xaml、WindowsBase、WindowsFormsIntegrationというアセンブリを追加する。
そして、エミュレータープロジェクトに、”ユーザーコントロール(WPF)”項目を追加する。名前は…そうだな…”EmulatorPad”としておこうか。するとUI用のXAMLファイルが出来上がるので、ちゃららら~んと、データバインディングとか駆使してUIを作る。
デフォルトで出来上がっている”MainForm.cs”を開いて、MainForm_Load(object sender, EventArgs e)メソッドに、
wpfPageHost = new System.Windows.Forms.Integration.ElementHost();
wpfPageHost.Dock = DockStyle.Fill;
var wpfPage = new EmulatorPad();
wpfPageHost.Child = wpfPage;
this.Controls.Add(wpfPageHost);
って記述を加えると、追加したWPFのユーザーコントロールがめでたく表示される。
I2CやGPIOなどのハードウェアの追加方法は、MSDNのドキュメントに記載されているので、そちらを参考にしてやってほしい。弄るファイルは、Emulator.configや、Program.csファイルのSetupComponent()メソッドあたり。
Visual StudioでEmulatorプロジェクトを作ると、自動的にその開発PCにそのEmulatorが登録されるので、NETMFプロジェクトを作れば、プロジェクトのプロパティの.NET Micro Frameworkタブで、作ったEmulatorを選択可能。
みんなにそれをばらまきたい場合は、VSIX等作るのがベスト。組込みの基本は、C:\Program Files (x86)に適当なフォルダーを作って(※32Bit OSの場合はProgram Files)、Emulatorプロジェクトをビルドして出来上がったEXEやDLL等一式をコピーして、以下のレジストリーにEmulatorのありかを登録する。
HKLM\Software[\Wow6432Node]\Microsoft\.NETMicroFramework\v4.3\Emulators\[Your_Emulator_Name]
登録する情報は、
Name -> 表示名
Path -> Exeファイルのフルパス名
これでVisual Studioから選択可能になる。
…まぁね….NET Micro Frameworkのカスタムエミュレータ作らなきゃいけない人なんて、日本に数人しかいないはずなので、見る人少ないかもしれないけど、とりあえずアップしておく