Arduino /処理対.NETマイクロフレームワーク?最高の言語?最高のハードウェア?


10

私はしばらくの間、Arduinoをいじくり回しており、初心者から中級者に移行する過程にあります。パフォーマンスとハードウェアの可用性の観点から、.NET Micro Frameworkについて意見をお願いします。

私は.NETプログラマですが、Processing for Arduinoはほとんどゼロの摩擦であることがわかりました... C#に非常に近いため、やりたいことはすべて、ドキュメントにアクセスする必要さえありません。

とにかく、どちらが良いですか?


:また、この質問(C ++に関連する)を参照してくださいchiphacker.com/questions/3027/...
ケビン・フェルメール

回答:


17

初心者から中級者に移動したい場合、学ぶ必要のある言語はCです。Windowsのロックインの議論全体を脇に置いても、Cでのプログラミングに熟練している必要があります。 .NET MicroやC ++などの高水準言語のマイクロコントローラー。

組み込みシステムはピラミッド型の知識で構成されており、優れた設計者になるには、少なくとも各ステップのいくつかを知っている必要があります。
^ユーザーコード
^^オペレーティングシステム
^^^ C言語
^^^^アセンブリ言語
^^^ ^^マイクロコントローラのアーキテクチャ
^^^^^^デジタルデザイン
^^^^^^^半導体
^^^^^^^^基本的な電子機器(オームの法則)

Arduinoフレームワークは、C言語とオペレーティングシステムの間のどこかで、愛好家にピラミッドへの便利なフックを提供します。

.NET Micro Frameworkの質問に固有の、Aboutは次のように述べています。

典型的な.NET Micro Frameworkデバイスには、外部メモリ管理ユニット(MMU)のない32ビットプロセッサがあり、64Kのランダムアクセスメモリ(RAM)しか搭載できません。

また、このパンフレットでは、Windows MobileWindows EmbeddedCE 6.0、および.NET Compact Frameworkと区別し、Linux、リアルタイム、Java、およびカスタムオペレーティングシステムと比較しています。これは、Arduino / Processingフレームワークからの大きなジャンプです。

Arduinoには、1kのRAMを搭載した8ビットプロセッサが搭載されています。8ビットと32ビットの電力損失に加えて、リストされているほとんどのプロセッサの半分以下の速度で動作します。32ビットプロセッサへの移行をお勧めしませんが、中級から上級への移行としてお勧めします。

C#またはC ++の数行で多くの時間とメモリを使い切るのは本当に簡単です。これは、ギガバイトのRAMを備えた数ギガヘルツで実行されているデュアルコアプロセッサでは重要ではありませんが、組み込みデバイスで大きな違いを生む可能性があります。 。アセンブリ言語やC、あるいはC#またはC ++の達人になるまでは、組み込みプログラミングに使用することはお勧めしません。

それで、WinAVRのダウンロードから始めて、Cで単純なLED点滅ルーチンをプログラムします。Cが完全に混乱している場合は、PCでネイティブコード(「Hello World」)を少し実行してから、マイクロコントローラ、しかしそれは必要ではないはずです。次に、UARTを介した通信に移り、割り込みの使用を開始し、CでArduinoプロジェクトの一部をやり直します。次に、異なるマイクロコントローラー(PICまたはARMなど)を備えた新しい開発ボードを見つけます(または作ります)。LCDスクリーン、イーサネット、SDカード、または何でも好きなものを使って、新しいシステムを学びましょう。そこに着くと、どこに行きたいかがよくわかります。

途中でお手伝いします!


6
アセンブラとCの知識が不可欠だとは思いません。マイクロコントローラの動作理解することは重要です。アセンブラーの学習(c、あまりそうではない)は確かにこの理解への1つのルートですが、それだけではありません。
コナーウルフ

4
@偽名:確かに、それが私が「少なくともそれぞれのいくつか」と言った理由です。Cからアセンブリ、16進数までの簡単なプログラムに従い、各ステップを理解すると、はるかに優れたプログラマになります。必要に応じて、後でマジックにその機能を実行させることができますが、使用しているマシンの機能を理解する必要があります。
ケビンフェルメール

すみません、ごめんなさい。「一部」を逃しました。
コナーウルフ2010

7

私は「.NET Micro Framework」の経験はありませんが、低電力の組み込みプラットフォームで仮想マシンを実行することに関わるものは何でも非常に疑っています。それは私にとってもったいないようです。ネイティブマシンコードにコンパイルする専用のプラットフォームを実行するのと同じ効果を得るには、より多くのパワープロセッサ、より多くのメモリ、より多くの電力消費が必要です。おそらく、仮想マシン(JVMと同様)を実行している528MHz Androidフォンが、ネイティブマシンコード用にコンパイルされたアプリケーションを実行する、以前の数年前の312MHz Palm Treoよりも遅く感じることがよくあります。

簡単に見ると、.NET MFにはARMプロセッサが必要です。これは、Arduinoで使用されている8ビットATMegaチップからの電力と複雑さの上のステップです。

私の提案は、もしArduinoがあなたがやりたいことをするなら、それに固執することです。そうでない場合は、より強力なATMegaまたはATXmegaチップに目を向け、その上に追加の.NET変換層を追加することなく、C / C ++でARMを直接使用できます。


2
私は心から同意しますが、それが起こっているとは思いません。ILは、展開時にマシン固有のコードに変換されると思います。これは、その前提を裏付けるリンクです:microsoft.com/downloads / ...これまでのところ、Arduinoにかなり満足しています...私を説得できる唯一のことは、tinyclr.comでかなり印象的なシールドの選択を見つけたことです。 .Arduinoのシールドの選択があまり見られなかった。
Chris B. Behrens、2010

1
パワーとプログラマーの労力のトレードオフが、デスクトップPCの起動と起動に5〜10年前に使用したコンピューターと同じくらいの時間がかかる理由でもあります。
ケビンフェルメール

@Chris-問題は、マシンコードを実行しないことではなく、一連の抽象化を介して実行することです。抽象化、オブジェクト、汎用ライブラリ、モジュール性などは、プログラミングを簡素化するという点で優れていますが、時間とスペースがかかります。
ケビンフェルメール

ええ、でも、抽象化レイヤーは開発マシン上にしか存在しないと思います。しかし、もちろん、これは私が必要としている種類の情報にすぎません。
Chris B. Behrens、2010

2
@Chris-抽象化は、マシンコードにまで伝播されます。最終的に、マシンはアドレスの操作を実行します。ロード、ストア、追加、条件付き分岐などです。アセンブリはマシンコードの1対1の変換であり、Cはそれに比較的密接にマップします。ただし、どのプロセッサの命令セットにもtry / catch命令は含まれていないため、高水準言語には多くの作業が必要です。例外ハンドラーを実装するために必要なマシンコードは簡単ではありません。
ケビンフェルメール

4

中間に移動したい場合は、Arduino環境外のプラットフォームを試してください。選択するものはたくさんあります。AtmelMCUを使用する場合でも、8ビットのままにすることも、別のベンダーからの1つに移動することもできます。IDEを使用し、コードC言語を記述し、MCUがどのように機能するかを理解し、独自のブートローダーコードを記述するか、インサーキットプログラマーを使用して動き続けます。

しかし、本当にマイクロコントローラー用のC#で書きたい場合は、これを試してくださいhttp : //www.trygtech.com/products/sh7619_evb.php

それははるかに大きなMCUを使用し、典型的な.NETフットプリントは約512Kのフラッシュメモリと256kのRAMです。


2
そのシステムは.NET Microフレームワークを使用します。クリスが意見を求めていたのはまさにそのようなシステムです。
ケビンフェルメール

4

Netduinoを見たところです。あなたにとって興味深い妥協かもしれません。システムの仕様や詳細はわかりませんが、.NET Microを使用しているように見えるので、少なくともそのフレームワークを試すには良い方法のように思えます。


3

私にとってProcessing / Arduinoの最大の問題は、まともなデバッガーがないことです。私はAVRドラゴンを持っていますが、(a)AVR Studioのデバッガーが遅くバグが多い、または(b)Eclipseでのデバッグが非常に遅く、バグが多いため、これはあまり役に立ちません。私はWinAVRでそれを試す機会がありませんでしたが、それはリストの次です。

もちろん、Arduino IDEにはデバッガはありません。

単純なアプリケーションの外に出て、有線および無線ネットワークレベルで関連するものを実行する必要があるアプリの構築を開始すると、それは非常にイライラします。これが主に私が.NET MFを真剣に検討している理由です-SDKで遊んでいて、いくつかのハードウェアが間もなく起動します。


おっと...集中力が失われた!私はEclipseでWinAVR toochainを使用しています;-)

1
私は告白します...どちらのシステムでも、ピン13を除いてデバッガーが存在することは決してありませんでした。そのため、Netduinoをもう一度見直す必要があります...
Chris B. Behrens

うん。小さいATMegasでDebugWireを使用し、大きいチップ(私は1280以上)でJTAGを使用して、上記の2つの環境を介してArduinoアプリのオンチップデバッグを実行できます。ただし、これを行うにはハードウェアが必要です。私にとっては、約50米ドルのDragonは良い買い物でした

しかし、先に述べたように、両方のオプションは最高の経験では平均的であるように見えました。私が来るnetduinoとデバッグ比較をするのを楽しみにしています。

1
これに関するアップデート-数日前にnetduinoを受け取って、遊んでいます。Arduinoでの現在のプレイ状況と比較して、すぐに使える体験は素晴らしいと言わざるを得ません。特別なことは何も必要ありません。ビジュアルスタジオ(無料の「エクスプレス」バージョンを使用できます)とUSBケーブルを使用するだけで、オンボードデバッグを簡単に実行できます。すべてのインテリセンスはIDEで動作します。他のプラットフォームでc / c ++の一連の作業を行ったとしても、.NETを使用すると、組み込みの埋め込みコードが犯罪的に簡単になります;-)

2

Netduinoを調べてみてください。これは、arduinoのレイアウトとピンと互換性があるように構築されており、.NET Micro Frameworkを実行します。したがって、C#でコーディングし、Visual Studio内でデバッグすることもできます。

これまでのところ、非常に優れており、扱いやすいことがわかりました。チュートリアルはたくさんありませんが、Arduinoの多くのものを移植するだけで十分だと思います。私は初心者なので、Arduinoチュートリアルからフォトレジスタ/フォトセルのセットアップとコードを簡単に移植できました。


1

STM32(ARM M3)で、いくつかのオープンソースプロジェクトの1つを介してArduinoスタイルのC開発を行うことを検討できます。LeafLabsxduinoの両方に、機能するハードウェアとArduinoベースのツールチェーンがあります。通常のAtmegaチップではなく、32ビットマイクロコントローラーが必要なときにLeaflabs Mapleボードを使用してきました


1

Atmelに適した使いやすいIDE であるhttp://www.hpinfotech.ro/html/cvavr.htmを見て、いくつかのCIがこれを専門的に使用していて、非常に優れていると言えます。 Visual StudioのようなIDEから取得します。私はEclipseをAndroid開発にとって少し不格好なものにしました。購入したものほど滑らかではありません。

私は楽しみのためにTricopter制御システムを実装したNetduinoを持っています。これは非常にリアルタイムで、確実に機能し、Visual Studio 2010でC#で記述されています。デバイスのデバッグは一般的に優れており、データを自動同期しますwifiと私は航空機に小さなHTTPサーバーを持っています。


0

.NET Micro Frameworkを生産アプリケーション(精密測定デバイス)で使用しています。正常に動作します。

今日のマイクロプロセッサーは、「create-see-profile-change-see ...」パラダイムを使用できる状態に達しています。現在、メモリ量は非常に大きく安価なので、メモリ不足の状態でスタックすることはおそらくないでしょう。

また、C#開発者は、コードを作成する際に他に何をすべきか、そしてコードを複雑にする(そしてそうでない場合もある)ことを推測するよりも、望ましい条件に到達するための適切なプロファイリングの方が良い方法であることを知っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.