Saya membuat sketsa, tetapi kemudian saya kehilangan itu. Namun, saya mengunggahnya ke Arduino sebelum kehilangannya. Apakah ada cara saya bisa mendapatkannya kembali?
Saya membuat sketsa, tetapi kemudian saya kehilangan itu. Namun, saya mengunggahnya ke Arduino sebelum kehilangannya. Apakah ada cara saya bisa mendapatkannya kembali?
Jawaban:
Itu harus dimungkinkan selama bit keamanan tidak diatur. Pertanyaan ini ditanyakan pada EE beberapa waktu lalu.
Apakah mungkin untuk mengekstrak kode dari papan Arduino?
Tetapi Anda tidak akan mendapatkan kode Arduino yang Anda tulis kembali. Kode ini dikompilasi menjadi rakitan dan Anda harus mengubahnya kembali ke C sendiri.
Jawaban ini tidak langsung menjawab pertanyaan, tetapi masih akan menghasilkan hasil akhir yang sama.
Arduino IDE menggunakan direktori sementara untuk menyimpan file build, termasuk sketsa asli serta HEX dan file perantara.
Pada Mac, ini ada di / var / folder secara default, dan pada mesin Windows mereka berada di ... \ Local Settings \ Temp \ (yang tergantung pada versi Windows bisa di beberapa tempat).
Saya telah menemukan bahwa terutama di Windows, file-file build ini tidak terhapus ketika Anda menutup sketsa atau IDE, jadi mereka mungkin ada di komputer Anda lebih lama dari yang Anda kira.
Selain itu, secara default, Crashplan, Backblaze, dan Time Machine mencadangkan lokasi ini, sehingga meskipun telah dihapus, mereka mungkin masih dalam cadangan.
Keuntungannya di sini adalah Anda akan memulihkan kode C daripada ASM.
/tmp/
direktori di Linux (dan bahkan Mac). cf arduino.cc/en/Hacking/BuildProcess
Anda dapat mengunduh hex dump dari file tersebut, tetapi tidak ada cara mudah untuk mendapatkan semua kode C ++ dan komentar. Jika Anda dapat memahami perakitan, Anda dapat membuat ulang program, tetapi itu akan memakan waktu cukup lama. Ada dissasembler yang tersedia untuk beberapa perangkat, saya tidak tahu tentang Arduino.
atmega disassembler
).
Saya pikir ada cara lain untuk melakukan ini, tanpa mengekstrak kode dari papan Arduino. Lihat tanggal Anda membuat sketsa, dan cari di C: \ Users \ User \ AppData \ Local \ Temp \ (Misalnya: C: \ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a). Anda dapat menemukan kode yang belum disimpan kecuali dihapus oleh "program ruang bebas". Semoga berhasil!
Kecuali jika tujuan Anda hanya menyalin kode identik ke perangkat lain, jawabannya adalah: tidak
Seperti yang telah ditunjukkan dalam jawaban lain, Anda dapat mengubah kode heks pada perangkat kembali menjadi kode assembler.
Misalnya (setelah Anda menyalin kode dari perangkat kembali ke disk Anda):
avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex
Jalankan pada salah satu file bootloader saya mendapatkan hasil ini (sebagian):
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
Seperti yang Anda lihat, tidak terlalu membantu untuk mereproduksi apa yang sketsa Anda lakukan. Kemungkinan ada satu dari dua skenario:
Dalam kasus "sketsa pendek", Anda lebih baik menulis ulang dari awal. Itu akan lebih cepat, hampir pasti. Dalam kasus "sketsa panjang" - itu tidak layak. Tak satu pun dari nama variabel dipertahankan, dan cara kompiler mengoptimalkan kode, bahkan struktur kode akan sulit ditentukan.