संकलित कोड आकार का अवलोकन


9

जब मैं अपना कोड संकलित करता हूं, तो Arduino IDE बाइट में बाइनरी स्केच आकार देता है।

क्या यह पता लगाने का एक अच्छा तरीका है (लगभग) कि मेरे कोड का क्या कार्य या क्या हिस्सा फ्लैश में कितनी मेमोरी लेता है, जिससे मुझे यह महसूस होता है कि कौन सी सुविधा सबसे कीमती फ्लैश मेमोरी लेती है या जहां मैं फ्लैश बर्बाद कर सकता हूं और चाहिए अनुकूलन शुरू करें?

जवाबों:


6

एक दृष्टिकोण कार्यक्रम की विधानसभा सूची को देखना है।

  1. कार्यक्रम को संकलित करने के बाद (सत्यापन या डाउनलोड बटन के माध्यम से) उस निर्देशिका का पता लगाएं, जहां .cpp, .hex, और .elf के लिए प्रोग्राम को संग्रहीत किया गया है। (यदि आपको उन्हें ढूंढने में परेशानी हो, तो Arduino IDE में संक्षिप्त रूप से वर्बोज़ संकलन विकल्प चालू करें और आउटपुट में निर्देशिका नामों को देखें।)

  2. उस डायरेक्टरी में, avr-objdump -S fn.cpp.elf चलाएं > listing.txt जहाँ fn.cpp.elf आपके स्केच का नाम .inoलिया गया है और .cpp.elfअंत में जोड़ा गया है। उदाहरण के लिए, स्केच के साथ serialecho.ino:

    avr-objdump -S serialecho.cpp.elf> लिस्टिंग.txt

  3. listing.txtफ़ाइल देखें , और हेक्स अंकगणितीय का उपयोग करके प्रत्येक फ़ंक्शन के शुरुआती पते को उसके अंतिम पते से घटाएं। उदाहरण के लिए, setupकोड के साथ

    शून्य सेटअप () {Serial.begin (9600); }

लिस्टिंग में हम देखेंगे

00000144 <setup>:
...(6 lines snipped)...
 144:   26 e0           ldi     r18, 0x06       ; 6
 146:   40 e8           ldi     r20, 0x80       ; 128
 148:   55 e2           ldi     r21, 0x25       ; 37
 14a:   60 e0           ldi     r22, 0x00       ; 0
 14c:   70 e0           ldi     r23, 0x00       ; 0
 14e:   80 e1           ldi     r24, 0x10       ; 16
 150:   92 e0           ldi     r25, 0x02       ; 2
 152:   db c1           rjmp    .+950           ; 0x50a <_ZN14HardwareSerial5beginEmh>

00000154 <loop>:

गणना 0x154–0x144 = 0x10 का यह भाग दिखाता है कि यह setup16 बाइट्स लंबा है।

ये उदाहरण एक लिनक्स सिस्टम पर उत्पन्न हुए थे। मुझे लगता है कि दृष्टिकोण MSWindows सिस्टम पर समान है, इसके अलावा आपको avr-objdump.exeइसके बजाय कहने की avr-objdumpआवश्यकता हो सकती है, और इसके पथ को निर्दिष्ट करने की आवश्यकता हो सकती है। देखें, उदाहरण के लिए, Assemler परिणाम, कहाँ? forum.arduino.cc पर धागा।

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