15

質問からのこのコメントのフォローアップファームウェアの作成:アセンブリまたは高レベル?

Arduinoプラットフォーム用のC++コードをコンパイルするときに、仮想関数や例外などを使用できますか?または、(コメントで説明されているように)C ++のサブセットを使用したい(しなければならない)でしょうか?

Arduinoプラットフォーム用にプログラミングする際のその他の注意点はありますか?

4

6 に答える 6

11

Arduinoソフトウェアはavr-gccを使用してスケッチをコンパイルします。以下の制限はavrlibcFAQから得られました(AVRでC ++を使用できますか?)

サポートされています

  • 仮想関数
  • コンストラクタとデストラクタ(グローバルなものを含む)

サポートされていません

  • C ++標準関数、クラス、およびテンプレートクラス(ただし、Arduino用のuClibc ++のこのポートを参照してください)
  • 演算子newdelete(それらを使用しようとすると、リンカは未定義の外部参照について文句を言います)。これは、オブジェクトはスタック上でのみ作成できることを意味します。動的メモリ割り当てが必要な場合はmalloc()、およびタイプを使用して実装する必要がfree()ありますC
  • 例外。-fno-exceptionsC ++フロントエンドでは例外がデフォルトで有効になっているため、コンパイラオプションを使用して例外を明示的にオフにする必要があります。これは、ArduinoIDEの起動時に自動的に行われますavr-gcc

その他の問題

  • 提供されているインクルードファイルの一部はC++で安全ではありません。つまり、次のようにラップする必要があります。
    extern "C" { . . . }
于 2009-06-17T13:02:14.427 に答える
3

機能の使いやすさは、プラットフォームではなく、使用しているコンパイラによって制限されます。

どの言語機能がサポートされているかについて、コンパイラのドキュメントを確認します。

于 2009-01-21T04:38:12.740 に答える
2

コモー コンピューティングには、すべての C++ 機能をサポートする C++ から C へのコンパイラがあります。仮想機能や例外だけでなく、エクスポートも。Arduino 言語をターゲットにするには、Comeau を呼び出す必要がありますが、それほど難しくはありません。

于 2009-01-22T14:29:17.663 に答える
1

この Makefileでg++ を使用し、このコードから始めました。C++ はいくらかのスペースを浪費します。しかし、プロトスレッドはクールすぎて使えません。

于 2009-03-03T18:05:15.097 に答える
1

ドキュメントには次のように記載されています。

Arduino 言語は C/C++ に基づいており、すべての標準 C コンストラクトと一部の C++ 機能をサポートしています。

私が見つけることができる仮想関数については何も言いません。

簡単なプログラムを試してみたところ、問題なくコンパイルできました。ただし、Arduinoハードウェアではテストしていません。

編集:例外もテストしていません。

于 2009-01-21T06:46:14.667 に答える