Windows에서 Arduino 스케치의 어셈블리 언어 목록을 어떻게 얻을 수 있습니까?
문제
Arduino 스케치의 어셈블리 언어 목록을보고 싶습니다. 이것을 어떻게 달성 할 수 있습니까?
업데이트: Windows 시스템에서 Arduino 소프트웨어를 실행 중입니다.
해결책
이를 수행하는 한 가지 방법은 사용하는 것입니다 avr-objdump
에 .elf
빌드에 의해 생성 된 파일. 예를 들어, OS XI에서는 다음을 수행 할 수 있습니다.
$ cd ~/arduino-0015/examples/Digital/Blink/applet $ avr-objdump -d Blink.elf
(창에서의 경로는 분명히 다를 수 있습니다.) 이것은 코드의 분해를 생성하며, 그 중 일부는 다음과 같이 보입니다.
0000013a <main>: 13a: 0e 94 3e 01 call 0x27c <init> 13e: 0e 94 97 00 call 0x12e <setup> 142: 0e 94 80 00 call 0x100 <loop> 146: fd cf rjmp .-6 ; 0x142 <main+0x8>
다른 팁
Linux를 사용하는 경우 따라갈 수 있습니다 IDE없이 Arduino를 컴파일하는 방법에 대한이 자습서.
이렇게하면 -s 플래그로 GCC를 실행하여 어셈블리 목록을 얻을 수 있습니다.
다음 (Hacky) 단계는 Windows에서 Arduino 스케치 및 관련 라이브러리의 어셈블리 언어 목록을 제공합니다.
- 다운로드 (및 이름 바꾸기) Arduino Windows 명령 줄 배치 파일 스케치를 포함하는 디렉토리 (The
.pde
파일) - 위의 링크 된 페이지에 지정된대로 필요한 환경 변수를 설정
- 추가하다
-S
~로abuild_gcc_opts
변수abuild.bat
(라인 158) - 운영
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 (S NOT S) 플래그는 C 코드도 보여줍니다. 혼합 목록으로도 알고 있습니다.
Linux : (.arduino/preverences.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>
...