質問からのこのコメントのフォローアップファームウェアの作成:アセンブリまたは高レベル?:
Arduinoプラットフォーム用のC++コードをコンパイルするときに、仮想関数や例外などを使用できますか?または、(コメントで説明されているように)C ++のサブセットを使用したい(しなければならない)でしょうか?
Arduinoプラットフォーム用にプログラミングする際のその他の注意点はありますか?
質問からのこのコメントのフォローアップファームウェアの作成:アセンブリまたは高レベル?:
Arduinoプラットフォーム用のC++コードをコンパイルするときに、仮想関数や例外などを使用できますか?または、(コメントで説明されているように)C ++のサブセットを使用したい(しなければならない)でしょうか?
Arduinoプラットフォーム用にプログラミングする際のその他の注意点はありますか?
Arduinoソフトウェアはavr-gccを使用してスケッチをコンパイルします。以下の制限はavrlibcFAQから得られました(AVRでC ++を使用できますか?):
サポートされています
サポートされていません
new
とdelete
(それらを使用しようとすると、リンカは未定義の外部参照について文句を言います)。これは、オブジェクトはスタック上でのみ作成できることを意味します。動的メモリ割り当てが必要な場合はmalloc()
、およびタイプを使用して実装する必要がfree()
ありますC
-fno-exceptions
C ++フロントエンドでは例外がデフォルトで有効になっているため、コンパイラオプションを使用して例外を明示的にオフにする必要があります。これは、ArduinoIDEの起動時に自動的に行われますavr-gcc
その他の問題
extern "C" { . . . }
機能の使いやすさは、プラットフォームではなく、使用しているコンパイラによって制限されます。
どの言語機能がサポートされているかについて、コンパイラのドキュメントを確認します。
コモー コンピューティングには、すべての C++ 機能をサポートする C++ から C へのコンパイラがあります。仮想機能や例外だけでなく、エクスポートも。Arduino 言語をターゲットにするには、Comeau を呼び出す必要がありますが、それほど難しくはありません。
この Makefileでg++ を使用し、このコードから始めました。C++ はいくらかのスペースを浪費します。しかし、プロトスレッドはクールすぎて使えません。
ドキュメントには次のように記載されています。
Arduino 言語は C/C++ に基づいており、すべての標準 C コンストラクトと一部の C++ 機能をサポートしています。
私が見つけることができる仮想関数については何も言いません。
簡単なプログラムを試してみたところ、問題なくコンパイルできました。ただし、Arduinoハードウェアではテストしていません。
編集:例外もテストしていません。