Bir Arduino'dan taslak indirmenin bir yolu var mı?


Yanıtlar:



20

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.


3
Bu IMHO'nun en iyi çözümü. Çok yaratıcı, çok ...
dda

1
Bunu /tmp/Linux dizinlerinde (ve hatta Mac) bulabilirsiniz. cf arduino.cc/en/Hacking/BuildProcess
pd12 10:16

Kabul edilen cevaptan yorum yazımı : Ham hex'i geri okuma: forum.arduino.cc/index.php?topic=6150.0 ve Otomatik Sökme: forum.arduino.cc/index.php/topic,46843.0.html
SDsolar

5

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.


3
Bir MCU tipi olmadığı için arduino için sökme işlemi yoktur. Orada olan çoklu ATmega Disassemblers (google atmega disassembler).
Connor Wolf

Eğer arduino ortamına sahipseniz, zaten avr-gcc ile olduğu gibi avr-objdump'a sahipsiniz.
Chris Stratton,


5

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!


4

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:

  • Çiziminiz kısaydı, bu durumda haftalarca çalıştıktan sonra assembler kodunu tekrar C konumuna getirebilirsiniz.
  • Çiziminiz uzundu, bu durumda onu tekrar C'ye dönüştürmek neredeyse imkansızdı.

"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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.