एसआरईसी (फ़ाइल प्रारूप): Difference between revisions

From Vigyanwiki
No edit summary
Line 15: Line 15:
}}
}}


'''मोटोरोला S-रिकॉर्ड''' एक फ़ाइल स्वरूप है, जो 1970 के दशक के मध्य में मोटोरोला द्वारा बनाया गया था, जो बाइनरी जानकारी को ASCII टेक्स्ट फॉर्म में हेक्स मान के रूप में बताता है। इस फ़ाइल फॉर्मेट को '''SRECORD, SREC, S19, S28, S37''' के रूप में भी जाना जा सकता है। इसका उपयोग आमतौर पर माइक्रोकंट्रोलर्स, [[ईपीरोम]], [[ईईपीरोम]] और अन्य प्रकार के प्रोग्रामेबल लॉजिक उपकरणों में [[फ्लैश मेमोरी]] प्रोग्रामिंग के लिए किया जाता है। एक विशिष्ट एप्लिकेशन में, एक कंपाइलर या असेंबलर प्रोग्राम के सोर्स कोड (जैसे सी या असेंबली लैंग्वेज) को मशीन कोड में परिवर्तित करता है और इसे HEX फ़ाइल में आउटपुट करता है। फिर HEX फ़ाइल को प्रोग्रामर द्वारा मशीन कोड को गैर-वाष्पशील मेमोरी में "बर्न" करने के लिए आयात किया जाता है, या लोडिंग और निष्पादन के लिए लक्ष्य सिस्टम में स्थानांतरित किया जाता है।
'''मोटोरोला S-रिकॉर्ड''' एक फ़ाइल स्वरूप है, जो 1970 के दशक के मध्य में मोटोरोला द्वारा बनाया गया था, जो बाइनरी जानकारी को ASCII टेक्स्ट फॉर्म में हेक्स मान के रूप में बताता है। इस फ़ाइल फॉर्मेट को '''SRECORD, SREC, S19, S28, S37''' के रूप में भी जाना जा सकता है। इसका उपयोग आमतौर पर माइक्रोकंट्रोलर्स, [[ईपीरोम]], [[ईईपीरोम]] और अन्य टाइप के प्रोग्रामेबल लॉजिक उपकरणों में [[फ्लैश मेमोरी]] प्रोग्रामिंग के लिए किया जाता है। एक विशिष्ट एप्लिकेशन में, एक कंपाइलर या असेंबलर प्रोग्राम के सोर्स कोड (जैसे सी या असेंबली लैंग्वेज) को मशीन कोड में परिवर्तित करता है और इसे HEX फ़ाइल में आउटपुट करता है। फिर HEX फ़ाइल को प्रोग्रामर द्वारा मशीन कोड को गैर-वाष्पशील मेमोरी में "बर्न" करने के लिए आयात किया जाता है, या लोडिंग और निष्पादन के लिए लक्ष्य सिस्टम में स्थानांतरित किया जाता है।


==अवलोकन==
==अवलोकन==
Line 34: Line 34:
SREC प्रारूप फ़ाइल में ASCII टेक्स्ट रिकॉर्ड की एक श्रृंखला होती है। रिकॉर्ड्स में बाएं से दाएं निम्नलिखित संरचना है:
SREC प्रारूप फ़ाइल में ASCII टेक्स्ट रिकॉर्ड की एक श्रृंखला होती है। रिकॉर्ड्स में बाएं से दाएं निम्नलिखित संरचना है:
# ''रिकॉर्ड स्टार्ट''- प्रत्येक रिकॉर्ड एक बड़े अक्षर S अक्षर (ASCII 0x53) से शुरू होता है जो स्टार्ट-ऑफ़-रिकॉर्ड के लिए है।<ref name="Wiles-Felix_1975"/>
# ''रिकॉर्ड स्टार्ट''- प्रत्येक रिकॉर्ड एक बड़े अक्षर S अक्षर (ASCII 0x53) से शुरू होता है जो स्टार्ट-ऑफ़-रिकॉर्ड के लिए है।<ref name="Wiles-Felix_1975"/>
#''रिकॉर्ड टाइप''- एकल संख्यात्मक अंक 0 से 9 वर्ण (ASCII 0x30 से 0x39), जो रिकॉर्ड के प्रकार को परिभाषित करता है। नीचे दी गई तालिका देखें।
#''रिकॉर्ड टाइप''- एकल संख्यात्मक अंक 0 से 9 वर्ण (ASCII 0x30 से 0x39), जो रिकॉर्ड के टाइप को परिभाषित करता है। नीचे दी गई तालिका देखें।
# ''बाइट काउंट'' - दो हेक्साडेसिमल अंक (00 से एफएफ), जो बाकी रिकॉर्ड (address + data + checksum) में आने वाले बाइट्स (हेक्स अंक जोड़े) की संख्या को दर्शाता है। इस फ़ील्ड का न्यूनतम मान 3 (16-बिट एड्रेस फ़ील्ड के लिए 2 प्लस 1 चेकसम बाइट) और अधिकतम मान 255 (0xFF) है। "00" / "01" / "02" अवैध मान हैं।
# ''बाइट काउंट'' - दो हेक्साडेसिमल अंक (00 से एफएफ), जो बाकी रिकॉर्ड (address + data + checksum) में आने वाले बाइट्स (हेक्स अंक जोड़े) की संख्या को दर्शाता है। इस फ़ील्ड का न्यूनतम मान 3 (16-बिट एड्रेस फ़ील्ड के लिए 2 प्लस 1 चेकसम बाइट) और अधिकतम मान 255 (0xFF) है। "00" / "01" / "02" अवैध मान हैं।
# ''एड्रेस'' - रिकॉर्ड प्रकार के अनुसार निर्धारित चार/छह/आठ हेक्स अंक। एड्रेस बाइट्स बिग-एंडियन फॉर्मेट में व्यवस्थित हैं।
# ''एड्रेस'' - रिकॉर्ड टाइप के अनुसार निर्धारित चार/छह/आठ हेक्स अंक। एड्रेस बाइट्स बिग-एंडियन फॉर्मेट में व्यवस्थित हैं।
# ''डेटा'' - डेटा के ''n'' बाइट्स के लिए ''2n'' हेक्स अंकों का एक क्रम। S1/S2/S3 रिकॉर्ड के लिए, प्रति रिकॉर्ड अधिकतम 32 बाइट्स सामान्य है क्योंकि यह 80 कैरेक्टर चौड़ी टर्मिनल स्क्रीन पर फिट होगा, हालांकि 16 बाइट्स एक विशिष्ट एड्रेस पर प्रत्येक बाइट को विज़ुअली डिकोड करना आसान होगा।
# ''डेटा'' - डेटा के ''n'' बाइट्स के लिए ''2n'' हेक्स अंकों का एक क्रम। S1/S2/S3 रिकॉर्ड के लिए, प्रति रिकॉर्ड अधिकतम 32 बाइट्स सामान्य है क्योंकि यह 80 कैरेक्टर चौड़ी टर्मिनल स्क्रीन पर फिट होगा, हालांकि 16 बाइट्स एक विशिष्ट एड्रेस पर प्रत्येक बाइट को विज़ुअली डिकोड करना आसान होगा।
# चेकसम - दो हेक्स अंक, बाइट गिनती, पता और डेटा फ़ील्ड के लिए दो हेक्स अंक जोड़े द्वारा दर्शाए गए मानों के योग का सबसे कम महत्वपूर्ण बाइट। C प्रोग्रामिंग भाषा में, योग को चेकसम में परिवर्तित किया जाता है: <code>0xFF - (sum & 0xFF)</code><br />
# चेकसम - दो हेक्स अंक, बाइट गिनती, पता और डेटा फ़ील्ड के लिए दो हेक्स अंक जोड़े द्वारा दर्शाए गए मानों के योग का सबसे कम महत्वपूर्ण बाइट। C प्रोग्रामिंग भाषा में, योग को चेकसम में परिवर्तित किया जाता है: <code>0xFF - (sum & 0xFF)</code><br />
===टेक्स्ट पंक्ति टर्मिनेटर===
===टेक्स्ट लाइन टर्मिनेटर===
SREC रिकॉर्ड को एक या अधिक ASCII लाइन समाप्ति वर्णों द्वारा अलग किया जाता है ताकि प्रत्येक रिकॉर्ड एक टेक्स्ट लाइन पर अकेला दिखाई दे। यह रिकॉर्ड को दृश्य रूप से सीमांकित करके सुपाठ्यता को बढ़ाता है और यह रिकॉर्ड के बीच पैडिंग भी प्रदान करता है जिसका उपयोग मशीन [[ पदच्छेद ]] दक्षता में सुधार के लिए किया जा सकता है।
SREC रिकॉर्ड को एक या अधिक ASCII लाइन समाप्ति वर्णों द्वारा अलग किया जाता है ताकि प्रत्येक रिकॉर्ड एक टेक्स्ट लाइन पर अकेला दिखाई दे। यह रिकॉर्ड को दृष्टिगत रूप से सीमित करके सुपाठ्यता को बढ़ाता है और यह रिकॉर्ड के बीच पैडिंग भी प्रदान करता है जिसका उपयोग मशीन पार्सिंग दक्षता में सुधार करने के लिए किया जा सकता है।


HEX रिकॉर्ड बनाने वाले प्रोग्राम आमतौर पर लाइन टर्मिनेशन वर्णों का उपयोग करते हैं जो उनके [[ऑपरेटिंग सिस्टम]] की परंपराओं के अनुरूप होते हैं। उदाहरण के लिए, लिनक्स प्रोग्राम लाइनों को समाप्त करने के लिए एकल एलएफ कैरेक्टर ([[ नई पंक्ति ]], एएससीआईआई कैरेक्टर वैल्यू के रूप में 0x0A) कैरेक्टर का उपयोग करते हैं, जबकि विंडोज प्रोग्राम एलएफ कैरेक्टर के बाद सीआर कैरेक्टर ([[कैरिज रिटर्न]], एएससीआईआई कैरेक्टर वैल्यू के रूप में 0x0D) का उपयोग करते हैं।
प्रोग्राम जो HEX रिकॉर्ड बनाते हैं, आमतौर पर लाइन टर्मिनेशन कैरेक्टर का उपयोग करते हैं जो उनके [[ऑपरेटिंग सिस्टम]] के सम्मेलनों के अनुरूप होते हैं। उदाहरण के लिए, लिनक्स प्रोग्राम लाइनों को समाप्त करने के लिए एकल एलएफ कैरेक्टर (लाइन फीड, एएससीआईआई कैरेक्टर वैल्यू के रूप में 0x0A) कैरेक्टर का उपयोग करते हैं, जबकि विंडोज़ प्रोग्राम एक एलएफ कैरेक्टर के बाद सीआर कैरेक्टर ([[कैरिज रिटर्न]], एएससीआईआई कैरेक्टर वैल्यू के रूप में 0x0D) का उपयोग करते हैं।


===रिकॉर्ड प्रकार===
===रिकॉर्ड टाइप===
निम्न तालिका 10 संभावित S-रिकॉर्ड का वर्णन करती है। S4 आरक्षित है और वर्तमान में परिभाषित नहीं है। S6 मूल रूप से आरक्षित था लेकिन बाद में इसे फिर से परिभाषित किया गया।
निम्न तालिका 10 संभावित S-रिकॉर्ड का वर्णन करती है। S4 आरक्षित है और वर्तमान में परिभाषित नहीं है। S6 मूल रूप से आरक्षित था लेकिन बाद में इसे फिर से परिभाषित किया गया।
{| class="wikitable"
{| class="wikitable"
Line 141: Line 141:
====रिकॉर्ड लंबाई====
====रिकॉर्ड लंबाई====
ऐतिहासिक [[यूनिक्स]] ओ/S दस्तावेज़ीकरण का एक मैनुअल पृष्ठ बताता है: एक S-रिकॉर्ड फ़ाइल में विशेष रूप से स्वरूपित ASCII वर्ण स्ट्रिंग्स का एक अनुक्रम होता है। एक S-रिकॉर्ड की लंबाई 78 बाइट्स से कम या उसके बराबर होगी। [[मैनुअल पेज]] डेटा फ़ील्ड में वर्णों की संख्या को 64 (या 32 डेटा बाइट्स) तक सीमित करता है।<ref name="Unix-SREC"/>8-हेक्स-वर्ण एड्रेस और 64 डेटा वर्णों वाला एक रिकॉर्ड 78 (2 + 2 + 8 + 64 + 2) वर्ण लंबा होगा (यह गणना संभावित अंत-पंक्ति या स्ट्रिंग समाप्ति वर्णों को अनदेखा करती है), और 80-वर्ण चौड़े [[ तैलिप्रिंटर ]] पर फिट बैठता है। मैनुअल पेज के नीचे एक नोट में कहा गया है, यह मैनुअल पेज एकमात्र ऐसा स्थान है जहां कुल रिकॉर्ड लंबाई पर 78-बाइट सीमा या डेटा लंबाई पर 64-बाइट सीमा का दस्तावेजीकरण किया गया है। सामान्य मामले के लिए इन मूल्यों पर भरोसा नहीं किया जाना चाहिए।<ref name="Unix-SREC"/>  
ऐतिहासिक [[यूनिक्स]] ओ/S दस्तावेज़ीकरण का एक मैनुअल पृष्ठ बताता है: एक S-रिकॉर्ड फ़ाइल में विशेष रूप से स्वरूपित ASCII वर्ण स्ट्रिंग्स का एक अनुक्रम होता है। एक S-रिकॉर्ड की लंबाई 78 बाइट्स से कम या उसके बराबर होगी। [[मैनुअल पेज]] डेटा फ़ील्ड में वर्णों की संख्या को 64 (या 32 डेटा बाइट्स) तक सीमित करता है।<ref name="Unix-SREC"/>8-हेक्स-वर्ण एड्रेस और 64 डेटा वर्णों वाला एक रिकॉर्ड 78 (2 + 2 + 8 + 64 + 2) वर्ण लंबा होगा (यह गणना संभावित अंत-पंक्ति या स्ट्रिंग समाप्ति वर्णों को अनदेखा करती है), और 80-वर्ण चौड़े [[ तैलिप्रिंटर ]] पर फिट बैठता है। मैनुअल पेज के नीचे एक नोट में कहा गया है, यह मैनुअल पेज एकमात्र ऐसा स्थान है जहां कुल रिकॉर्ड लंबाई पर 78-बाइट सीमा या डेटा लंबाई पर 64-बाइट सीमा का दस्तावेजीकरण किया गया है। सामान्य मामले के लिए इन मूल्यों पर भरोसा नहीं किया जाना चाहिए।<ref name="Unix-SREC"/>  
यदि 78 बाइट ऐतिहासिक सीमा को नजरअंदाज कर दिया जाए, तो S-रिकॉर्ड की अधिकतम लंबाई 514 अक्षर होगी। 0xFF (255) की बाइट गणना मानते हुए, यह रिकॉर्ड प्रकार फ़ील्ड के लिए 2 + बाइट काउंट फ़ील्ड के लिए 2 + एड्रेस / डेटा / चेकसम फ़ील्ड के लिए (2 * 255) होगी। अधिकतम दो नियंत्रण वर्ण (कैरिज रिटर्न और/या [[रेखा भरण]]), और/या C/C++ प्रोग्रामिंग भाषाओं के लिए एक NUL (0x00) स्ट्रिंग टर्मिनेटर रखने के लिए अतिरिक्त बफर स्थान की आवश्यकता हो सकती है। लंबी लाइन लंबाई का उपयोग करने में समस्याएं हैं: मोटोरोला S-रिकॉर्ड फॉर्मेट परिभाषा 255 बाइट्स पेलोड, या 514 अक्षरों की लाइनों, साथ ही लाइन समाप्ति की अनुमति देती है। सभी EPROM प्रोग्रामर के पास इतने बड़े रिकॉर्ड से निपटने के लिए पर्याप्त बड़ी लाइन बफ़र्स होने चाहिए। बहुत कम लोग ऐसा करते हैं।<ref name="SF-srec_examples"/>
यदि 78 बाइट ऐतिहासिक सीमा को नजरअंदाज कर दिया जाए, तो S-रिकॉर्ड की अधिकतम लंबाई 514 अक्षर होगी। 0xFF (255) की बाइट गणना मानते हुए, यह रिकॉर्ड टाइप फ़ील्ड के लिए 2 + बाइट काउंट फ़ील्ड के लिए 2 + एड्रेस / डेटा / चेकसम फ़ील्ड के लिए (2 * 255) होगी। अधिकतम दो नियंत्रण वर्ण (कैरिज रिटर्न और/या [[रेखा भरण]]), और/या C/C++ प्रोग्रामिंग भाषाओं के लिए एक NUL (0x00) स्ट्रिंग टर्मिनेटर रखने के लिए अतिरिक्त बफर स्थान की आवश्यकता हो सकती है। लंबी लाइन लंबाई का उपयोग करने में समस्याएं हैं: मोटोरोला S-रिकॉर्ड फॉर्मेट परिभाषा 255 बाइट्स पेलोड, या 514 अक्षरों की लाइनों, साथ ही लाइन समाप्ति की अनुमति देती है। सभी EPROM प्रोग्रामर के पास इतने बड़े रिकॉर्ड से निपटने के लिए पर्याप्त बड़ी लाइन बफ़र्स होने चाहिए। बहुत कम लोग ऐसा करते हैं।<ref name="SF-srec_examples"/>




Line 149: Line 149:
कुछ ऐतिहासिक दस्तावेज़ इस फ़ील्ड में अधिकतम 32 बाइट्स डेटा (64 हेक्स वर्ण) की अनुशंसा करते हैं<ref name="Unix-SREC"/>(शायद इसलिए कि 32 डेटा के 2 की सबसे बड़ी शक्ति है जो एक [[प्रति पंक्ति वर्ण]] वाइड टेलीप्रिंटर/[[कंप्यूटर टर्मिनल]]/[[ छिद्रित कार्ड ]] पर फिट होगी)।
कुछ ऐतिहासिक दस्तावेज़ इस फ़ील्ड में अधिकतम 32 बाइट्स डेटा (64 हेक्स वर्ण) की अनुशंसा करते हैं<ref name="Unix-SREC"/>(शायद इसलिए कि 32 डेटा के 2 की सबसे बड़ी शक्ति है जो एक [[प्रति पंक्ति वर्ण]] वाइड टेलीप्रिंटर/[[कंप्यूटर टर्मिनल]]/[[ छिद्रित कार्ड ]] पर फिट होगी)।


यदि 32 बाइट ऐतिहासिक सीमा को नजरअंदाज कर दिया जाता है, तो डेटा की अधिकतम मात्रा एड्रेस फ़ील्ड के आकार (4/6/8) के आधार पर भिन्न होती है। डेटा के बाइट्स की अधिकतम संख्या की गणना 255 (बाइट काउंट फ़ील्ड के लिए अधिकतम) माइनस (चेकसम फ़ील्ड के लिए 1 बाइट) माइनस (एड्रेस फ़ील्ड में बाइट्स की संख्या) द्वारा की जाती है, इस प्रकार प्रत्येक रिकॉर्ड प्रकार के लिए डेटा की अधिकतम मात्रा है: S0 & S1 रिकॉर्ड्स, 251 डेटा बाइट्स (502 HEX वर्ण) के लिए 252 डेटा बाइट्स (504 HEX वर्ण)।
यदि 32 बाइट ऐतिहासिक सीमा को नजरअंदाज कर दिया जाता है, तो डेटा की अधिकतम मात्रा एड्रेस फ़ील्ड के आकार (4/6/8) के आधार पर भिन्न होती है। डेटा के बाइट्स की अधिकतम संख्या की गणना 255 (बाइट काउंट फ़ील्ड के लिए अधिकतम) माइनस (चेकसम फ़ील्ड के लिए 1 बाइट) माइनस (एड्रेस फ़ील्ड में बाइट्स की संख्या) द्वारा की जाती है, इस टाइप प्रत्येक रिकॉर्ड टाइप के लिए डेटा की अधिकतम मात्रा है: S0 & S1 रिकॉर्ड्स, 251 डेटा बाइट्स (502 HEX वर्ण) के लिए 252 डेटा बाइट्स (504 HEX वर्ण)।


====टिप्पणियाँ====
====टिप्पणियाँ====
S0 हेडर रिकॉर्ड में ASCII-टू-हेक्स रूपांतरित टिप्पणियों के अलावा, SREC फ़ाइल फॉर्मेट आधिकारिक तौर पर मानव-पठनीय ASCII टिप्पणियों का समर्थन नहीं करता है, हालांकि कुछ सॉफ़्टवेयर उन सभी पंक्तियों को अनदेखा कर देते हैं जो S से शुरू नहीं होती हैं और/या चेकसम फ़ील्ड के बाद के सभी टेक्स्ट को अनदेखा कर देते हैं (इस प्रकार टिप्पणियों के लिए अनुगामी टेक्स्ट का उपयोग कभी-कभी (असंगत रूप से) किया जाता है)। उदाहरण के लिए, सीसीएस पीआईसी कंपाइलर एक रखने का समर्थन करता है; Intel HEX फ़ाइल के ऊपर या नीचे टिप्पणी पंक्ति, और इसके मैनुअल में कहा गया है कि कुछ प्रोग्रामर (विशेष रूप से MPLAB) हेक्स फ़ाइल के शीर्ष पर टिप्पणियाँ पसंद नहीं करते हैं, यही कारण है कि कंपाइलर के पास हेक्स फ़ाइल के नीचे टिप्पणी रखने का विकल्प होता है।<ref name="CCS_2014"/>
S0 हेडर रिकॉर्ड में ASCII-टू-हेक्स रूपांतरित टिप्पणियों के अलावा, SREC फ़ाइल फॉर्मेट आधिकारिक तौर पर मानव-पठनीय ASCII टिप्पणियों का समर्थन नहीं करता है, हालांकि कुछ सॉफ़्टवेयर उन सभी पंक्तियों को अनदेखा कर देते हैं जो S से शुरू नहीं होती हैं और/या चेकसम फ़ील्ड के बाद के सभी टेक्स्ट को अनदेखा कर देते हैं (इस टाइप टिप्पणियों के लिए अनुगामी टेक्स्ट का उपयोग कभी-कभी (असंगत रूप से) किया जाता है)। उदाहरण के लिए, सीसीएस पीआईसी कंपाइलर एक रखने का समर्थन करता है; Intel HEX फ़ाइल के ऊपर या नीचे टिप्पणी पंक्ति, और इसके मैनुअल में कहा गया है कि कुछ प्रोग्रामर (विशेष रूप से MPLAB) हेक्स फ़ाइल के शीर्ष पर टिप्पणियाँ पसंद नहीं करते हैं, यही कारण है कि कंपाइलर के पास हेक्स फ़ाइल के नीचे टिप्पणी रखने का विकल्प होता है।<ref name="CCS_2014"/>





Revision as of 11:25, 9 August 2023

S-record
Motorola SREC Chart.png
A quick reference chart for the Motorola SREC format. (Note that in the record example image the word "bytes" is alternatively used to specify characters.)
Filename extension
.s19, .s28, .s37, .s, .s1, .s2, .s3, .sx, .srec, .exo,[1] .mot, .mxt
Developed byMotorola

मोटोरोला S-रिकॉर्ड एक फ़ाइल स्वरूप है, जो 1970 के दशक के मध्य में मोटोरोला द्वारा बनाया गया था, जो बाइनरी जानकारी को ASCII टेक्स्ट फॉर्म में हेक्स मान के रूप में बताता है। इस फ़ाइल फॉर्मेट को SRECORD, SREC, S19, S28, S37 के रूप में भी जाना जा सकता है। इसका उपयोग आमतौर पर माइक्रोकंट्रोलर्स, ईपीरोम, ईईपीरोम और अन्य टाइप के प्रोग्रामेबल लॉजिक उपकरणों में फ्लैश मेमोरी प्रोग्रामिंग के लिए किया जाता है। एक विशिष्ट एप्लिकेशन में, एक कंपाइलर या असेंबलर प्रोग्राम के सोर्स कोड (जैसे सी या असेंबली लैंग्वेज) को मशीन कोड में परिवर्तित करता है और इसे HEX फ़ाइल में आउटपुट करता है। फिर HEX फ़ाइल को प्रोग्रामर द्वारा मशीन कोड को गैर-वाष्पशील मेमोरी में "बर्न" करने के लिए आयात किया जाता है, या लोडिंग और निष्पादन के लिए लक्ष्य सिस्टम में स्थानांतरित किया जाता है।

अवलोकन

इतिहास

S-रिकॉर्ड फॉर्मेट मोटोरोला 6800 प्रोसेसर के लिए 1970 के दशक के मध्य में बनाया गया था। उस और अन्य एंबेडेड प्रोसेसर के लिए सॉफ़्टवेयर विकास उपकरण S-रिकॉर्ड फॉर्मेट में निष्पादन योग्य कोड और डेटा बनाएंगे। PROM प्रोग्रामर तब S-रिकॉर्ड फॉर्मेट को पढ़ेंगे और एम्बेडेड सिस्टम में प्रयुक्त PROM या EPROM में डेटा को "बर्न" करेंगे।

अन्य हेक्स फॉर्मेट

समान उद्देश्य के साथ अन्य ASCII एन्कोडिंग भी हैं। BPNF, BHLF, और B10F प्रारंभिक बाइनरी फॉर्मेट थे, लेकिन वे न तो कॉम्पैक्ट हैं और न ही फ्लेक्सिबल हैं। हेक्साडेसिमल फॉर्मेट अधिक कॉम्पैक्ट हैं क्योंकि वे प्रति वर्ण 1 बिट के बजाय 4 बिट का प्रतिनिधित्व करते हैं। कई, जैसे एस-रिकॉर्ड, अधिक लचीले होते हैं क्योंकि उनमें एड्रेस जानकारी शामिल होती है ताकि वे PROM के केवल एक हिस्से को निर्दिष्ट कर सकें। इंटेल HEX फॉर्मेट का उपयोग अक्सर इंटेल प्रोसेसर के साथ किया जाता था। टेकहेक्स एक और हेक्स फॉर्मेट है जिसमें डिबगिंग के लिए एक प्रतीक तालिका शामिल हो सकती है।

फॉर्मेट

रिकॉर्ड संरचना

S Type Byte Count Address Data Checksum

SREC प्रारूप फ़ाइल में ASCII टेक्स्ट रिकॉर्ड की एक श्रृंखला होती है। रिकॉर्ड्स में बाएं से दाएं निम्नलिखित संरचना है:

  1. रिकॉर्ड स्टार्ट- प्रत्येक रिकॉर्ड एक बड़े अक्षर S अक्षर (ASCII 0x53) से शुरू होता है जो स्टार्ट-ऑफ़-रिकॉर्ड के लिए है।[2]
  2. रिकॉर्ड टाइप- एकल संख्यात्मक अंक 0 से 9 वर्ण (ASCII 0x30 से 0x39), जो रिकॉर्ड के टाइप को परिभाषित करता है। नीचे दी गई तालिका देखें।
  3. बाइट काउंट - दो हेक्साडेसिमल अंक (00 से एफएफ), जो बाकी रिकॉर्ड (address + data + checksum) में आने वाले बाइट्स (हेक्स अंक जोड़े) की संख्या को दर्शाता है। इस फ़ील्ड का न्यूनतम मान 3 (16-बिट एड्रेस फ़ील्ड के लिए 2 प्लस 1 चेकसम बाइट) और अधिकतम मान 255 (0xFF) है। "00" / "01" / "02" अवैध मान हैं।
  4. एड्रेस - रिकॉर्ड टाइप के अनुसार निर्धारित चार/छह/आठ हेक्स अंक। एड्रेस बाइट्स बिग-एंडियन फॉर्मेट में व्यवस्थित हैं।
  5. डेटा - डेटा के n बाइट्स के लिए 2n हेक्स अंकों का एक क्रम। S1/S2/S3 रिकॉर्ड के लिए, प्रति रिकॉर्ड अधिकतम 32 बाइट्स सामान्य है क्योंकि यह 80 कैरेक्टर चौड़ी टर्मिनल स्क्रीन पर फिट होगा, हालांकि 16 बाइट्स एक विशिष्ट एड्रेस पर प्रत्येक बाइट को विज़ुअली डिकोड करना आसान होगा।
  6. चेकसम - दो हेक्स अंक, बाइट गिनती, पता और डेटा फ़ील्ड के लिए दो हेक्स अंक जोड़े द्वारा दर्शाए गए मानों के योग का सबसे कम महत्वपूर्ण बाइट। C प्रोग्रामिंग भाषा में, योग को चेकसम में परिवर्तित किया जाता है: 0xFF - (sum & 0xFF)

टेक्स्ट लाइन टर्मिनेटर

SREC रिकॉर्ड को एक या अधिक ASCII लाइन समाप्ति वर्णों द्वारा अलग किया जाता है ताकि प्रत्येक रिकॉर्ड एक टेक्स्ट लाइन पर अकेला दिखाई दे। यह रिकॉर्ड को दृष्टिगत रूप से सीमित करके सुपाठ्यता को बढ़ाता है और यह रिकॉर्ड के बीच पैडिंग भी प्रदान करता है जिसका उपयोग मशीन पार्सिंग दक्षता में सुधार करने के लिए किया जा सकता है।

प्रोग्राम जो HEX रिकॉर्ड बनाते हैं, आमतौर पर लाइन टर्मिनेशन कैरेक्टर का उपयोग करते हैं जो उनके ऑपरेटिंग सिस्टम के सम्मेलनों के अनुरूप होते हैं। उदाहरण के लिए, लिनक्स प्रोग्राम लाइनों को समाप्त करने के लिए एकल एलएफ कैरेक्टर (लाइन फीड, एएससीआईआई कैरेक्टर वैल्यू के रूप में 0x0A) कैरेक्टर का उपयोग करते हैं, जबकि विंडोज़ प्रोग्राम एक एलएफ कैरेक्टर के बाद सीआर कैरेक्टर (कैरिज रिटर्न, एएससीआईआई कैरेक्टर वैल्यू के रूप में 0x0D) का उपयोग करते हैं।

रिकॉर्ड टाइप

निम्न तालिका 10 संभावित S-रिकॉर्ड का वर्णन करती है। S4 आरक्षित है और वर्तमान में परिभाषित नहीं है। S6 मूल रूप से आरक्षित था लेकिन बाद में इसे फिर से परिभाषित किया गया।

Record
field
Record
purpose
Address
field
Data
field
Record
description
S0 Header 16-bit
"0000"
No This record contains vendor specific ASCII text comment represented as a series of hex digit pairs. It is common to see the data for this record in the format of a null-terminated string. The text data can be anything including a mixture of the following information: file/module name, version/revision number, date/time, product name, vendor name, memory designator on PCB, copyright notice, sign on.[3] It is common to see: 48, 44, 52 which is the ASCII representation of the letters "H", "D", "R".[4]
S1 Data 16-bit
Address
Yes This record contains data that starts at a 16-bit address.[4][3] The number of bytes of data contained in this record is "Byte Count Field" minus 3 (2 bytes for "16-bit Address Field" plus 1 byte for "Checksum Field"). This record is typically used for 8-bit processors, such as 6502, 6800, 8051, Z80, AVR, PIC.
S2 Data 24-bit
Address
Yes This record contains data that starts at a 24-bit address.[4] The number of bytes of data contained in this record is "Byte Count Field" minus 4 (3 bytes for "24-bit Address Field" plus 1 byte for "Checksum Field").
S3 Data 32-bit
Address
Yes This record contains data that starts at a 32-bit address.[4] The number of bytes of data contained in this record is "Byte Count Field" minus 5 (4 bytes for "32-bit Address Field" plus 1 byte for "Checksum Field"). This record is typically used for 32-bit processors, such as 68000, ARM, RISC-V.
S4 Reserved This record is reserved.
S5 Count 16-bit
Count
No This optional record contains a 16-bit count of S1/S2/S3 records.[4] This record is used if the record count is less than or equal to 65,535 (0xFFFF), otherwise S6 record would be used.
S6 Count 24-bit
Count
No This optional record contains a 24-bit count of S1/S2/S3 records. This record is used if the record count is less than or equal to 16,777,215 (0xFFFFFF). If less than 65,536 (0x10000), then S5 record would be used. NOTE: This newer record is the most recent change (it may not be official).[4]
S7 Start Address
(Termination)
32-bit
Address
No This record contains the starting execution location at a 32-bit address.[4][5] This is used to terminate a series of S3 records. If a SREC file is only used to program a memory device and the execution location is ignored, then an address of zero could be used.
S8 Start Address
(Termination)
24-bit
Address
No This record contains the starting execution location at a 24-bit address.[4][5] This is used to terminate a series of S2 records. If a SREC file is only used to program a memory device and the execution location is ignored, then an address of zero could be used.
S9 Start Address
(Termination)
16-bit
Address
No This record contains the starting execution location at a 16-bit address.[4][5] This is used to terminate a series of S1 records.[3] If a SREC file is only used to program a memory device and the execution location is ignored, then an address of zero could be used.


रिकॉर्ड क्रम

हालाँकि कुछ यूनिक्स दस्तावेज़ों में कहा गया है कि फ़ाइल के भीतर S-रिकॉर्ड का क्रम कोई महत्व नहीं रखता है और कोई विशेष क्रम नहीं माना जा सकता है,[4]व्यवहार में अधिकांश सॉफ़्टवेयर ने SREC रिकॉर्ड का ऑर्डर दिया है। विशिष्ट रिकॉर्ड क्रम एक (कभी-कभी वैकल्पिक) S0 हेडर रिकॉर्ड के साथ शुरू होता है, एक या अधिक S1/S2/S3 डेटा रिकॉर्ड के अनुक्रम के साथ जारी रहता है, एक वैकल्पिक S5/S6 गणना रिकॉर्ड हो सकता है, और एक उपयुक्त S7/S8/S9 समाप्ति रिकॉर्ड के साथ समाप्त होता है।

S19-शैली 16-बिट एड्रेस रिकॉर्ड
  1. स0
  2. S1 (एक या अधिक रिकॉर्ड)
  3. S5 (वैकल्पिक रिकॉर्ड)
  4. S9
S28-शैली 24-बिट एड्रेस रिकॉर्ड
  1. स0
  2. S2 (एक या अधिक रिकॉर्ड)
  3. S5 (वैकल्पिक रिकॉर्ड)
  4. S8
S37-शैली 32-बिट एड्रेस रिकॉर्ड
  1. स0
  2. S3 (एक या अधिक रिकॉर्ड)
  3. S5 (वैकल्पिक रिकॉर्ड)
  4. एस7

सीमाएँ

रिकॉर्ड लंबाई

ऐतिहासिक यूनिक्स ओ/S दस्तावेज़ीकरण का एक मैनुअल पृष्ठ बताता है: एक S-रिकॉर्ड फ़ाइल में विशेष रूप से स्वरूपित ASCII वर्ण स्ट्रिंग्स का एक अनुक्रम होता है। एक S-रिकॉर्ड की लंबाई 78 बाइट्स से कम या उसके बराबर होगी। मैनुअल पेज डेटा फ़ील्ड में वर्णों की संख्या को 64 (या 32 डेटा बाइट्स) तक सीमित करता है।[4]8-हेक्स-वर्ण एड्रेस और 64 डेटा वर्णों वाला एक रिकॉर्ड 78 (2 + 2 + 8 + 64 + 2) वर्ण लंबा होगा (यह गणना संभावित अंत-पंक्ति या स्ट्रिंग समाप्ति वर्णों को अनदेखा करती है), और 80-वर्ण चौड़े तैलिप्रिंटर पर फिट बैठता है। मैनुअल पेज के नीचे एक नोट में कहा गया है, यह मैनुअल पेज एकमात्र ऐसा स्थान है जहां कुल रिकॉर्ड लंबाई पर 78-बाइट सीमा या डेटा लंबाई पर 64-बाइट सीमा का दस्तावेजीकरण किया गया है। सामान्य मामले के लिए इन मूल्यों पर भरोसा नहीं किया जाना चाहिए।[4] यदि 78 बाइट ऐतिहासिक सीमा को नजरअंदाज कर दिया जाए, तो S-रिकॉर्ड की अधिकतम लंबाई 514 अक्षर होगी। 0xFF (255) की बाइट गणना मानते हुए, यह रिकॉर्ड टाइप फ़ील्ड के लिए 2 + बाइट काउंट फ़ील्ड के लिए 2 + एड्रेस / डेटा / चेकसम फ़ील्ड के लिए (2 * 255) होगी। अधिकतम दो नियंत्रण वर्ण (कैरिज रिटर्न और/या रेखा भरण), और/या C/C++ प्रोग्रामिंग भाषाओं के लिए एक NUL (0x00) स्ट्रिंग टर्मिनेटर रखने के लिए अतिरिक्त बफर स्थान की आवश्यकता हो सकती है। लंबी लाइन लंबाई का उपयोग करने में समस्याएं हैं: मोटोरोला S-रिकॉर्ड फॉर्मेट परिभाषा 255 बाइट्स पेलोड, या 514 अक्षरों की लाइनों, साथ ही लाइन समाप्ति की अनुमति देती है। सभी EPROM प्रोग्रामर के पास इतने बड़े रिकॉर्ड से निपटने के लिए पर्याप्त बड़ी लाइन बफ़र्स होने चाहिए। बहुत कम लोग ऐसा करते हैं।[6]


डेटा फ़ील्ड

S0/S1/S2/S3 रिकॉर्ड के लिए डेटा की न्यूनतम मात्रा शून्य है।

कुछ ऐतिहासिक दस्तावेज़ इस फ़ील्ड में अधिकतम 32 बाइट्स डेटा (64 हेक्स वर्ण) की अनुशंसा करते हैं[4](शायद इसलिए कि 32 डेटा के 2 की सबसे बड़ी शक्ति है जो एक प्रति पंक्ति वर्ण वाइड टेलीप्रिंटर/कंप्यूटर टर्मिनल/छिद्रित कार्ड पर फिट होगी)।

यदि 32 बाइट ऐतिहासिक सीमा को नजरअंदाज कर दिया जाता है, तो डेटा की अधिकतम मात्रा एड्रेस फ़ील्ड के आकार (4/6/8) के आधार पर भिन्न होती है। डेटा के बाइट्स की अधिकतम संख्या की गणना 255 (बाइट काउंट फ़ील्ड के लिए अधिकतम) माइनस (चेकसम फ़ील्ड के लिए 1 बाइट) माइनस (एड्रेस फ़ील्ड में बाइट्स की संख्या) द्वारा की जाती है, इस टाइप प्रत्येक रिकॉर्ड टाइप के लिए डेटा की अधिकतम मात्रा है: S0 & S1 रिकॉर्ड्स, 251 डेटा बाइट्स (502 HEX वर्ण) के लिए 252 डेटा बाइट्स (504 HEX वर्ण)।

टिप्पणियाँ

S0 हेडर रिकॉर्ड में ASCII-टू-हेक्स रूपांतरित टिप्पणियों के अलावा, SREC फ़ाइल फॉर्मेट आधिकारिक तौर पर मानव-पठनीय ASCII टिप्पणियों का समर्थन नहीं करता है, हालांकि कुछ सॉफ़्टवेयर उन सभी पंक्तियों को अनदेखा कर देते हैं जो S से शुरू नहीं होती हैं और/या चेकसम फ़ील्ड के बाद के सभी टेक्स्ट को अनदेखा कर देते हैं (इस टाइप टिप्पणियों के लिए अनुगामी टेक्स्ट का उपयोग कभी-कभी (असंगत रूप से) किया जाता है)। उदाहरण के लिए, सीसीएस पीआईसी कंपाइलर एक रखने का समर्थन करता है; Intel HEX फ़ाइल के ऊपर या नीचे टिप्पणी पंक्ति, और इसके मैनुअल में कहा गया है कि कुछ प्रोग्रामर (विशेष रूप से MPLAB) हेक्स फ़ाइल के शीर्ष पर टिप्पणियाँ पसंद नहीं करते हैं, यही कारण है कि कंपाइलर के पास हेक्स फ़ाइल के नीचे टिप्पणी रखने का विकल्प होता है।[7]


उदाहरण

रंग किंवदंती

  Record type   Byte count   Address   Data   Checksum

चेकसम गणना

निम्नलिखित उदाहरण रिकॉर्ड:

S1137AF00A0A0D0000000000000000000000000061

यह दिखाने के लिए डिकोड किया गया है कि चेकसम मूल्य की गणना कैसे की जाती है। निम्नलिखित उदाहरण हेक्साडेसिमल मान (एक मोटोरोला सम्मेलन) को इंगित करने के लिए डॉलर चिह्न ($) का उपयोग करता है:

  1. जोड़ें: प्रत्येक बाइट $13 + $7A + $F0 + $0A + $0A + $0D + $00 + ... + $00 = $019E योग जोड़ें।
  2. मास्क: योग की सबसे महत्वपूर्ण बाइट ($01) को हटा दें और सबसे कम महत्वपूर्ण बाइट (LSB) को बरकरार रखें, जो कि $9E है।
  3. पूरक: एलएसबी के पूरक की गणना करें, जो $61 है।

C प्रोग्रामिंग भाषा में, योग को चेकसम में परिवर्तित किया जाता है: 0xFF - (sum & 0xFF)


16-बिट मेमोरी एड्रेस

S00F000068656C6C6F202020202000003C S11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026 S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9 S111003848656C6C6F20776F726C642E0A0042 S5030003F9 S9030000FC

यह भी देखें

संदर्भ

  1. "AR#476 PROMGen - Description of PROM/EEPROM file formats: MCS, EXO, HEX, and others". Xilinx. 2010-03-08. Motorola EXORmacs - File Format Code 87. Archived from the original on 2020-03-03. Retrieved 2020-03-03.
  2. Wiles, Mike; Felix, Andre (2000-10-21) [1975]. Holley, Michael (ed.). MCM6830L7 MIKBUG / MINIBUG ROM (PDF) (Engineering note). Motorola Semiconductor Products, Inc. Note 100. Archived from the original (PDF) on 2019-06-16. Retrieved 2019-06-16. (23 pages)
  3. 3.0 3.1 3.2 Hennig-Roleff, Werner (1993-02-01) [1988]. "HEX.DOC: Motorola - HEX Format". SIM51. 1.04 (in Deutsch). Archived from the original on 2017-08-11. Retrieved 2021-12-08. (NB. This is an older version of SIM51, the software and documentation was maintained up to 1996.)
  4. 4.00 4.01 4.02 4.03 4.04 4.05 4.06 4.07 4.08 4.09 4.10 4.11 4.12 "Motorola S-records (UNIX man page and comments)". Uisp AVR In-System Programmer. Archived from the original on 2002-07-03.
  5. 5.0 5.1 5.2 "Appendix C". M68000 Family Programmer's Reference Manual. Revision 1. Motorola. 1992. pp. C-1–C-5. ISBN 978-0-13723289-5.
  6. "srec_examples and srec_cat". SourceForge. Archived from the original on 2013-01-27.
  7. CCS Compiler Reference Manual PCB/PCM/PCH (PDF), Custom Computer Services, Inc., May 2014, p. 142, retrieved 2015-02-08


अग्रिम पठन


बाहरी संबंध

  • SRecord is a collection of tools for manipulating SREC format files.
  • BIN2MOT, BINARY to Motorola S-Record file converter utility.
  • SRecordizer is a tool for viewing, editing, and error checking S19 format files.
  • bincopy is a Python package for manipulating SREC format files.
  • kk_srec is a C library and program for reading the SREC format.