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