Arduinoを使用する場合の各言語の利点は何ですか?
これは良い一般的な質問だと思いますが、私は「なぜ誰かが私にヒントを与えたいのか尋ねている理由について少し追加します。
私はJavaScript、PHPなどの前処理された言語の経験があり、JavaやVisualBasicなどの言語をいじっています。言い換えれば、私はプログラミング技術と古典的およびプロトタイプの両方のオブジェクト指向を知っていますが、ハードウェアと直接通信することについては何も知りません。
私はオクトコプターを作成しており、オブジェクト指向アプローチが最も簡単だと考えています。 (ソフトウェアには非常に多くの機能があります…)しかし、私はC ++で書いたことがありません。
これはQ &であるため他の人を助けるために、最初に提示された一般的な質問だけが非常に重要ですが、私の状況についてのコメントをいただければ幸いです。
コメント
- Arduino IDEはIDE名に値しないため、避けてください。非常に貧弱なエディターです。初心者や簡単なスケッチには適しているかもしれませんが、すぐにもっと良いものに進む必要があります。
- これは、iv id =の内部で実際に何を意味するのか(および’の内容)のかなり簡潔な内訳です。 “5f5c6138a9”>
Arduinoプログラミング言語。”
C++ vs. The Arduino Language?
-” Arduino言語” は C ++です。関数プロトタイプを行う手間を省くために少し前処理がありますが、それは間違いなくC ++です。回答
教授(プログラミング、メカトロニクス)としての私の個人的な経験は、以前にプログラミングの経験があり、OOPとしての概念を知っている場合は、C / C ++を使用する方がよいということです。 arduino言語は初心者には本当に素晴らしいですが、いくつかの制限があります(たとえば、すべてのファイルを同じフォルダーに入れる必要があります)。そしてそれは基本的にC / C ++の単純化です(実際には&貼り付けarduinoコードをC / C ++ファイルにコピーすることができ、それは機能します)。また、完全によく知られているIDEをEclipseとして使用できることも理にかなっています:
http://playground.arduino.cc/Code/Eclipse
最初は、開発環境のセットアップと構成にもう少し必要ですが、IMHOは、他の言語の経験を持つプログラマーにとっては価値があります。
場合によっては、arduino言語とarduino IDEを数日間使用してarduinoハードウェアに慣れてから、Eclipseを使用してC / C ++に移行し、プロジェクトを実際に開発しても問題はありません。
コメント
- ご意見ありがとうございます。’ Arduino IDEを使用して、さまざまなハードウェアをすべて制御する方法を学びます。センサーやLCD画面などの部品。次に、’をC ++に移行して、オクトコプター用のソフトウェアを作成します。他の言語を知っている人のための、短くて良い本を知っていますか? “問題” ‘見つけた本は、’私が’ m。
- Arduino用のCプログラミング” ” by JulienBayle便利です。これはC ++言語ではありませんが、基礎を理解するのに役立つはずです。
- それは良い要求です。他の言語のプログラマー向けの、C ++の基本を説明した短くて良い本です。申し訳ありませんが、私は推奨事項を提供することはできません、私は良いものを知りません。実際、私は学生のために実用的な焦点(ビデオゲームの開発)で本を書きましたが、それはスペイン語だけです。優れた実用的なC ++の本として、Deitel & Deitel C ++のプログラミング方法については、多くの高度な章をスキップできます。
- C ++はOO機能、C言語をサポートしています。
- @FriendofKim私が意図したとおりではありません(技術的には可能ですが、Dueは非メガビットシリアル通信用のソフトウェアソリューションをサポートするのに十分な速度であり、5つのU(S)ARTSを備えています合計で、Arduinoライブラリはそのうちの4つしか提供していませんが、iirc DueボードはいずれにせよUSARTの1つにピンを提供していません)。 Arduinoライブラリは非同期モードを使用するようにUSARTを構成しますが、最大6Mbpsで同期する必要がありました(入力を生のビットストリームとして処理する必要があり、ストップビットなどがないため、SPIモードを使用する必要がありました。)、これにはデフォルトのPIOコントローラー構成の変更も含まれます。
回答
理論的には…
実際にはArduino言語自体はありません。実際には、いくつかのドメイン固有のライブラリを備えたC ++です。これらは、ハードウェアを制御するために呼び出すことができる関数など、さまざまな機能を追加します。これらの機能がない場合は、すべてを制御するために特別なレジスタを直接いじる必要があります。これが組み込みプログラミングの通常の方法です。高速ですが、習得や理解が非常に難しい場合があります。
関数に加えて、ライブラリは一部のタイプに代替名を追加します。たとえば、boolean
とbyte
はC ++標準には含まれていません。ただし、これらはbool
およびunsigned char
と直接同等です。
これらすべてのことは、おそらく一般的な移植が可能であることを意味します。 C ++コードをArduinoに直接問題なく送信できます。ただし、逆に戻ると、若干の編集が必要になる場合があります。
実際には…
そうは言っても、Arduinoのプログラミングは一般的なC ++プログラミングとまったく同じではありません。ただし、多くの違いはすべての組み込みプログラミングに共通しています(限られたメモリや処理能力など)。
公式のArduinoIDEを使用している場合は、コードの設定方法にあらゆる種類の厄介な癖や制限があることにも注意してください。すべての場合に回避策があります(私が知る限り)。ただし、非常にイライラすることもあります。
完全な柔軟性を得るには、Arduinoをサポートするプラグインを備えたサードパーティのIDE(Eclipseなど)を使用してください。これにより、ArduinoライブラリとともにC ++のすべての利点が得られるはずです。
コメント
- ここ’ Eclipseのセットアップで、Arduinoで正常に動作します。 arduino.stackexchange.com/a/75491/7727 。 ‘ Arduinoプラグインは使用せず、C / C ++用の純粋なEclipseのみを使用します。
回答
Arduinoを使用する場合のC ++とArduino言語の利点は何ですか?私はJavaScript、PHPなどの前処理された言語の経験があり、JavaやVisualBasicなどの言語をいじっています。
まず、Arduinoコンパイラ/ IDEはCおよびC ++は現状のままです。実際、ライブラリの多くはC ++で記述されています。基盤となるシステムの多くはオブジェクト指向ではありませんが、オブジェクト指向である可能性があります。
したがって、「arduino言語」はC ++またはC.
C ++はガベージ収集されません。スコープ内の変数を管理します-次のように記述します:
int led = 13; void blinkTimes(int value) { int i; for(i=0;i<value;i++) { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } }
次にled
とi
は、blinkTimes
。
i
がクラスの場合、関数が終了すると同様に破棄されます。
または同様のメモリ割り当て関数を使用して新しいオブジェクトを作成すると、リークについて心配する必要がなくなります。
作成すると、メモリが不足する可能性があります。巨大なクラスであり、深くネストされた関数でそれらの多くを使用しますが、一般に、new
と関数。
new
を使用している場合は、delete
を呼び出す必要があります。適切な時期に。 C ++、ひいてはArduinoには自動ガベージコレクションがないため、独自のメモリを明示的に管理する必要があります。
コメント
- オブジェクトがインスタンス化されている場合は、 (新規の場合)’ガベージコレクションが行われていないので、’もそれを学習する必要があります。 C ++に関する本ならどれでもそれをカバーすると思います。良い答えをありがとう!
答え
—更新170412
オリジナルを書きました独特の「ArduinoC ++」が存在するという観点から3年前に答えてください。 IDEで使用される言語は、GNU C ++コンパイラによって実装されているため、標準のC ++です。 IDEは、いくつかの#includes、f / exを入力することにより、言語の初心者がいくつかの「落とし穴」を回避できるように前処理を行うため、「明らかな」違いが忍び寄ります。ただし、正しいC ++を記述して、期待どおりの結果を得ることができます。
—更新の終了
C ++言語機能の使用を実装者に限定してください。十分に理解します。ソースコードを読んで明らかなものよりも多くのリソースを消費するコードにコンパイルされる機能がいくつかあります。オプションで生成された.lss(ソースとアセンブリのマージ)リストは、C ++コンパイラが見ていなかったときに何をしたかについての良い洞察を与えることができます。
メモリに関する質問へ:C ++はガベージコレクションを行いません。 CやC ++のようなスタックベースの言語は、関数のエントリ時に自動変数用にスタックに一時ストレージを割り当てます。自動変数は、関数が戻るときに解放されますが、これは真のガベージコレクションではありません。ヒープメモリまたはグローバルメモリに作成されたオブジェクトは、明示的に削除するまで存続します。さまざまな種類のオブジェクトがどこで、いつ、どのくらいの期間作成されるかを確認してください。コードnew
-ingおよびdelete
-ingオブジェクトを意地悪にしたくはありません。これらはヒープメモリに組み込まれます。それを断片化し、スタックに成長させます。それは、コード(および素敵な「ヘリコプター」)がクラッシュするときです。
Cはあなたのために少ないことをするので、少ない to あなた。それは悪い選択ではありません。いくつかのC ++の機能を備えたCは、追加の機能を慎重に選択することを考えると、さらに良い選択になる可能性があります。C++、それらが2つの選択肢である場合:
[元の回答] -C ++は標準化された言語です。組み込みシステムを含む多くの環境で広く展開されているため、「Arduino」である非常によく似たC ++言語よりも徹底的にテストされています。これは、計画しているようなミッションクリティカル/安全クリティカルなアプリケーションにとって特に重要です。クラッシュしたコードは、クラッシュした「コプター」を意味します。誰かを傷つけなくても、は高価なマシンを壊します。
-
標準であるため、C ++は移植可能です。プロセッサをアップグレードする必要がありますか?シリコン固有のコード以外はすべて新しいコードに移植されます。ツールセット、開発システム、ホストOSを変更する必要がありますか?C ++ Arduino IDEはJavaがサポートされている場所ならどこでも実行できますが、Arduino C ++を使用する唯一のツールであり、非常に制限されています。 l。 Eclipse、AVRツールを使用したり、コマンドラインを裸足で使用したり、Emacs内で開発したり、その他の好みの環境で開発したりする場合は、標準のC ++がサポートされます。
-
Arduino IDEは、背後で処理を実行します。具体的には、必要と思われるときに.hファイルを#includeします。たとえそれが正しいとしても、コンパイラーが見ようとしているすべてのものを本当に書きたい、あるいは少なくとも見たり理解したりしたいのです。プログラミング言語はコンピューター用に作られたものではありません(コンピューターは朝食に少しずつ食べます)。それらは人々、特にプロジェクトであなたをフォローしている人々のために作られています。その中で最も重要なのは…あなたです!モジュールを作成した場合は、モジュールを拡張するために戻ってくる必要があります。おそらく、修正する必要があります。コンパイラが見るすべてのものを本当に見たいと思っています。
コメント
- これは本当に良い答えです。あなたがC ++が好きで、私もそれが好きであるべきであることは明らかです! …しかし、真剣に、’ ‘がどのようにさまざまなセンサーなどとの通信”が機能します。
- このテーマに関する優れた本を知っていますか? (他の言語で何年もプログラミングを行っており、C ++の”埋め込み部分”のみが必要な私に適しています。)
- Accelerated C ++ はこれに適した本だと思いますか?
- ‘ right ‘の本ですが、C ++に来ました。後ろにたくさんのCとKernighan &リッチー’ s Cプログラミング言語は、明示的にC ++でないものについては、今でも私の頼りになる本(悪いパン)であり、Ellis & Stroustrup ‘ s C ++用の注釈付きC ++リファレンスマニュアル。ただし、ハードウェアに書き込む場合は、’ Arduino.cc 。 pinMode()、digitalWrite()、digitalRead()関数を使用してI / Oポートを調整し、次にそれらのアナログI / O関数を調整し、最終的には…
- …に直接書き込むことを計画します。速度とメモリスペースを改善するためのI / Oレジスタ。 flashy.cppやhello.cppのようなプログラムは、ハードウェアをいじり始めるのに適した場所です。単純なマルチメータと、片方の脚に恒久的にはんだ付けされた適切な電流制限抵抗を備えたいくつかのLEDを追加すると、単純であるとしても、実際の努力の結果を見ることができるはずです。その後、興味のあるハードウェアのデータシートを読んで、それらを再生するために読み取ることができる/書き込む必要のある信号を確認します。温度センサーは使いやすく、’誰もが冷蔵庫ロガーを必要としませんか?楽しんでください!
回答
Arduino言語は C ++ですが、ほとんどのC ++の種類とは大きく異なります。