この質問が一般的なものであることは知っていますが、チュートリアルや Arduino コードを変換するための適切なコーディング方法を見つけることができませんでした (つまり、Arduino ソフトウェアで書いているコードであり、Arduino UnoやMegaや . .. ) たとえ小さなサンプルであっても。
チュートリアルはありますか?
テクニックを学びたいだけで、それがプロジェクトに依存することはわかっています。
この質問が一般的なものであることは知っていますが、チュートリアルや Arduino コードを変換するための適切なコーディング方法を見つけることができませんでした (つまり、Arduino ソフトウェアで書いているコードであり、Arduino UnoやMegaや . .. ) たとえ小さなサンプルであっても。
チュートリアルはありますか?
テクニックを学びたいだけで、それがプロジェクトに依存することはわかっています。
Arduinoコードは、多かれ少なかれ、Cコードです。
Arduinoで発生するユニークな点は、コードが前処理され(たとえば、関数setup
とloop
関数を確立することで単純なフックを提供する)、ボードの制限、インクルード、ライブラリなどを処理する管理されたビルド/アップロードプロセスがあることです。
同じツールキットを自分で使用してコードをビルドおよび実行することは確かに可能です。それが私が行う方法です。ArduinoとGCC、makefileのみを使用したプログラムのコンパイルとアップロードは、開始するために必要な手順をカバーする最も便利なリンクです。
私が言ったように、私はArduino IDEを離れて自分でルートを取りましたavr-gcc
。なぜなら、GNUツールを知っていれば、C ++標準ライブラリを使用するなど、はるかに強力なことができるからです。私は自分vector
のを逃しました、私は何を言うことができますか。avr-libcは、完全なC ++機能に関してはかなり遅れており、STLに詰め込むのが難しくなっていますが、AndyBrownはその多くを機能させています。
それらを一緒に投げると、非常に強力な開発環境が得られます。
(編集:自分の回答を書いているときに、マットの回答にある非常に役立つリンクを見逃していました。したがって、以下はリンクの非技術的な要約であるとしましょう)。
マットは正しいと答えた。追加情報を追加したいと思います。
Arduinoプログラミングを理解する鍵はディレクトリにありますArduino-1.0\hardware\arduino\cores\arduino
main.cpp
以下を含むファイルが見つかります。
#include <Arduino.h>
int main(void)
{
init();
#if defined(USBCON)
USB.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
"setup()" と "loop()" (そして Arduino のドキュメントを読めば "serialEventRun()" でさえも) ベルを鳴らしますか? :-)
Arduinoはそれだけを隠しています。
Arduino は C++ 言語を使用します。もちろん、コードを avr-gcc で自分でコンパイルする場合は C を使用できますが、Arduino IDE の構成方法は純粋な C++ です。
ただし、マイクロコントローラーはオブジェクト指向開発にあまり適していないため、いくつかの機能が欠けています。「新規」および「削除」演算子について考えます。それらは存在しないため、Arduino で開発する場合は、そのままではヒープの使用を避ける必要があります。そのため、標準の C++ ライブラリを使用する場合は注意が必要です。それらは、マイクロコントローラのプログラミングに適合していない可能性があります (メモリ操作が多すぎる)。
ディレクトリにはArduino-1.0\hardware\arduino\cores\arduino
、Arduino ライブラリの実装も表示されます。どの「低レベル」のマイクロコントローラー機能 (avr-libc から) が存在するか、および独自のライブラリーとツールをどのように実装できるかを監視できます。
ところで、Arduino コードを C に移植する方法を知りたかったので、avr-libc は C ライブラリであり、C++ ライブラリではありません。したがって、Arduino が C コード上に C++ コードをラップする方法を見ることができます。
メニューで、File/Preferences
「詳細な出力を見る」をチェックして、最終的な Arduino バイナリをビルドするために使用されるパラメーターとファイル (および一時ビルド ディレクトリの場所) を確認できます。
最後に、Arduino ボードにはコードにブートローダーが組み込まれていることも知っておく必要があります。Arduino IDE から Arduino ボードへの展開が容易になります。したがって、Arduino ボードには、実際には自分のコードよりも多くのコードが含まれています。
これは変換チュートリアルではありませんが、arduino の hello world の背後にあるものについての非常に優れた記事です:
Arduino 内部のツアー。hello world は実際にどのように機能しますか?