Есть ли способ загрузить скетч из Arduino?

Я сделал скетч, но потом потерял его. Однако я загрузил его в Arduino перед тем, как потерять. Есть ли способ вернуть его?

Комментарии к вопросу (2)
Решение

Это должно быть возможно, если бит безопасности не установлен. Этот вопрос был задан на EE некоторое время назад.

Возможно ли извлечь код из платы arduino?.

Но вы не получите обратно написанный вами код Arduino. Код скомпилирован в ассемблер, и вам придется самостоятельно преобразовать его обратно в C.

Комментарии (1)

Этот ответ не дает прямого ответа на вопрос, но все равно приведет к тому же конечному результату.

Arduino IDE использует временные каталоги для хранения файлов сборки, включая исходный скетч, а также HEX и промежуточные файлы.

На Mac они по умолчанию находятся в /var/folders, а на машине с Windows - в ...\Local Settings\Temp\ (что в зависимости от версии Windows может находиться в нескольких местах).

Я обнаружил, что, особенно в Windows, эти файлы сборки не удаляются при закрытии скетча или IDE, поэтому они могут существовать на вашей машине гораздо дольше, чем вы думаете.

Кроме того, по умолчанию Crashplan, Backblaze и Time Machine создают резервные копии этих мест, поэтому даже если они были удалены, они все еще могут быть в резервной копии.

Преимуществом здесь является то, что вы восстановите код C, а не ASM.

Комментарии (3)

Вы можете загрузить шестнадцатеричный дамп файла, но нет простого способа получить весь код C++ и комментарии. Если вы понимаете ассемблер, вы можете воссоздать программу, но это займет некоторое время. Существуют дизассемблеры для некоторых устройств, но я не знаю об arduino.

Комментарии (3)

Я думаю, что есть другой способ сделать это, без извлечения кода от платы Arduino. Запомните дату создания эскиза, и искать его в\C:\Users\User\AppData\Local\Temp (Например : C:\Users\User\AppData\Local\Temp\untitled4390292704786567977.tmp\sketch_jan19a ). Вы могли бы найти несохраненный код, если он был удален какая-то &quot программы;освобождая пространство" и. Удачи!

Комментарии (0)

Если ваша цель состоит в том, чтобы просто копировать идентичный код на другом устройстве, ответ прост: нет

Как уже отмечалось в других ответах, вы можете включить HEX-код на устройстве обратно в ассемблерный код.

Например (после того, как вы скопировали код из устройства обратно на диске):

avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex

Запустить на одном из файлов загрузчика я получаю эти результаты (частично):

00007e00 :
    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

Как видите, не особенно полезно для воспроизведения, что ваш эскиз сделал. Там, вероятно, будет один из двух сценариев:

  • Ваш эскиз был коротким, в этом случае, после недели работы, поверните ассемблере, на C
  • Ваш эскиз был длинный, и в этом случае было бы практически невозможно, чтобы превратить его обратно в C

В "Краткий очерк" в случае, вам лучше всего переписать с нуля. Это будет быстрее, почти наверняка. В "длинных эскиз" в случае - он просто не'т стоит. Ни одно из имен переменных сохраняются, и тому, как компилятор оптимизирует код, даже структуру кода будет трудно определить.

Комментарии (0)