वहाँ एक Arduino से एक स्केच डाउनलोड करने के लिए कोई रास्ता नहीं है?


44

मैंने एक स्केच बनाया, लेकिन फिर मैंने इसे खो दिया। हालाँकि, मैंने इसे खोने से पहले इसे Arduino पर अपलोड किया था। क्या कोई तरीका है जिससे मैं इसे वापस पा सकूं?


5
Electronics.stackexchange.com/questions/28211/… लेकिन जैसा कि अन्य लोग कहते हैं, यह केवल .hex फ़ाइलें थूकता है, न कि मूल स्रोत।
जिप्पी

क्रॉस साइट डुपी
q

जवाबों:


35

यह तब तक संभव होना चाहिए जब तक सुरक्षा बिट सेट न हो। यह सवाल कुछ समय पहले ईई पर पूछा गया था।

क्या एक Arduino बोर्ड से कोड निकालना संभव है?

लेकिन आपको वह Arduino कोड नहीं मिलेगा जो आपने लिखा था। कोड को असेंबली में संकलित किया गया है और आपको उस सी को अपने आप में बदलना होगा।


कच्चे हेक्स वापस पढ़ना: forum.arduino.cc/index.php?topic=6150.0 और स्वत: Disassembly: forum.arduino.cc/index.php/topic,46843.0.html
SDsolar

20

यह उत्तर सीधे प्रश्न का उत्तर नहीं देता है, लेकिन फिर भी उसी अंतिम परिणाम में परिणाम देगा।

Arduino IDE फ़ाइलों का निर्माण करने के लिए अस्थायी निर्देशिकाओं का उपयोग करता है, जिसमें मूल स्केच के साथ-साथ HEX और मध्यवर्ती फाइलें भी शामिल हैं।

एक मैक पर, ये डिफ़ॉल्ट रूप से / var / फ़ोल्डरों में होते हैं, और एक विंडोज मशीन पर वे… \ Local Settings \ Temp \ (जो विंडोज के संस्करण के आधार पर कई स्थानों पर हो सकता है) पर हैं।

मैंने पाया है कि विशेष रूप से विंडोज में, ये निर्माण फाइलें स्केच या आईडीई को बंद करने पर नष्ट नहीं होती हैं, इसलिए वे आपके मशीन पर मौजूद हो सकते हैं जितना आप सोचते हैं।

इसके अलावा, डिफ़ॉल्ट रूप से, Crashplan, Backblaze और Time Machine इन स्थानों का बैक-अप करते हैं, इसलिए भले ही वे हटा दिए गए हों, फिर भी वे बैकअप में हो सकते हैं।

यहाँ लाभ यह है कि आप ASM के बजाय C कोड को पुनर्प्राप्त करेंगे।


3
यह सबसे अच्छा समाधान IMHO है। बहुत रचनात्मक, भी ...
dda

1
आप इसे /tmp/लिनक्स (और यहां तक ​​कि मैक) पर निर्देशिकाओं में पा सकते हैं । सीएफ arduino.cc/en/Hacking/BuildProcess
pd12

स्वीकार किए गए उत्तर से टिप्पणी प्रतिध्वनि: कच्ची हेक्स वापस पढ़ना: forum.arduino.cc/index.php?topic=6150.0 और स्वचालित Disassembly: forum.arduino.cc/index.php/topex,46843.0.html
SDsolar

5

आप फ़ाइल के हेक्स डंप डाउनलोड कर सकते हैं, लेकिन सभी सी ++ कोड और टिप्पणियां प्राप्त करने का कोई आसान तरीका नहीं है। यदि आप असेंबली को समझ सकते हैं, तो आप प्रोग्राम को फिर से बना सकते हैं, लेकिन इसमें थोड़ा समय लगेगा। कुछ उपकरणों के लिए असंतुष्ट उपलब्ध हैं, मुझे arduino के बारे में पता नहीं है।


3
Arduino के लिए कोई disassembler नहीं हैं, क्योंकि यह MCU प्रकार नहीं है। वहाँ रहे हैं कई ATmega disassemblers (गूगल atmega disassembler)।
कॉनर वुल्फ

यदि आपके पास arduino envitonment है, तो पहले से ही avr-objdump है क्योंकि यह avr-gcc के साथ आता है।
क्रिस स्ट्रैटन

कच्चे हेक्स वापस पढ़ना: forum.arduino.cc/index.php?topic=6150.0 और स्वत: Disassembly: forum.arduino.cc/index.php/topic,46843.0.html
SDsolar

5

मुझे लगता है कि ऐसा करने का एक और तरीका है, बिना Arduino बोर्ड से कोड निकाले। जिस तिथि को आप स्केच बनाते हैं, उसे याद रखें और C: \ Users \ User \ AppData \ Local \ Temp \ (उदाहरण के लिए देखें: C: \ Users \ User \ AppData \ Local \ Temp \ untitled4343292704786567977.tmp \ sketch_jan19a)। जब तक इसे कुछ "खाली स्थान कार्यक्रम" द्वारा हटा नहीं दिया गया, आप अपने सहेजे गए कोड को पा सकते हैं। सौभाग्य!


4

जब तक आपका उद्देश्य किसी अन्य डिवाइस के समान कोड को कॉपी करना नहीं है, सरल उत्तर है: नहीं

जैसा कि अन्य उत्तरों में बताया गया है, आप डिवाइस पर हेक्स कोड को कोड कोड में बदल सकते हैं।

उदाहरण के लिए (एक बार आपने अपनी डिस्क पर डिवाइस से कोड कॉपी कर लिया है):

avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex

बूटलोडर फ़ाइलों में से एक पर चलाएं मुझे ये परिणाम मिलते हैं (भाग में):

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

जैसा कि आप देख सकते हैं, आपके स्केच ने जो किया है उसे पुन: पेश करने के लिए विशेष रूप से उपयोगी नहीं है। दो परिदृश्यों में से एक होने की संभावना है:

  • आपका स्केच छोटा था, जिस स्थिति में आप काम के हफ्तों के बाद कोडांतरक कोड को वापस C में बदल सकते हैं
  • आपका स्केच लंबा था, इस स्थिति में इसे C में वापस लाना लगभग असंभव होगा

"शॉर्ट स्केच" मामले में, आप स्क्रैच से बस फिर से लिखना बेहतर है। यह तेज होगा, लगभग निश्चित रूप से। "लंबे स्केच" मामले में - यह सिर्फ इसके लायक नहीं है। चर नामों में से कोई भी संरक्षित नहीं है, और जिस तरह से संकलक कोड का अनुकूलन करता है, यहां तक ​​कि कोड की संरचना भी निर्धारित करना कठिन होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.