フォト
2018年11月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
無料ブログはココログ

« ラズパイ版IchigoJamが公式サイトに掲載されています | トップページ | micro:bitにケースを取り付けました »

2017年12月 9日 (土)

Arduino IDEのgccのバージョンの再認識

Arduino IDE 1.8.5の環境は、「C++11対応しているの?」とちょっと疑問に思い、試してみました。


サンプルスケッチ

//
// C++11対応の確認
//

void setup() {
  Serial.begin(9600);

  int x       {3};           // 新しい初期化形式
  int d[]     {0,1,2,3,4,5}; // 新しい初期化形式(配列)
  char *ptr   {nullptr};     // 新しい初期化形式、NULLの新しい形式
  uint16_t b  {0b11110001};  // 2進数対応

  Serial.print("x=");
  Serial.println(x,DEC);
  Serial.print("b=");
  Serial.println(b,BIN);
      
  for (auto a:d) {         // 新しい範囲指定形式 
    Serial.println(a,DEC);
  }
}

void loop() {

}

コンパイルは問題なく出来ました。実行結果も期待通りに動作しています。
う~ん、これは積極的に使っていった方がコーディング量も減り、不具合も回避できるかも..

01


裏付けを取るために、Arduinoのgccの環境周りを調べてみました。
まずは、利用しているgccのバージョンですが、
C:\Users\ユーザー\AppData\Local\Arduino15\staging\packagesの下には、
avr-gcc-4.9.2-atmel3.5.4-arduino2-i686-mingw32.zip
があります。

確認のため、インストールされているフォルダ \arduino-1.8.5\hardware\tools\avr\bin
のgcc++のバージョンを調べると4.9.2でした。

02

次にコンパイルオプション
\arduino-1.8.5\hardware\arduino\avr\platform.txt に定義されているコンパイルオプション
を調べると次の設定になっています。

compiler.c.cmd=avr-gcc
compiler.c.flags=-c -g -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects


compiler.cpp.cmd=avr-g++

compiler.cpp.flags=-c -g -Os {compiler.warning_flags} -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threads

gcc4.9.2では機能的にc++11は完全対応であり、
cコンパイラはC11対応、C++コンパイラはC++11対応の指定が設定されています。

これでc++11の記述が堂々と利用出来ます。

(注意)
同じArduino IDE を利用していても、Arduino M0、DueのARMや、別のアーキテクチャのボードは、
利用しているコンパイラが異なります。この設定はAVRマイコン限定です。
他の環境については、別途調べる必要があります。

« ラズパイ版IchigoJamが公式サイトに掲載されています | トップページ | micro:bitにケースを取り付けました »

arduino」カテゴリの記事

AVR」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/66138361

この記事へのトラックバック一覧です: Arduino IDEのgccのバージョンの再認識:

« ラズパイ版IchigoJamが公式サイトに掲載されています | トップページ | micro:bitにケースを取り付けました »