Я зробив ескіз, але потім втратив його. Однак я завантажив його в Ардуїно, перш ніж його втратити. Чи є якийсь спосіб я його повернути?
Я зробив ескіз, але потім втратив його. Однак я завантажив його в Ардуїно, перш ніж його втратити. Чи є якийсь спосіб я його повернути?
Відповіді:
Це повинно бути можливим до тих пір, поки біт безпеки не встановлений. Це питання було задано на EE деякий час назад.
Чи можливо витягнути код з ардуїнської дошки?
Але 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 ++ та коментарі. Якщо ви можете зрозуміти складання, ви могли б відтворити програму, але це займе певний час. Для деяких пристроїв доступні розбиральники, я не знаю про ардуїно.
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
Як бачите, не особливо корисно для відтворення того, що зробив ваш ескіз. Можливо, існує один із двох сценаріїв:
У випадку "короткого ескізу" вам краще просто переписати з нуля. Це було б швидше, майже напевно. У випадку з "довгим ескізом" - це просто не варто. Жодне із назв змінних не збережене, а те, як компілятор оптимізує код, важко визначити навіть структуру коду.