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

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

40 голосов | спросил The Guy with The Hat 14 FebruaryEurope/MoscowbFri, 14 Feb 2014 01:23:36 +0400000000amFri, 14 Feb 2014 01:23:36 +040014 2014, 01:23:36

5 ответов


33

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

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

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

ответил sachleen 14 FebruaryEurope/MoscowbFri, 14 Feb 2014 01:25:48 +0400000000amFri, 14 Feb 2014 01:25:48 +040014 2014, 01:25:48
16

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

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

На Mac они по умолчанию находятся в /var /folders, а на компьютере с Windows они находятся в â € | \ Local Settings \ Temp \ (которые в зависимости от версии Windows могут быть в нескольких местах).

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

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

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

ответил Cybergibbons 16 MarpmSun, 16 Mar 2014 13:43:55 +04002014-03-16T13:43:55+04:0001 2014, 13:43:55
4

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

ответил TheDoctor 14 FebruaryEurope/MoscowbFri, 14 Feb 2014 01:34:32 +0400000000amFri, 14 Feb 2014 01:34:32 +040014 2014, 01:34:32
4

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

ответил Zathura 19 Jam1000000amMon, 19 Jan 2015 11:15:03 +030015 2015, 11:15:03
4

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

Как было указано в других ответах, вы можете превратить шестнадцатеричный код на устройстве обратно в код ассемблера.

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

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

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

00007e00 <.sec1 & gt ;:
    7e00: 11 24 eor r1, r1
    7e02: 84 b7 в r24, 0x34; 52
    7e04: 14 вне 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 с 0x00C4, r24
    7e28: 8e e0 ldi r24, 0x0E; 14
    7e2a: c9 d0 rcall. + 402; 0x7fbe
    7e2c: 259a sbi 0x04, 5; 4

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

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

В случае с «коротким эскизом» вам лучше просто переписывать с нуля. Это было бы быстрее, почти наверняка. В случае «длинного эскиза» это просто не стоит. Ни одно из имен переменных не сохраняется и способ, которым компилятор оптимизирует код, даже структуру кода будет трудно определить.

ответил Nick Gammon 3 J000000Friday15 2015, 02:34:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132