2011-09-27 8 views
5

जब मैं अपने कोड संकलन मैं अंत में Motorola S records (a.mot) गैप के साथ (पूरे पता श्रेणी कोड और डेटा से नहीं कवर किया जाता है) मिलता है।मैं एस-रिकॉर्ड कैसे दो बाइट मानों को पता सीमाओं से शुरू कर सकता हूं?

मैं पैटर्न 0x01 0x80 साथ उन लोगों के अंतराल को भरने के लिए चाहते हैं। हालांकि, यह महत्वपूर्ण है कि दो-बाइट जोड़े के सभी पते भी शुरू हो जाएं। 0x0180 मेरे माइक्रो से एक ऑपोड है जिसे मैं निष्पादित करना चाहता हूं यदि पीसी अप्रयुक्त फ़्लैश क्षेत्र के पते तक पहुंच जाए।

इससे पहले कि आप का जवाब देना शुरू मैं आपको बताना है कि -repeat-डेटा में srec_cat एक मुद्दा है करना चाहते हैं:

  • को देखते हुए दो वर्गों जैसे सी और डी पता स्थान में (सी के बाद डी) एक के बाद एक डाल दिया।
  • यह देखते हुए कि खंड सी के अंतिम बाइट पता 0x76 और अनुभाग डी पता 0x78 पर है की पहली बाइट पर समाप्त होता है। दूसरे शब्दों में उनके बीच 0x77 पते पर 1 बाइट लंबा अंतर है।

इस तरह की स्थितियों के तहत, अगर मैं -repeat-डेटा 0x01 0x80 विकल्प का उपयोग, srec बिल्ली है कि एक बाइट 0x01 से भरना और 0x80 से निम्नलिखित की खाई को भरने शुरू कर देंगे।

मैं उन वर्गों के आकार पता नहीं क्योंकि लिंकर यह संभालती है।

+2

व्यक्तिगत रूप से मैं इसे एक त्वरित पायथन स्क्रिप्ट के साथ हल करता हूं जिसे पोस्ट-लिंक चरण कहा जाता है। – Vicky

उत्तर

3

srec_cat का उपयोग अपनी आवश्यक पता सीमा को कवर करने वाली फ़ाइल बनाने के लिए पूरी तरह से 0x01 0x80 अनुक्रम के साथ पूरी तरह से गठित फ़ाइल बनाने के लिए करें।

फिर -multiple और −disable-sequence-warning के साथ srec_cat का उपयोग करें, अपनी एप्लिकेशन छवि फ़ाइल के साथ "filler" फ़ाइल को "विलय" करने के विकल्प। आपको फिलर फ़ाइल को पहली फ़ाइल के रूप में निर्दिष्ट करना चाहिए ताकि इसे निर्दिष्ट निर्दिष्ट डेटा डेटा द्वारा अधिलेखित किया जा सके।

यह कई चेतावनी जारी करेगा, लेकिन यह काम करना चाहिए।

+0

मैंने इसके बारे में सोचा लेकिन अभी तक कोशिश नहीं की है। मैं इस सोल्यूशन को एक शॉट दूंगा। – devemouse

3

मैं Windows में एक सरल पार्सर इस तरह काम कर लिखना होगा:

  • कार्यक्रम एक आप संकलक से मिल गया के आधार पर एक नया एस रिकॉर्ड फ़ाइल बनाता है।
  • जेनरेट की गई फ़ाइल के माध्यम से लूप और एक समय में दो एस-रिकॉर्ड लाइनें पढ़ें।
  • यदि रेखा एक सूचना रेखा है, S0, S9, S5 आदि, बस इसे नई फ़ाइल में लिखें।
  • लाइन 1 एक पते + आकार लाइन 2 पर पता की तुलना में छोटे होते हैं तो आप एक अंतर पाया है। (पता 1 + आकार 1) < पता 2।
  • नई फ़ाइल में लाइन 1 लिखें।
  • आप एक अंतर पाया, तो लिखना अपने अंतराल के साथ एक लाइन स्थिरांक S1xx01800180 और इतने पर। जब आप जाते हैं चेकसम की गणना करें।
  • नई फ़ाइल में लाइन 2 लिखें।
+0

क्या एस 1 9 प्रारूप की आवश्यकता है कि रेखाएं पता क्रम में हों? –

+1

@ सैम स्कास मुझे यकीन नहीं है कि यह वास्तव में आवश्यक है, लेकिन मैंने जो भी टूल देखा है, उन्हें पता क्रम में, विशेष रूप से लिंकर्स में रखा गया है। यदि आप 100% सुनिश्चित करना चाहते हैं तो आप हमेशा पंक्तियों को क्रमबद्ध कर सकते हैं, फिर उपर्युक्त एल्गोरिदम लागू करें। – Lundin

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