Arduino スケッチのアセンブリ言語のリストを表示できるようにしたいと考えています。どうすればこれを達成できますか?
更新: Windows マシンで Arduino ソフトウェアを実行しています。
これを行う 1 つの方法は、ビルドによって作成されavr-objdump
たファイルで を使用することです。.elf
たとえば、OS XI では次のことができます。
$ cd ~/arduino-0015/examples/Digital/Blink/applet $ avr-objdump -d Blink.elf
(Windows でのパスは明らかに異なる場合があります。) これにより、コードの逆アセンブリが生成され、その一部は次のようになります。
0000013a <メイン>: 13a: 0e 94 3e 01 コール 0x27c <init> 13e: 0e 94 97 00 call 0x12e <セットアップ> 142: 0e 94 80 00 call 0x100 <ループ> 146: fd cf rjmp .-6 ; 0x142 <メイン + 0x8>
Linux を使用している場合は、IDE を使用せずに Arduino 用にコンパイルする方法に関するこのチュートリアルに従うことができます。
これが完了したら、-s フラグを指定して gcc を実行すると、アセンブリ リストを取得できます。
次の (ハッキーな) 手順では、Windows で Arduino スケッチと関連するライブラリのアセンブリ言語のリストが提供されます。
.pde
を、スケッチ (ファイル)を含むディレクトリにダウンロード (および名前を変更) します。-S
します。abuild_gcc_opts
abuild.bat
abuild -r -c <pde_filename>
次の警告とエラーが表示されることが予想されますが、無視してかまいません。
... warning: #warning "This file has been moved to <util/delay.h>."
.\obj\<pde_filename>.cpp.o: file format not recognized: treating as linker script
.\obj\<pde_filename>.cpp.o:1: syntax error
アセンブリ言語のリストは、作成されたディレクトリ内の.o
ファイルにあります。obj
たとえば、スケッチ自体のリストはobj\<pde_filename>.cpp.o
-S (not s) フラグは、c コードも表示します。混合リストとも呼ばれます。
Linux: (.arduino/preferences.txt: delete_target_folder=false)
$ cd /tmp/buildxxxx.tmp
$ avr-objdump -dS Blink.cpp.elf
int main(void)
{
init();
2f4: 8a df rcall .-236 ; 0x20a <init>
...