Bir çizim yaptım ama sonra kaybettim. Ancak, kaybetmeden önce Arduino'ya yükledim. Geri alabilmemin bir yolu var mı?
Bir çizim yaptım ama sonra kaybettim. Ancak, kaybetmeden önce Arduino'ya yükledim. Geri alabilmemin bir yolu var mı?
Yanıtlar:
Güvenlik biti ayarlanmadığı sürece mümkün olmalıdır. Bu soru bir süre önce EE'de soruldu.
Bir arduino kartından kod çıkarmak mümkün mü?
Ama yazdığın Arduino kodunu alamayacaksın. Kod derlemede derlenir ve onu tekrar C'ye dönüştürmeniz gerekir.
Bu cevap doğrudan soruyu cevaplamaz, ancak yine de aynı sonuçla sonuçlanacaktır.
Arduino IDE, orijinal çizim, HEX ve ara dosyalar dahil olmak üzere derleme dosyalarını depolamak için geçici dizinler kullanır.
Mac'te bunlar varsayılan olarak / var / klasörlerindedir ve bir Windows makinesinde… \ Local Settings \ Temp \ içindedirler (Windows sürümüne bağlı olarak çeşitli yerlerde olabilirler).
Özellikle Windows'ta, çizim veya IDE'yi kapattığınızda bu derleme dosyalarının silinmeyeceğini, bu nedenle makinenizde düşündüğünüzden daha uzun süre var olabileceğini gördüm.
Ayrıca, varsayılan olarak, Crashplan, Backblaze ve Time Machine bu konumları yedekler, bu nedenle silinmiş olsalar bile, hala yedekler olabilirler.
Buradaki avantaj, ASM yerine C kodunu kurtarmanızdır.
/tmp/
Linux dizinlerinde (ve hatta Mac) bulabilirsiniz. cf arduino.cc/en/Hacking/BuildProcess
Dosyanın onaltılı dökümünü indirebilirsiniz, ancak tüm C ++ kodlarını ve yorumlarını almanın kolay bir yolu yoktur. Montajı anlayabiliyorsanız, programı yeniden yaratabilirsiniz, ancak bu biraz zaman alabilir. Bazı cihazlar için uygun olan dissasemblers vardır, ben arduino hakkında bilmiyorum.
atmega disassembler
).
Arduino kartından kodu çıkarmadan, bunu yapmanın başka bir yolu olduğunu düşünüyorum. Taslağı oluşturduğunuz tarihi hatırlayın ve C: \ Users \ Kullanıcı \ Kullanıcı \ Uygulama \ Yerel \ Temp \ bölümünde arayın (Örneğin: C: \ Kullanıcılar \ Kullanıcı \ Uygulama \ Kullanıcı \ Yerel \ Sıcaklık \ adsız4390292704786567977.tmp \ sketch_jan19a). Kaydedilmemiş kodunuzu, bir "boş alan programı" tarafından silinmedikçe bulabilirsiniz. İyi şanslar!
Hedefiniz aynı kodu başka bir cihaza kopyalamak değilse, basit cevap şudur: hayır
Diğer cevaplarda da belirtildiği gibi, cihazdaki onaltılı kodu tekrar montajcı koduna dönüştürebilirsiniz.
Örneğin (kodu cihazdan tekrar diskinize kopyaladığınızda):
avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex
Bootloader dosyalarından birinde çalıştırın, bu sonuçları alıyorum (kısmen):
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
Gördüğünüz gibi, eskizinizin ne yaptığını çoğaltmak için özellikle yararlı değil. İki senaryodan biri olması muhtemeldir:
"Kısa eskiz" durumunda, sıfırdan yeniden yazmak daha iyidir. Bu kesinlikle daha hızlı olurdu. "Uzun eskiz" durumunda - buna değmez. Değişken isimlerinin hiçbiri korunmaz ve derleyicinin kodu optimize etme yöntemi, hatta kodun yapısını bile belirlemek zor olacaktır.