답변:
보안 비트가 설정되어 있지 않는 한 가능해야합니다. 이 질문은 EE에서 잠시 전에 물었습니다.
그러나 당신은 당신이 쓴 Arduino 코드를 얻지 못할 것입니다. 코드는 어셈블리로 컴파일되며이를 C로 직접 변환해야합니다.
이 답변은 질문에 직접 대답하지는 않지만 여전히 동일한 최종 결과를 낳습니다.
Arduino IDE는 임시 디렉토리를 사용하여 원본 스케치, HEX 및 중간 파일을 포함한 빌드 파일을 저장합니다.
Mac에서는 기본적으로 / var / 폴더에 있으며 Windows 시스템에서는… \ Local Settings \ Temp \에 있습니다 (Windows 버전에 따라 여러 위치에있을 수 있음).
특히 Windows에서 이러한 빌드 파일은 스케치 또는 IDE를 닫을 때 삭제되지 않으므로 생각보다 훨씬 오래 컴퓨터에 존재할 수 있습니다.
또한 기본적으로 Crashplan, Backblaze 및 Time Machine은 이러한 위치를 백업하므로 삭제 된 경우에도 여전히 백업에있을 수 있습니다.
여기서 장점은 ASM 대신 C 코드를 복구한다는 것입니다.
/tmp/
Linux (및 Mac)의 디렉토리에서 찾을 수 있습니다 . cf arduino.cc/en/Hacking/BuildProcess
파일의 16 진 덤프를 다운로드 할 수 있지만 모든 C ++ 코드 및 주석을 얻는 쉬운 방법은 없습니다. 어셈블리를 이해할 수 있으면 프로그램을 다시 만들 수 있지만 시간이 오래 걸립니다. 일부 장치에 사용할 수있는 dissasembler가 있습니다. arduino에 대해 잘 모릅니다.
atmega disassembler
당신의 목표는 단순히 다른 장치에 동일한 코드를 복사하는 경우를 제외하고, 간단한 대답은 : 없음
다른 답변에서 지적했듯이 장치의 16 진수 코드를 다시 어셈블러 코드로 바꿀 수 있습니다.
예를 들어 장치에서 코드를 디스크로 다시 복사 한 경우 :
avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex
부트 로더 파일 중 하나에서 실행하면 다음과 같은 결과가 나옵니다 (일부).
00007e00 <.sec1>:
7e00: 11 24 eor r1, r1
7e02: 84 b7 in r24, 0x34 ; 52
7e04: 14 be out 0x34, r1 ; 52
7e06: 81 ff sbrs r24, 1
7e08: f0 d0 rcall .+480 ; 0x7fea
7e0a: 85 e0 ldi r24, 0x05 ; 5
7e0c: 80 93 81 00 sts 0x0081, r24
7e10: 82 e0 ldi r24, 0x02 ; 2
7e12: 80 93 c0 00 sts 0x00C0, r24
7e16: 88 e1 ldi r24, 0x18 ; 24
7e18: 80 93 c1 00 sts 0x00C1, r24
7e1c: 86 e0 ldi r24, 0x06 ; 6
7e1e: 80 93 c2 00 sts 0x00C2, r24
7e22: 80 e1 ldi r24, 0x10 ; 16
7e24: 80 93 c4 00 sts 0x00C4, r24
7e28: 8e e0 ldi r24, 0x0E ; 14
7e2a: c9 d0 rcall .+402 ; 0x7fbe
7e2c: 25 9a sbi 0x04, 5 ; 4
보시다시피 스케치 작업을 재현하는 데 특히 도움이되지는 않습니다. 두 가지 시나리오 중 하나가있을 수 있습니다.
"짧은 스케치"의 경우 처음부터 다시 쓰는 것이 좋습니다. 거의 확실히 빠를 것입니다. "긴 스케치"의 경우 가치가 없습니다. 변수 이름은 유지되지 않으며 컴파일러가 코드를 최적화하는 방식은 물론 코드 구조를 결정하기도 어렵습니다.