Я сделал эскиз, но потом потерял его. Тем не менее, я загрузил его в Arduino, прежде чем потерять его. Можно ли как-нибудь вернуть его обратно?
Я сделал эскиз, но потом потерял его. Тем не менее, я загрузил его в Arduino, прежде чем потерять его. Можно ли как-нибудь вернуть его обратно?
Ответы:
Это должно быть возможно, пока бит безопасности не установлен. Этот вопрос был задан на EE некоторое время назад.
Можно ли извлечь код с платы Arduino?
Но вы не получите код Arduino, который вы написали обратно. Код скомпилирован в сборку, и вам придется преобразовать его обратно в C самостоятельно.
Этот ответ не дает прямого ответа на вопрос, но все равно приведет к тому же конечному результату.
В Arduino IDE используются временные каталоги для хранения файлов сборки, включая исходный эскиз, а также HEX и промежуточные файлы.
На Mac они по умолчанию находятся в папках / var /, а на компьютере с Windows они находятся в ... \ Local Settings \ Temp \ (что в зависимости от версии Windows может находиться в нескольких местах).
Я обнаружил, что особенно в Windows эти файлы сборки не удаляются при закрытии эскиза или IDE, поэтому они могут существовать на вашем компьютере гораздо дольше, чем вы думаете.
Кроме того, по умолчанию Crashplan, Backblaze и Time Machine выполняют резервное копирование этих расположений, поэтому даже если они были удалены, они все равно могут находиться в резервной копии.
Преимущество здесь в том, что вы будете восстанавливать код C, а не ASM.
/tmp/
каталогах на Linux (и даже Mac). cf arduino.cc/en/Hacking/BuildProcess
Вы можете скачать шестнадцатеричный дамп файла, но нет простого способа получить весь код C ++ и комментарии. Если вы понимаете сборку, вы можете пересоздать программу, но это займет некоторое время. Для некоторых устройств доступны дизассемблеры, я не знаю насчет arduino.
atmega disassembler
).
Я думаю, что есть другой способ сделать это, не извлекая код из платы Arduino. Поменяйте дату создания эскиза и найдите его в C: \ Users \ User \ AppData \ Local \ Temp \ (например: C: \ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a). Вы можете найти свой несохраненный код, если он не был удален какой-либо «программой освобождения места». Удачи!
Если ваша цель не состоит в том, чтобы просто скопировать идентичный код на другое устройство, простой ответ: нет
Как было указано в других ответах, вы можете превратить шестнадцатеричный код на устройстве обратно в код ассемблера.
Например (когда вы скопировали код с устройства обратно на диск):
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
Как видите, не особенно полезно для воспроизведения того, что сделал ваш эскиз. Вероятно, будет один из двух сценариев:
В случае с «коротким наброском» лучше переписать с нуля. Это было бы быстрее, почти наверняка. В случае "длинного наброска" - это просто не стоит. Ни одно из имен переменных не сохраняется, и то, как компилятор оптимизирует код, даже структуру кода будет трудно определить.