Arduino IDEの設定とコマンドで、ビルドしたスケッチのメモリ使用量の確認ができます。
メモリ使用量確認の準備
Arduino IDEの環境設定を変更します。
- Arduino IDEのメニュー[ファイル]-[環境設定]をクリック
- 「環境設定」ダイアログの[設定]タブにある「より詳細な情報を表示する」の「コンパイル」のチェックボックスをONにします。
- [OK]ボタンを押し、「環境設定」ダイアログを閉じます。
- 対象のスケッチをビルドします。
※この設定は、スケッチのメモリ使用量チェックでも使います。
ビルドが終わると、終了部分はこのような画面になります。

この表示に出ている「最大32,256バイトのフラッシュメモリのうち、スケッチが1,236バイト(3%)を使っています。」という部分がフラッシュメモリの使用量です。
スケッチのメモリ使用量チェック
スケッチのメモリ使用量チェックは、フラッシュメモリの使用量よりちょっと面倒です。
まず必要な作業は、
- 上記の環境設定を行う
- 調べたいスケッチのビルドを行い、ビルド結果が表示された状態にする。
です。
ビルド結果のうち、赤の四角で囲った行の中に、拡張子が”.elf”のファイルをフルパスで指定している箇所があります。

横長の行なので、横スクロールで探すことになります。
(この画面でも、「最大○○バイトのRAMのうち・・・」という行で概算は表示されています)
elfファイルは、バイナリファイルなので情報を取得するためにコマンド(avr-objdump)を使用します。
Windowsの場合、avr-objdumpコマンドは、「<Arduino IDEをインストールしたパス>\hardware\tools\avr\bin\」にあります。
avr-objdumpコマンドのヘルプ
Usage: C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avr-objdump.exe <option(s)> <file(s)>
Display information from object <file(s)>.
At least one of the following switches must be given:
-a, --archive-headers Display archive header information
-f, --file-headers Display the contents of the overall file header
-p, --private-headers Display object format specific file header contents
-P, --private=OPT,OPT... Display object format specific contents
-h, --[section-]headers Display the contents of the section headers
-x, --all-headers Display the contents of all headers
-d, --disassemble Display assembler contents of executable sections
-D, --disassemble-all Display assembler contents of all sections
-S, --source Intermix source code with disassembly
-s, --full-contents Display the full contents of all sections requested
-g, --debugging Display debug information in object file
-e, --debugging-tags Display debug information using ctags style
-G, --stabs Display (in raw form) any STABS info in the file
-W[lLiaprmfFsoRt] or
--dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
=frames-interp,=str,=loc,=Ranges,=pubtypes,
=gdb_index,=trace_info,=trace_abbrev,=trace_aranges,
=addr,=cu_index]
Display DWARF info in the file
-t, --syms Display the contents of the symbol table(s)
-T, --dynamic-syms Display the contents of the dynamic symbol table
-r, --reloc Display the relocation entries in the file
-R, --dynamic-reloc Display the dynamic relocation entries in the file
@<file> Read options from <file>
-v, --version Display this program's version number
-i, --info List object formats and architectures supported
-H, --help Display this information
The following switches are optional:
-b, --target=BFDNAME Specify the target object format as BFDNAME
-m, --architecture=MACHINE Specify the target architecture as MACHINE
-j, --section=NAME Only display information for section NAME
-M, --disassembler-options=OPT Pass text OPT on to the disassembler
-EB --endian=big Assume big endian format when disassembling
-EL --endian=little Assume little endian format when disassembling
--file-start-context Include context from start of file (with -S)
-I, --include=DIR Add DIR to search list for source files
-l, --line-numbers Include line numbers and filenames in output
-F, --file-offsets Include file offsets when displaying information
-C, --demangle[=STYLE] Decode mangled/processed symbol names
The STYLE, if specified, can be `auto', `gnu',
`lucid', `arm', `hp', `edg', `gnu-v3', `java'
or `gnat'
-w, --wide Format output for more than 80 columns
-z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling
--start-address=ADDR Only process data whose address is >= ADDR
--stop-address=ADDR Only process data whose address is <= ADDR
--prefix-addresses Print complete address alongside disassembly
--[no-]show-raw-insn Display hex alongside symbolic disassembly
--insn-width=WIDTH Display WIDTH bytes on a single line for -d
--adjust-vma=OFFSET Add OFFSET to all displayed section addresses
--special-syms Include special symbols in symbol dumps
--prefix=PREFIX Add PREFIX to absolute paths for -S
--prefix-strip=LEVEL Strip initial directory names for -S
--dwarf-depth=N Do not display DIEs at depth N or greater
--dwarf-start=N Display DIEs starting with N, at the same depth
or deeper
--dwarf-check Make additional dwarf internal consistency checks.
C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avr-objdump.exe: supported targets: elf32-avr elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex
C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avr-objdump.exe: supported architectures: avr avr:1 avr:2 avr:25 avr:3 avr:31 avr:35 avr:4 avr:5 avr:51 avr:6 avr:100 avr:101 avr:102 avr:103 avr:104 avr:105 avr:106 avr:107 plugin
Options supported for -P/--private switch:
For AVR ELF files:
mem-usage Display memory usage
avr-prop Display contents of .avr.prop section
Report bugs to <http://www.sourceware.org/bugzilla/>.
elfファイルを、avr-objdumpコマンドにかけます。
ちょっと長めですが、コマンドは下記のような感じ(ユーザー名部分を変えていますので、コピペでは使えません)です。
"C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avr-objdump.exe" -h "C:\Users\<ユーザ名>\AppData\Local\Temp\arduino_build_205112\sketch_oct04b.ino.elf"
avr-objdumpコマンドの’-h’オプションを使用します。
実行した結果は、こんな感じで表示されます。
C:\Users\<ユーザー名>\AppData\Local\Temp\arduino_build_205112/sketch_oct04b.ino.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000000 00800100 000004d4 00000568 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 000004d4 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 0000001c 00800100 00800100 00000568 2**0
ALLOC
3 .comment 00000011 00000000 00000000 00000568 2**0
CONTENTS, READONLY
4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 0000057c 2**2
CONTENTS, READONLY
5 .debug_info 000005f4 00000000 00000000 000005bc 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 000005a2 00000000 00000000 00000bb0 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 0000001a 00000000 00000000 00001152 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_str 00000208 00000000 00000000 0000116c 2**0
CONTENTS, READONLY, DEBUGGING

