Zrobiłem szkic, ale potem go zgubiłem. Jednak przesłałem go do Arduino, zanim go zgubiłem. Czy jest jakiś sposób, aby go odzyskać?
Zrobiłem szkic, ale potem go zgubiłem. Jednak przesłałem go do Arduino, zanim go zgubiłem. Czy jest jakiś sposób, aby go odzyskać?
Odpowiedzi:
Powinno to być możliwe, dopóki bit bezpieczeństwa nie jest ustawiony. Pytanie to zostało zadane EE jakiś czas temu.
Czy można wyodrębnić kod z tablicy arduino?
Ale nie dostaniesz kodu Arduino, który odpisałeś. Kod jest kompilowany w asemblerze i będziesz musiał go przekonwertować z powrotem do C.
Ta odpowiedź nie odpowiada bezpośrednio na pytanie, ale nadal spowoduje taki sam wynik końcowy.
Arduino IDE używa tymczasowych katalogów do przechowywania plików kompilacji, w tym oryginalnego szkicu, a także plików HEX i pośrednich.
Na komputerze Mac są one domyślnie w folderach / var /, a na komputerze z systemem Windows znajdują się w… \ Local Settings \ Temp \ (które w zależności od wersji systemu Windows mogą znajdować się w kilku miejscach).
Odkryłem, że szczególnie w systemie Windows te pliki kompilacji nie są usuwane po zamknięciu szkicu lub IDE, więc mogą istnieć na twoim komputerze o wiele dłużej, niż myślisz.
Domyślnie Crashplan, Backblaze i Time Machine tworzą kopie zapasowe tych lokalizacji, więc nawet jeśli zostały usunięte, nadal mogą znajdować się w kopii zapasowej.
Zaletą jest to, że odzyskasz kod C zamiast ASM.
/tmp/
katalogach w systemie Linux (a nawet Mac). cf arduino.cc/en/Hacking/BuildProcess
Możesz pobrać zrzut heksowy pliku, ale nie ma łatwego sposobu na uzyskanie całego kodu C ++ i komentarzy. Jeśli potrafisz zrozumieć montaż, możesz odtworzyć program, ale zajmie to trochę czasu. Dla niektórych urządzeń dostępne są dyssasemblery, nie wiem o arduino.
atmega disassembler
).
Myślę, że jest na to inny sposób, bez wyciągania kodu z tablicy Arduino. Zapamiętaj datę utworzenia szkicu i poszukaj go w C: \ Users \ User \ AppData \ Local \ Temp \ (Na przykład: C: \ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a). Możesz znaleźć niezapisany kod, chyba że zostanie on usunięty przez jakiś „program kosmiczny zwalniający”. Powodzenia!
O ile Twoim celem nie jest po prostu skopiowanie identycznego kodu na inne urządzenie, prosta odpowiedź brzmi: nie
Jak wskazano w innych odpowiedziach, możesz zmienić kod szesnastkowy urządzenia z powrotem w kod asemblera.
Na przykład (po skopiowaniu kodu z urządzenia z powrotem na dysk):
avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex
Uruchom na jednym z plików bootloadera, otrzymuję te wyniki (częściowo):
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
Jak widać, niezbyt przydatne do odtworzenia tego, co zrobił szkic. Prawdopodobnie będzie jeden z dwóch scenariuszy:
W przypadku „krótkiego szkicu” lepiej jest po prostu przepisać od nowa. Byłoby to prawie na pewno szybsze. W przypadku „długiego szkicu” - po prostu nie jest tego warte. Żadna z nazw zmiennych nie jest zachowana, a sposób kompilatora optymalizuje kod, nawet struktura kodu byłaby trudna do ustalenia.