「C#は、高度なオペレーティングシステムを使用する非常に大規模なものから、専用機能を備えた非常に小規模なものまで、ホストシステムと組み込みシステムの両方のアプリケーションの作成に適していることを目的としています。」 -設計目標(ウィキペディア)
埋め込みがどのように「埋め込まれる」かによって大きく異なりますが、
C#はこの目標をどの程度達成したと思いますか?
C#は、C/C++よりも優れたツールではないにしても、同じくらい優れていると思いますか?
さて、 マイクロフレームワーク ;私はそれについて多くのノイズを聞きませんが、私は「埋め込まれた」ことに興味がありません。しかし、それはそれが何をしていたかによって異なります... C#は優れた汎用言語ですが、ハードコアが必要な場合もあります(そしてコードの複雑さがハングします)。
C#およびWinCEプラットフォーム用に作成された商業的に成功したソフトウェアアプリケーションはたくさんあります。たとえば、一部のセットトップボックス(AT&Tなど)は、.net CFでC#コードを実行します。これらのボックスのRAMが64MBまたは128MBであることを考えると、組み込みのC#は十分に埋め込まれていると思います。
ポイントは、ハードウェアアクセラレーションなどの進歩や、C#などのJIT言語がうまく機能するその他のコンパイラの進歩です。
そして最大の利点は、最新のVisual Studioを使用すると、VSからデバイスをデバッグできることです。少なくとも開発環境では、今のところこれほど良いものはありません。
注:プラットフォームに関しては、WinCE/WinMobileには多くの競合他社があり、それぞれに長所があります。上記では、開発環境の利点についてのみ説明しています。
ご存知のように、C#でコードを記述したい場合は、組み込みの.netミニランタイムが必要です。 WinCEのように言うことができます。
低コストの.NETmini-mini組み込みチップが間もなく市場に出るといいのですが、それともすでに存在していますか?このニュースに少し興味があります
http://www.windowsfordevices.com/news/NS4666205829.html
マイクロソフトの裏庭にある小さなスタートアップは、時計やその他の「スマートパーソナルオブジェクト」で使用するために開発された新しいマイクロソフト組み込みソフトウェアプラットフォームである「.NETEmbedded」を実行する小さな32ピンチップのようなコンピュータモジュールの出荷を開始する準備ができています。スタートアップ.netcpuCorp。によって開発されたこのモジュールには、MicrosoftのSmart Personal Objects Technology(SPOT)ハードウェアとソフトウェアの一部が組み込まれています。
しかし、ここにあなたにとって興味深いものがあります。 COSMOSプロジェクトをご覧ください。 ILコードをさまざまなプラットフォームに(そして将来的には組み込みアーキテクチャに)変換できます。
http://www.gocosmos.org/index.en.aspx
Cosmosには、入力ファイル(通常はシェル)とCosmosライブラリを読み取り、結果のILをx86コードにコンパイルするコンパイラ(IL2CPU、Cosmosの一部)が含まれています。 IL2CPUにはクロスプラットフォーム用のレイヤーがあり、x64を含む他のプロセッサーとプラットフォームをサポートする予定です。 IL2CPUは、C#コードがカーネル内のCPU、レジスタ、およびポートと直接対話できるようにする特定の拡張メソッドもサポートしています。 IL2CPUにはインラインアセンブラが含まれていますが、リンクする必要のあるASMファイルはありません。
現在、IL2CPUは最初に生のasmファイル(ILコメント付き)を出力し、次にnasm(無料のアセンブラー)を介してそれらを処理します。後で、バイナリに直接出力する予定です。
私はいくつかの組み込みアプリケーションにC#を使用しており、72MHz ARMチップ)で目的(小さなWebサーバーなど)に十分な速度で実行されます。また、.NETmicroフレームワークには多くの削除できる追加のライブラリ。
Netduinoをチェックアウトできます。これは、C#を使用したARM 32ビットマイクロコントローラー上の.NetMicro Frameworkのアプリケーションです。netduino.comまたはこのビデオにあります http://www.youtube.com/watch ?v = UN-JXHHlgcY 。
C#は、C#コードとマシンコードの中間として機能するフレームワークまたは仮想マシンを使用するため、CまたはC++を使用するよりも実行速度が遅くなると思います。しかし、速度がそれほど重要ではなく、配信が即時であるアプリケーションでは、これは間違いなく重要です。
WinCEまたはWindowsEmbeddedを使用しない組み込みシステムのC#には.NET Microが必要です。したがって、「hosted」と「embedded」の区別はありません。これは、hostedである必要があるためです。つまり、is hostedであり、can be Embeddedなので、「hosted or embedded」は意味がありません。
現在、.NET Microのメモリフットプリントは300Kbであり、ARMとBlackfinでのみサポートされているため、さまざまな組み込みアプリケーションの使用には不適切または高すぎるものになっています。さらに、マルチスレッドをサポートしていますが、リアルタイムに対応していないため、別の大規模なアプリケーションには適していません。
数年前、マイクロソフトはUK Embedded Systems Showで無料のセッションを開催し、当時の新しい.NETMicroを発表しました。 Q&Aでリアルタイムサポートについて質問したところ、「いいえ、リアルタイムではありません。」と答えると、聴衆からうめき声が聞こえ、多くの人が時間を無駄にしていたので、上下に移動しました。
組み込みシステムには、多くの場合、リアルタイムの要件があります。ガベージコレクションされた言語でそれらを満足させることは、おそらく興味深い。
.netマイクロフレームワークを確認してください http://www.Microsoft.com/netmf/default.mspx
少なくとも現在利用可能な処理馬力の程度までは、c#が組み込みシステムにとって最適な選択になるとは信じがたいです。 C#は通常、適切な機械語ではなく、MSIL/CILを対象としています。特定のプロセッサのマシンコードをc#から取得することは可能ですが、それほど効率的ではない可能性があります。最善の策:組み込みのメモリ管理(そのままでは非決定論的)がなく、使用可能なライブラリの範囲が限られているにもかかわらず、ハードウェアに近い言語(c、c ++、アンマネージド)に固執します。埋め込まれた、簡素化された透明なものが最善の策です、imho。
興味深いのは、.Net Micro FrameworkAssemblyをネイティブの組み込みアセンブリ言語に変換する「コンパイラ」を作成することです。ただし、メソッドにメモリ管理呼び出しを挿入する必要があります。あるいは、どこに行くのかを「推測」する代わりに、たとえばSystem.Memory.Delete()などの疑似メソッドを使用して、そこに削除を挿入するための記号として使用することもできます。
フェニックスフレームワークを試してみるのは興味深いことです。次の休日にやってみるかもしれません。