2012-11-15 16 views
8

मैंने कभी भी एवीआर और एमएसपी 430 के साथ काम किया है, लेकिन यह दोनों के लिए सच है। संकलन और स्थिर रूप से जोड़ने के बाद, मेरा अंतिम ईएलएफ बाइनरी लगभग 208 केबी है और इंटेल हेक्स बाइनरी लगभग 41 केबी है। AVRDUDE मुझे बताता है कि यह लगभग 18 केबी अपलोड कर रहा है। वास्तव में यहाँ क्या चल रहा है?अपलोड किए गए बाइनरी आकार वास्तविक आकार से इतना छोटा क्यों है?

+0

एक .bin फ़ाइल बनाने का प्रयास करें ... जो सही आकार भी हो सकता है या नहीं भी हो सकता है लेकिन यह एक बेहतर संकेतक हो सकता है। स्वयं प्रारूप में केवल बाइट्स की तुलना में बहुत अधिक सामान है जो लोड हो जाता है। .hex फ़ाइल में कुछ अतिरिक्त सामान हैं और एएससीआई में हैं इसलिए आपके पास गेट के बाहर दो बार बाइट्स हैं और अतिरिक्त जोड़ें। ये फ़ाइल प्रारूप सभी विकिपीडिया और अन्य स्थानों पर प्रलेखित हैं –

+0

यह नहीं है कि फाइल से छोटी बाइनरी यह है कि फाइल बाइनरी से बड़ी हैं। –

उत्तर

10

मेरा अंतिम ELF द्विआधारी, 208kB

आसपास

हाँ है, क्योंकि ELF कच्चे मशीन कोड नहीं है। यह एक सार्वभौमिक निष्पादन योग्य प्रारूप है जिसमें स्थानांतरण जानकारी, गतिशील लोडिंग जानकारी, केवल पढ़ने के लिए डेटा, लिखने योग्य डेटा और कोड इत्यादि के लिए अलग-अलग रूपांतरण हैं। इनमें से अधिकतर माइक्रोकंट्रोलर पर अप्रासंगिक हैं क्योंकि इसमें कोई ओएस नहीं है, कोई गतिशील लोडिंग सुविधाएं नहीं हैं, इसलिए अधिकतर अतिरिक्त जानकारी को हटाया जा सकता है।

इंटेल हेक्स बाइनरी लगभग 41 केबी है। AVRDUDE मुझे बताता है कि यह लगभग 18 केबी अपलोड कर रहा है।

दो कारण। एक, इंटेल हेक्स फ़ाइल में प्रत्येक पंक्ति के अंत में चेकसम शामिल होते हैं। यदि आप उचित औसत रेखा लंबाई का उपयोग करते हैं, तो इन्हें काट लें, आप उम्मीद कर सकते हैं कि फाइल कुछ पर्सेंट से कम हो जाए, उदाहरण के लिए 36 केबी। फिर, इंटेल हेक्स फ़ाइलों को 'हेक्स' फाइलों का नाम देने का एक कारण है। उनमें कच्चे बाइनरी डेटा नहीं होते हैं लेकिन कच्चे बाइनरी डेटा हेक्साडेसिमल रूप में होते हैं - i। ई। एक असली बाइट दो बाइट्स का उपयोग करके एन्कोड किया गया है। इसलिए जब AVRdude कोड अपलोड करता है, तो यह इसे कच्चे बाइनरी में परिवर्तित करता है (यही वह एवीआर प्रोसेसर चला सकता है), और तब डेटा आकार फिर से 50% कम हो जाता है।

+2

ईएलएफ बाइनरी में भी प्रतीक हो सकते हैं। –

+0

@MichaelBurr हाँ, यह सही है। –

+0

बहुत बढ़िया। मुझे अच्छा लगता है, धन्यवाद! – Andrew

0

ऑब्जेक्ट कोड में अतिरिक्त मेटाडेटा शामिल है, जिसमें प्रतीक तालिका और डीबगर जानकारी शामिल है। यदि आप जीएनयू टूलचेन का उपयोग कर रहे हैं तो उस डेटा का अधिकांश सामान्यतः कंपाइलर और/या लिंकर विकल्प या स्ट्रिप उपयोगिता द्वारा छीन लिया जा सकता है।

एक हेक्स फ़ाइल एक ही बाइट का प्रतिनिधित्व करने के लिए 2 हेक्स अंकों के वर्णों का उपयोग करती है, साथ ही रिकॉर्ड ओवरहेड भी बाइनरी की लंबाई से दोगुनी से अधिक होगी।

0

दूसरों जैसा कि ऊपर कहा, हेक्स फ़ाइल स्वरूप है ascii-प्रिंट करने योग्य जो यह आसान संचारों लिंक (जैसे एक 7 बिट मॉडेम/टर्मिनल), बहुत मोटोरोला .s19 के समान पर स्थानांतरण के लिए बनाता है:

http://en.wikipedia.org/wiki/Intel_HEX

http://en.wikipedia.org/wiki/S19_%28file_format%29

संबंधित मुद्दे