Apakah ada cara untuk mengunduh sketsa dari Arduino?
44
Saya membuat sketsa, tetapi kemudian saya kehilangan itu. Namun, saya mengunggahnya ke Arduino sebelum kehilangannya. Apakah ada cara saya bisa mendapatkannya kembali?
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.
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.
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!
Seperti yang Anda lihat, tidak terlalu membantu untuk mereproduksi apa yang sketsa Anda lakukan. Kemungkinan ada satu dari dua skenario:
Sketsa Anda pendek, sehingga Anda mungkin, setelah berminggu-minggu bekerja, mengubah kode assembler kembali menjadi C
Sketsa Anda panjang, sehingga tidak mungkin mengubahnya menjadi C
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.
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.
sumber
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.
sumber
/tmp/
direktori di Linux (dan bahkan Mac). cf arduino.cc/en/Hacking/BuildProcessAnda 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.
sumber
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!
sumber
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):
Jalankan pada salah satu file bootloader saya mendapatkan hasil ini (sebagian):
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.
sumber