Arduino/Genuino 101 の追加メモ 2016/02
前回,コンパイルができないと書いていたが,
つい最近Genuino101(=Arduino101)のコンパイラとライブラリのダウンロードができたので
コンパイルだけやってみた時のメモ。
使用OSはWindows10。
* ダウンロードと設定
(1) Arduino1.6.7をダウンロード
https://www.arduino.cc/en/Main/Software
適当に解凍する。
(2) arduino.exeでIDEを起動,
(3) 「ツール」-「マイコンボード」で「ボードマネージャ」で「Intel Curie Boards by Intel version」を
探して「More info」をクリックでインストールする。
(4) 「ツール」-「マイコンボード」で 「Arduino 101」を選択して適当にBlink.ino等をコンパイルする。
* コンパイル結果ファイル群を得る
(1) AruinoIDEを終了します。これ大事。
(2) 以下の一行をエクプローラのアドレスバーにコピペしてエンターキーを押すと,
%UserProfile%\AppData\Local\Arduino15\preferences.txt
が編集可能になるので以下の一行をどこでもいいので追加します。
build.path=build
保存して終了します。
(3) ArduinoIDEを起動してもう一度Blink.ino等をコンパイルします。
(4) すると,arduino.exeがあるフォルダ直下に「build」フォルダができて,
*.bin, *.elf, *.hex, *.map など
おもしろそうなものが一式生成されています。:D
* 逆アセンブラファイルを得る
elfファイルがあるのでobjdumpにかけてみるとシンボル情報がstripされていて
もうひとつインパクトがないので,
以下に示す「arc-asm-list.bat」というファイルをarduino.exeと同じフォルダに置いてダブルクリックします。
すると同じフォルダに例えば「ARC-blink.ino.lst」という逆アセンブラファイルが得られます。
asm-list-arduino-v02-201602.zip
arc-asm-list.bat --- Arduino101/Genuino101用(ARCマイコン用)
arm-asm-list.bat --- ArduinoDue/Zero用(ARMマイコン用)
avr-asm-list.bat --- ArduinoUNO/etc.用(AVRマイコン用)
の3つがパックされています。
例えばそれぞれ識別子としてリストファイルの先頭にARC-,ARM-,AVR-が付加されます。
>arc-asm-list.bat
[ファイル名]
ELF file name = "build\blink.ino.elf"
Scketch name = blink.ino
List file name= blink.ino.lst
[再リンク中...]
""C:\Users\[user]\AppData\Local\Arduino15\packages\Intel\tools\arc-elf32\1.6.4+1.0/bin/arc-elf32-gcc" -nostartfiles -nodefaultlibs -nostdlib -static -Wl,-X -Wl,-N -Wl,-mARCv2EM -Wl,-marcelf -Wl,--gc-sections "-TC:\Users\[user]\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\variants\arduino_101/linker_scripts/flash.ld" "-Wl,-Map,build/blink.ino.map" -o "build/blink.ino.elf" "-Lbuild" "-LC:\Users\[user]\AppData\Local\Arduino15\packages\Intel\hardware\arc32\1.0.4\variants\arduino_101" -Wl,--whole-archive "-larc32drv_arduino101" -Wl,--no-whole-archive -Wl,--start-group "-larc32drv_arduino101" -lc -lm -lgcc "build\sketch\blink.ino.cpp.o" "build\core\variant.cpp.o" "build/core\core.a""
[リストファイルを生成]
"C:\Users\[user]\AppData\Local\Arduino15\packages\Intel\tools\arc-elf32\1.6.4+1.0/bin\arc-elf32-objdump -h -dS "build\blink.ino.elf" > "blink.ino.lst""
[サイズ情報]
text data bss dec hex filename
14644 3172 12672 30488 7718 build\Blink.ino.elf
[終了]
これがARCコアの逆アセンブルリスト。
void variantAdcInit(void)
{
400373a0: fc 1c c8 b6 st.a fp,[sp,-4]
400373a4: 9b 43 mov_s fp,sp
uint32_t creg;
uint32_t saved;
/* read creg slave to get current Power Mode */
creg = READ_ARC_REG(AR_IO_CREG_SLV0_OBSR);
400373a6: 2a 20 80 0f 01 80 80 80 lr r0,[0x80018080]
/* perform power up to "Normal mode w/o calibration" cycle if not already there */
if( (creg & ADC_MODE_MASK) != ADC_NORMAL_WO_CALIB){
400373ae: c2 b8 bmsk_s r0,r0,2
400373b0: 35 08 11 01 brne r0,4,400373e4
interrupt_unlock(saved);
/* Poll CREG Slave 0 for Power Mode status = requested status */
while ( ((creg = READ_ARC_REG(AR_IO_CREG_SLV0_OBSR)) & 0x8) == 0);
}
WRITE_ARC_REG(ADC_CLK_ENABLE | ADC_INT_DSB, ADC_CTRL);
400373b4: c3 40 01 80 03 50 mov_s r0,0x80015003
400373ba: 2b 26 00 70 00 00 04 0f sr 0xf04,[r0]
WRITE_ARC_REG(ADC_CONFIG_SETUP, ADC_SET);
400373c2: c3 40 01 80 00 50 mov_s r0,0x80015000
400373c8: 2b 26 00 70 00 00 0b 00 sr 11,[r0]
WRITE_ARC_REG(ADC_CLOCK_RATIO &ADC_CLK_RATIO_MASK, ADC_DIVSEQSTAT);
400373d0: c3 40 01 80 01 50 mov_s r0,0x80015001
400373d6: 2b 26 00 70 00 00 20 00 sr 32,[r0]
}
400373de: e0 7f j_s.d [blink]
400373e0: 04 14 1b 34 ld.ab fp,[sp,4]
* コンパイラやライブラリのありか
以下をエクプローラのアドレスバーにコピペしてエンターキーを押すと,
%UserProfile%\AppData\Local\Arduino15\packages\Intel
そのなかに必要なものが一式ある感じです。
リンカスクリプトやスタートアップコードやライブリコード等,必要そうなものがあり,
ライセンスはLGPLやBSDだったりします。
* あれ? Intel i386じゃないの?!
で,どうも勘違いしていたようで,
Aruino101でユーザがコンパイル/アップロードして使うマイコンは
ARCプロセッサ
でした。 (OO)
http://www.synopsys.com/jp2/IP/ProcessorIP/ARCProcessors/Pages/default.aspx
https://en.wikipedia.org/wiki/ARC_%28processor%29
* コードサイズがデカイ?
以前使っていた多倍長演算のベンチマークコードがあって,これをAruduino UNOで
コンパイルすると
Flash 4980バイトでした。
これをArduino101でコンパイルすると,
Flash 57Kバイトでした。
いじめでしょうか?
orz
orz
リストファイルをみると浮動小数演算とprintf関連のライブラリがくっついてきて結構大きくなった感じ。
それでもまだ130KBバイト以上残っているので気にしないことにしようかな。
xD
ちなみにprint文をカットしてみると,
[サイズ情報]
text data bss dec hex filename
15988 3168 12744 31900 7c9c build\bench_muls.ino.elf
57KB - 16KB = 41KB
というこでprint系のオーバヘッドは約40KBでした。
Arduino UNOに比べれば自由人 !!
* 正味のコードサイズ
なんとARCコアはコードサイズがデカイ。ARMの4倍以上デカイ。
可変長命令なのでこんなものなのか?
まぁFlash192KBあるからよしとしよう :D
実行速度はキャッシュが8KBあるし,クロック32MHzなので32MIPS強くらいあるかもしれない。
| setup()とloop()が空っぽ | テストコード | 正味のコードサイズ |
Arduino UNO | 500バイト | 2516バイト | 2016バイト |
Arduino Zero | 8196バイト | 8788バイト | 592バイト |
Arduino Due | 11116バイト | 11700バイト | 584バイト |
Aruino 101 | 16724バイト | 19148バイト | 2424バイト |
この表のテストコードはprint文なしです。
* Intel i386コア?
i386がホストマイコンということなんだけど
どこで出てくるんだろう?
xD
posted by Copyright (C) avrin All Rights Reserved. at 00:00|
Comment(2)
|
duino系
|

|