AVR® MCU के लिए MPLAB® XC8 C कंपाइलर संस्करण 2.41 रिलीज़ नोट्स
मालिक नियमावली
MPLAB XC8 C कंपाइलर डेवलपमेंट सॉफ्टवेयर
इस दस्तावेज़ में माइक्रोचिप AVR उपकरणों को लक्षित करते समय MPLAB XC8 C कंपाइलर से संबंधित महत्वपूर्ण जानकारी शामिल है।
कृपया इस सॉफ़्टवेयर को चलाने से पहले इसे पढ़ें। यदि आप 8-बिट पिक्चर उपकरणों के लिए कंपाइलर का उपयोग कर रहे हैं, तो चित्र दस्तावेज़ के लिए MPLAB XC8 C कंपाइलर रिलीज़ नोट देखें।
ऊपरview
1.1 परिचय
माइक्रोचिप MPLAB® XC8 C कंपाइलर के इस रिलीज़ में कई नई सुविधाएँ और बग फिक्स शामिल हैं।
1.2. निर्माण तिथि
इस कंपाइलर संस्करण की आधिकारिक निर्माण तिथि 8 फरवरी 2023 है।
1.3। पिछला संस्करण
पिछला MPLAB XC8 C कंपाइलर संस्करण 2.40 था जिसे 3 जुलाई 2022 को बनाया गया था।
1.4। कार्यात्मक सुरक्षा मैनुअल
जब आप कार्यात्मक सुरक्षा लाइसेंस खरीदते हैं तो MPLAB XC कंपाइलर्स के लिए एक कार्यात्मक सुरक्षा मैनुअल प्रलेखन पैकेज में उपलब्ध होता है।
1.5. घटक लाइसेंस और संस्करण
AVR MCUs उपकरणों के लिए MPLAB XC8 C कंपाइलर को GNU जनरल पब्लिक लाइसेंस (GPL) के तहत लिखा और वितरित किया जाता है, जिसका अर्थ है कि इसका स्रोत कोड स्वतंत्र रूप से वितरित किया जाता है और जनता के लिए उपलब्ध है।
जीएनयू जीपीएल के तहत उपकरणों के स्रोत कोड को माइक्रोचिप से अलग से डाउनलोड किया जा सकता है webसाइट। आप अपनी स्थापना licence.txt avr/doc निर्देशिका की उपनिर्देशिका स्थित नाम की फ़ाइल में GNU GPL पढ़ सकते हैं। जीपीएल में अंतर्निहित सिद्धांतों की एक सामान्य चर्चा यहां पाई जा सकती है।
हेडर फाइल, लिंकर स्क्रिप्ट और रनटाइम लाइब्रेरी के लिए प्रदान किया गया समर्थन कोड मालिकाना कोड है और जीपीएल के अंतर्गत नहीं आता है।
यह कंपाइलर GCC संस्करण 5.4.0, बिनुटिल्स संस्करण 2.26 का कार्यान्वयन है, और avr-libc संस्करण 2.0.0 का उपयोग करता है।
1.6. सिस्टम आवश्यकताएँ
MPLAB XC8 C कंपाइलर और इसके द्वारा उपयोग किया जाने वाला लाइसेंसिंग सॉफ़्टवेयर विभिन्न ऑपरेटिंग सिस्टम के लिए उपलब्ध है, जिसमें निम्न के 64-बिट संस्करण शामिल हैं: Microsoft® Windows® 10 के व्यावसायिक संस्करण; Ubuntu® 18.04; और macOS® 10.15.5. Windows के लिए बाइनरी को कोड-हस्ताक्षरित किया गया है। macOS के लिए बाइनरी को कोड-हस्ताक्षरित और नोटरीकृत किया गया है। MPLAB XC नेटवर्क लाइसेंस सर्वर विभिन्न 64-बिट ऑपरेटिंग सिस्टम के लिए उपलब्ध है, जिसमें Microsoft Windows 10 और इसके बाद के संस्करण; Ubuntu 18.04 और इसके बाद के संस्करण; या macOS 10.15 और इसके बाद के संस्करण शामिल हैं। सर्वर Windows Server, Linux डिस्ट्रीब्यूशन, जैसे Oracle® Enterprise Linux® और Red Hate Enterprise Linux के साथ-साथ समर्थित ऑपरेटिंग सिस्टम के पुराने संस्करणों सहित विभिन्न अन्य ऑपरेटिंग सिस्टम पर भी चल सकता है। हालाँकि, MPLAB XC नेटवर्क लाइसेंस सर्वर का इन ऑपरेटिंग सिस्टम पर परीक्षण नहीं किया गया है। MPLAB XC नेटवर्क लाइसेंस सर्वर को नेटवर्क लाइसेंस (SW006021-VM) के लिए वर्चुअल मशीन लाइसेंस का उपयोग करके समर्थित OS की वर्चुअल मशीनों पर चलाया जा सकता है। MPLAB XC नेटवर्क सर्वर के सभी 32-बिट संस्करण संस्करण 3.00 से शुरू होने वाले हैं।
उपकरणों का समर्थन किया
यह कंपाइलर रिलीज़ के समय सभी उपलब्ध 8-बिट AVR MCU डिवाइस का समर्थन करता है। सभी समर्थित डिवाइस की सूची के लिए (कंपाइलर की निर्देशिका में) देखें। ये फ़ाइलें यह भी सूचीबद्ध करती हैं
avr_chipinfo.html दस्तावेज़ प्रत्येक डिवाइस के लिए कॉन्फ़िगरेशन बिट सेटिंग्स.
1.7। संस्करण और लाइसेंस उन्नयन
MPLAB XC8 कंपाइलर को लाइसेंस प्राप्त (PRO) या बिना लाइसेंस वाले (फ्री) उत्पाद के रूप में सक्रिय किया जा सकता है। आपको अपने कंपाइलर को लाइसेंस देने के लिए एक सक्रियण कुंजी खरीदनी होगी। लाइसेंस मुफ़्त उत्पाद की तुलना में अनुकूलन के उच्च स्तर की अनुमति देता है। बिना लाइसेंस वाले कंपाइलर को बिना लाइसेंस के अनिश्चित काल तक संचालित किया जा सकता है। MPLAB XC8 फंक्शनल सेफ्टी कंपाइलर को माइक्रोचिप से खरीदे गए फंक्शनल सेफ्टी लाइसेंस के साथ सक्रिय किया जाना चाहिए। इस लाइसेंस के बिना कंपाइलर काम नहीं करेगा। सक्रिय होने के बाद, आप किसी भी अनुकूलन स्तर का चयन कर सकते हैं और सभी कंपाइलर सुविधाओं का उपयोग कर सकते हैं। MPLAB XC फंक्शनल सेफ्टी कंपाइलर का यह रिलीज़ नेटवर्क सर्वर लाइसेंस का समर्थन करता है।
लाइसेंस प्रकार और लाइसेंस के साथ कंपाइलर की स्थापना के बारे में जानकारी के लिए एमपीएलएबी एक्ससी सी कंपाइलर्स (डीएस 50002059) की स्थापना और लाइसेंसिंग दस्तावेज़ देखें।
1.8. स्थापना और सक्रियण
इस कंपाइलर के साथ शामिल नवीनतम लाइसेंस मैनेजर के बारे में महत्वपूर्ण जानकारी के लिए माइग्रेशन मुद्दे और सीमाएं अनुभाग भी देखें।
यदि आप MPLAB IDE का उपयोग कर रहे हैं, तो इस टूल को इंस्टॉल करने से पहले नवीनतम MPLAB X IDE संस्करण 5.0 या बाद का संस्करण इंस्टॉल करना सुनिश्चित करें। कंपाइलर इंस्टॉल करने से पहले IDE से बाहर निकलें। (Windows), (Linux) या (macOS) .exe .run .app कंपाइलर इंस्टॉलर एप्लिकेशन चलाएँ, उदाहरण के लिए और स्क्रीन पर दिए गए निर्देशों का पालन करें। XC8-1.00.11403-windows.exe डिफ़ॉल्ट इंस्टॉलेशन निर्देशिका की अनुशंसा की जाती है। यदि आप Linux का उपयोग कर रहे हैं, तो आपको टर्मिनल का उपयोग करके और रूट खाते से कंपाइलर इंस्टॉल करना होगा। व्यवस्थापक विशेषाधिकारों के साथ macOS खाते का उपयोग करके इंस्टॉल करें।
स्थापना के लिए अब सक्रियण अलग से किया जाता है। अधिक जानकारी के लिए दस्तावेज़ MPLAB® XC C कंपाइलर्स (DS52059) के लिए लाइसेंस प्रबंधक देखें।
यदि आप मूल्यांकन लाइसेंस के तहत संकलक को चलाना चुनते हैं, तो अब आपको संकलन के दौरान एक चेतावनी मिलेगी जब आप अपनी मूल्यांकन अवधि के अंत के 14 दिनों के भीतर होंगे। यदि आप अपनी एचपीए सदस्यता समाप्त होने के 14 दिनों के भीतर हैं तो वही चेतावनी जारी की जाती है।
XC नेटवर्क लाइसेंस सर्वर एक अलग इंस्टॉलर है और एकल-उपयोगकर्ता कंपाइलर इंस्टॉलर में शामिल नहीं है।
XC लाइसेंस मैनेजर अब फ्लोटिंग नेटवर्क लाइसेंस के रोमिंग का समर्थन करता है। मोबाइल उपयोगकर्ताओं के उद्देश्य से, यह सुविधा फ़्लोटिंग लाइसेंस को थोड़े समय के लिए नेटवर्क बंद करने की अनुमति देती है। इस सुविधा का उपयोग करके, आप नेटवर्क से डिस्कनेक्ट कर सकते हैं और फिर भी अपने MPLAB XC कंपाइलर का उपयोग कर सकते हैं। इस सुविधा के बारे में अधिक जानकारी के लिए XCLM इंस्टॉल का दस्तावेज़ फ़ोल्डर देखें।
MPLAB X IDE में रोमिंग को दृष्टिगत रूप से प्रबंधित करने के लिए एक लाइसेंस विंडो (टूल्स> लाइसेंस) शामिल है।
1.8.1। स्थापना संबंधी समस्याओं का समाधान करना
यदि आप किसी भी विंडोज ऑपरेटिंग सिस्टम के तहत कंपाइलर को स्थापित करने में कठिनाइयों का अनुभव करते हैं, तो निम्न सुझावों का प्रयास करें।
इंस्टॉल को व्यवस्थापक के रूप में चलाएं।
इंस्टॉलर एप्लिकेशन की अनुमतियों को 'पूर्ण नियंत्रण' पर सेट करें। (फ़ाइल पर राइट-क्लिक करें, गुण चुनें, सुरक्षा टैब, उपयोगकर्ता चुनें, संपादित करें।)
अस्थायी फ़ोल्डर की अनुमतियों को 'पूर्ण नियंत्रण' पर सेट करें।
अस्थायी फ़ोल्डर का स्थान निर्धारित करने के लिए, रन कमांड में %temp% टाइप करें (विंडोज़ लोगो कुंजी + R).
इससे एक फ़ाइल एक्सप्लोरर डायलॉग खुलेगा जिसमें वह निर्देशिका दिखाई देगी और आप उस फ़ोल्डर का पथ निर्धारित कर सकेंगे।
1.9। संकलक प्रलेखन
कम्पाइलर के यूजर गाइड को HTML पेज से खोला जा सकता है जो आपके ब्राउज़र में MPLAB X IDE डैशबोर्ड में नीले रंग के हेल्प बटन पर क्लिक करने पर खुलता है, जैसा कि स्क्रीनशॉट में दिखाया गया है।
यदि आप 8-बिट AVR लक्ष्यों के लिए निर्माण कर रहे हैं, तो AVR® MCU के लिए MPLAB® XC8 C कंपाइलर उपयोगकर्ता गाइड में उन कंपाइलर विकल्पों और विशेषताओं के बारे में जानकारी शामिल है जो इस आर्किटेक्चर पर लागू होते हैं।
1.10.ग्राहक सहायता
माइक्रोचिप इस संकलक संस्करण के संबंध में बग रिपोर्ट, सुझाव या टिप्पणियों का स्वागत करता है। कृपया सपोर्ट सिस्टम के माध्यम से किसी भी बग रिपोर्ट या फीचर अनुरोध को निर्देशित करें।
दस्तावेज़ीकरण अद्यतन
MPLAB XC8 दस्तावेज़ों के ऑन-लाइन और अप-टू-डेट संस्करणों के लिए, कृपया माइक्रोचिप के ऑनलाइन तकनीकी दस्तावेज़ीकरण पर जाएँ webइस रिलीज़ में नया या अपडेट किया गया AVR दस्तावेज़:
- AVR® MCU (संशोधन G) के लिए MPLAB® XC8 C कंपाइलर उपयोगकर्ता गाइड
- AVR® GNU टूलचेन से MPLAB® XC8 माइग्रेशन गाइड (संशोधन A)
- हेक्समेट उपयोगकर्ता गाइड (संशोधन बी)
AVR® GNU Toolchain से MPLAB® XC8 माइग्रेशन गाइड स्रोत कोड और बिल्ड विकल्पों में उन परिवर्तनों का वर्णन करता है जिनकी आवश्यकता हो सकती है यदि आप C-आधारित प्रोजेक्ट को AVR 8-बिट GNU Toolchain से Microchip MPLAB XC8 C कंपाइलर में माइग्रेट करने का निर्णय लेते हैं। माइक्रोचिप यूनिफाइड स्टैंडर्ड लाइब्रेरी संदर्भ गाइड माइक्रोचिप यूनिफाइड स्टैंडर्ड लाइब्रेरी द्वारा परिभाषित फ़ंक्शन के व्यवहार और इंटरफ़ेस के साथ-साथ लाइब्रेरी प्रकारों और मैक्रोज़ के इच्छित उपयोग का वर्णन करता है। इस जानकारी में से कुछ पहले AVR® MCU के लिए MPLAB® XC8 C कंपाइलर उपयोगकर्ता गाइड में शामिल थी। डिवाइस-विशिष्ट लाइब्रेरी जानकारी अभी भी इस कंपाइलर गाइड में शामिल है।
यदि आप 8-बिट डिवाइस और MPLAB XC8 C कंपाइलर के साथ अभी शुरुआत कर रहे हैं, तो एम्बेडेड इंजीनियर्स के लिए MPLAB® XC8 उपयोगकर्ता गाइड - AVR® MCUs (DS50003108) में MPLAB X IDE में प्रोजेक्ट सेट अप करने और अपने पहले MPLAB XC8 C प्रोजेक्ट के लिए कोड लिखने की जानकारी है। यह गाइड अब कंपाइलर के साथ वितरित की जाती है।
हेक्समेट उपयोगकर्ता मार्गदर्शिका उन लोगों के लिए है जो हेक्समेट को एक स्टैंड-अलोन अनुप्रयोग के रूप में चला रहे हैं।
नया क्या है
निम्नलिखित नई AVR-लक्ष्यित विशेषताएँ हैं जिनका अब संकलक समर्थन करता है। उपशीर्षकों में संस्करण संख्या निम्नलिखित विशेषताओं का समर्थन करने वाले पहले संकलक संस्करण को इंगित करती है।
3.1. संस्करण 2.41
बूटरो समर्थन (XC8-3053) संकलक किसी भी अनुभाग की सामग्री को HEX फ़ाइल में .bootrow पते 0x860000 पर उपसर्ग के साथ रखेगा। इन अनुभागों का उपयोग BOOTROW मेमोरी के लिए किया जाता है, जिसे कुंजियों और अन्य सुरक्षित सूचनाओं के भंडारण के लिए डिज़ाइन किया गया है जो केवल बूटलोडर के लिए सुलभ होनी चाहिए।
अनावश्यक रिटर्न उन्मूलन (XC8-3048) जब कस्टम लिंकर स्क्रिप्ट का उपयोग किया जाता है, तो संकलक अब टेल जंप के साथ रिट फ़ंक्शन में अनावश्यक निर्देशों को समाप्त कर देगा। यह पहले किए गए अनुकूलन के समान है, लेकिन यह अब सभी अनाथ अनुभागों पर किया जाता है, भले ही कस्टम लिंकर स्क्रिप्ट का उपयोग किया गया हो और सबसे अच्छी फिट आवंटन योजना काम न कर रही हो। समय प्रकार परिवर्तन (XC8-2982, 2932) C99 मानक लाइब्रेरी प्रकार को time_t से बदलकर type कर दिया गया है, जो कुछ समय-संबंधित long long फ़ंक्शन में कोड-आकार में सुधार देता है, जैसे कि unsigned long mktime()
नया nop (XC8-2946, 2945) मैक्रो जोड़ा गया है। यह मैक्रो no- NOP() सम्मिलित करता है nop ऑपरेशन निर्देश को आउटपुट में डालें।
XCLM (XC8-2944) में अद्यतन संकलक के साथ प्रयुक्त लाइसेंस प्रबंधक को अद्यतन कर दिया गया है तथा अब यह संकलक के लाइसेंस विवरण की जांच करते समय अधिक प्रतिक्रियाशील है।
Trampओलाइन्ड कॉल (XC8-2760) कंपाइलर अब लंबे-फॉर्म कॉल निर्देशों को छोटे सापेक्ष कॉल के साथ प्रतिस्थापित कर सकता है जब निर्देशों के सापेक्ष रूप सामान्य रूप से उनके गंतव्य की सीमा से बाहर होंगे। इस स्थिति में, कंपाइलर rcall को कॉल करने के लिए निर्देशों के साथ बदलने का प्रयास करेगा जो 'tr' होगाampoline' निष्पादन को आवश्यक पते पर भेजना, उदाहरण के लिएampले: जेएमपी
आरकॉल टीआरamp_foo; कॉल foo था
…
आरकॉल टीआरamp_फू
…
tramp_फू:
जेएमपी फ़ू
यह अनुकूलन, समान प्रोग्राम प्रवाह अनुकूलनों के साथ, -mrelax विकल्प द्वारा नियंत्रित होता है।
3.2. संस्करण 2.40
नया डिवाइस समर्थन अब निम्नलिखित AVR भागों के लिए समर्थन उपलब्ध है: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32, और AVR64EA48.
बेहतर प्रक्रियात्मक अमूर्तता प्रक्रियात्मक अमूर्तता (पीए) अनुकूलन उपकरण में सुधार किया गया है ताकि फ़ंक्शन कॉल निर्देश (/ ) वाले कोड को रेखांकित किया जा सके। यह केवल तभी होगा जब स्टैक का उपयोग फ़ंक्शन को तर्क पास करने या उससे रिटर्न वैल्यू प्राप्त करने के लिए नहीं किया जाता है। स्टैक का उपयोग तब किया जाता है जब एक चर तर्क सूची के साथ एक फ़ंक्शन को कॉल किया जाता है या जब एक फ़ंक्शन को कॉल किया जाता है जो इस उद्देश्य के लिए निर्दिष्ट रजिस्टरों की तुलना में अधिक तर्क लेता है। इस सुविधा को विकल्प का उपयोग करके अक्षम किया जा सकता है, या प्रक्रियात्मक अमूर्तता को किसी ऑब्जेक्ट फ़ाइल या फ़ंक्शन के लिए क्रमशः - और का उपयोग करके या फ़ंक्शन के साथ चुनिंदा रूप से विशेषता (विशिष्ट) का उपयोग करके पूरी तरह से अक्षम किया जा सकता है।
mno-pa-आउटलाइन-कॉल -mno-pa-on-file -mno-pa-on-function nopa कोड कवरेज मैक्रो यदि कोई वैध विकल्प __nopa __CODECOV -mcodecov निर्दिष्ट है, तो कंपाइलर अब मैक्रो को परिभाषित करता है।
मेमोरी आरक्षण विकल्प ड्राइवर अब AVR लक्ष्यों के निर्माण के समय xc8-cc -mreserve=space@start:end विकल्प को स्वीकार करेगा। यह विकल्प डेटा या प्रोग्राम मेमोरी स्पेस में निर्दिष्ट मेमोरी रेंज को सुरक्षित रखता है, जिससे लिंकर को इस क्षेत्र में कोड या ऑब्जेक्ट को पॉपुलेट करने से रोका जा सकता है। स्मार्टर स्मार्ट IO स्मार्ट IO फ़ंक्शन में कई सुधार किए गए हैं, जिसमें printf कोर कोड में सामान्य बदलाव, %n रूपांतरण विनिर्देशक को एक स्वतंत्र संस्करण के रूप में मानना, मांग पर vararg पॉप रूटीन में लिंक करना, IO फ़ंक्शन तर्कों को संभालने के लिए जहाँ संभव हो छोटे डेटा प्रकारों का उपयोग करना, और फ़ील्ड चौड़ाई और परिशुद्धता हैंडलिंग में सामान्य कोड को शामिल करना शामिल है। इससे महत्वपूर्ण कोड और डेटा बचत हो सकती है, साथ ही IO की निष्पादन गति भी बढ़ सकती है।
3.3। संस्करण 2.39 (कार्यात्मक सुरक्षा रिलीज़)
नेटवर्क सर्वर लाइसेंस MPLAB XC8 कार्यात्मक सुरक्षा संकलक की यह रिलीज नेटवर्क सर्वर लाइसेंस का समर्थन करती है।
3.4. संस्करण 2.36
कोई नहीं।
3.5. संस्करण 2.35
नया उपकरण समर्थन निम्नलिखित AVR भागों के लिए समर्थन उपलब्ध है: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28, और AVR64DD32।
बेहतर संदर्भ स्विचिंग नया -mcall-isr-prologues विकल्प यह बदलता है कि इंटरप्ट फ़ंक्शन एंट्री पर रजिस्टर कैसे सहेजते हैं और इंटरप्ट रूटीन समाप्त होने पर उन रजिस्टरों को कैसे पुनर्स्थापित किया जाता है। यह -mcall-prologues विकल्प के समान तरीके से काम करता है, लेकिन केवल इंटरप्ट फ़ंक्शन (ISR) को प्रभावित करता है।
और भी बेहतर संदर्भ स्विचिंग नया -mgas-isr-prologues विकल्प छोटे इंटरप्ट सर्विस रूटीन के लिए उत्पन्न संदर्भ स्विच कोड को नियंत्रित करता है। सक्षम होने पर, यह सुविधा असेंबलर को रजिस्टर उपयोग के लिए ISR को स्कैन करने देगी और केवल तभी इन उपयोग किए गए रजिस्टरों को सहेजेगी जब आवश्यक हो।
कॉन्फ़िगर करने योग्य फ़्लैश मैपिंग AVR DA और AVR DB परिवार में कुछ डिवाइस में एक SFR (जैसे FLMAP) होता है जो निर्दिष्ट करता है कि प्रोग्राम मेमोरी का कौन सा 32k सेक्शन डेटा मेमोरी में मैप किया जाएगा। नए - mconst-data-in-config-mapped-progmem विकल्प का उपयोग लिंकर द्वारा सभी const-योग्य डेटा को एक 32k सेक्शन में रखने और संबंधित SFR रजिस्टर को स्वचालित रूप से आरंभ करने के लिए किया जा सकता है ताकि यह सुनिश्चित हो सके कि यह डेटा डेटा मेमोरी स्पेस में मैप किया गया है, जहाँ इसे अधिक प्रभावी ढंग से एक्सेस किया जाएगा।
माइक्रोचिप यूनिफाइड स्टैंडर्ड लाइब्रेरी सभी MPLAB XC कंपाइलर एक माइक्रोचिप यूनिफाइड स्टैंडर्ड लाइब्रेरी साझा करेंगे, जो अब MPLAB XC8 के इस रिलीज़ के साथ उपलब्ध है। AVO MCU के लिए MPLA# XC8 C कंपाइलर उपयोगकर्ता गाइड में अब इन मानक फ़ंक्शन के लिए दस्तावेज़ शामिल नहीं हैं। यह जानकारी अब माइक्रोचिप यूनिफाइड स्टैंडर्ड लाइब्रेरी संदर्भ गाइड में पाई जा सकती है। ध्यान दें कि avr-libc द्वारा पहले परिभाषित कुछ कार्यक्षमता अब उपलब्ध नहीं है। (लीला कार्यक्षमता देखें।)
स्मार्ट I0 नई एकीकृत लाइब्रेरी के भाग के रूप में, printf और scanf परिवारों में I0 फ़ंक्शन अब प्रत्येक बिल्ड पर कस्टम-जेनरेट किए जाते हैं, जो इस बात पर आधारित होते हैं कि प्रोग्राम में इन फ़ंक्शन का उपयोग कैसे किया जाता है। इससे प्रोग्राम द्वारा उपयोग किए जाने वाले संसाधनों में काफी कमी आ सकती है।
स्मार्ट ICI सहायता विकल्प स्मार्ट I0 फ़ंक्शन (जैसे प्रिंट f () या scanf ()) के लिए कॉल का विश्लेषण करते समय, कंपाइलर हमेशा फ़ॉर्मेट स्ट्रिंग से निर्धारित नहीं कर सकता है या तर्कों से उन रूपांतरण विनिर्देशकों का अनुमान नहीं लगा सकता है जो कॉल द्वारा आवश्यक हैं। पहले, कंपाइलर हमेशा कोई धारणा नहीं बनाता था और यह सुनिश्चित करता था कि पूरी तरह कार्यात्मक 10 फ़ंक्शन अंतिम प्रोग्राम छवि में लिंक किए गए थे। एक नया - msmart-io-format=fmt विकल्प जोड़ा गया है ताकि कंपाइलर को स्मार्ट I0 फ़ंक्शन द्वारा उपयोग किए जाने वाले रूपांतरण विनिर्देशकों के बारे में उपयोगकर्ता द्वारा सूचित किया जा सके जिनका उपयोग अस्पष्ट है, जो अत्यधिक लंबे 10 रूटीन को लिंक होने से रोकता है। (अधिक जानकारी के लिए स्मार्ट-io-format विकल्प देखें।)
कस्टम सेक्शन रखना पहले, -W1, –section-start विकल्प केवल निर्दिष्ट सेक्शन को अनुरोधित पते पर रखता था जब लिंकर स्क्रिप्ट ने उसी नाम से आउटपुट सेक्शन को परिभाषित किया था। जब ऐसा नहीं होता था, तो सेक्शन को लिंकर द्वारा चुने गए पते पर रखा जाता था और विकल्प को अनिवार्य रूप से अनदेखा कर दिया जाता था। अब विकल्प को सभी कस्टम सेक्शन के लिए सम्मानित किया जाएगा, भले ही लिंकर स्क्रिप्ट सेक्शन को परिभाषित न करे। हालाँकि, ध्यान दें कि मानक सेक्शन, जैसे . text, . bss या . data के लिए, सबसे उपयुक्त आवंटनकर्ता के पास अभी भी उनके प्लेसमेंट पर पूरा नियंत्रण होगा, और विकल्प का कोई प्रभाव नहीं होगा। उपयोगकर्ता गाइड में बताए अनुसार -ton, -Tsection=addr विकल्प का उपयोग करें।
3.6. संस्करण 2.32
स्टैक गाइडेंस PRO कंपाइलर लाइसेंस के साथ उपलब्ध है, कंपाइलर की स्टैक गाइडेंस सुविधा का उपयोग किसी प्रोग्राम द्वारा उपयोग किए जाने वाले किसी भी स्टैक की अधिकतम गहराई का अनुमान लगाने के लिए किया जा सकता है। यह प्रोग्राम के कॉल ग्राफ़ का निर्माण और विश्लेषण करता है, प्रत्येक फ़ंक्शन के स्टैक उपयोग को निर्धारित करता है, और एक रिपोर्ट तैयार करता है, जिससे प्रोग्राम द्वारा उपयोग किए जाने वाले स्टैक की गहराई का अनुमान लगाया जा सकता है। यह सुविधा -mchp-stack-usage कमांड-लाइन विकल्प के माध्यम से सक्षम की जाती है। निष्पादन के बाद स्टैक उपयोग का सारांश मुद्रित किया जाता है। मानचित्र में एक विस्तृत स्टैक रिपोर्ट उपलब्ध है file, जिसे सामान्य तरीके से अनुरोध किया जा सकता है।
नया डिवाइस समर्थन निम्नलिखित AVR भागों के लिए समर्थन उपलब्ध है: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, और AVR32DB48। वापस लिया गया डिवाइस समर्थन निम्नलिखित AVR भागों के लिए समर्थन अब उपलब्ध नहीं है: AVR16DA28, AVR16DA32 और, AVR16DA48।
3.7. संस्करण 2.31
कोई नहीं।
3.8. संस्करण 2.30
डेटा आरंभीकरण को रोकने के लिए नया विकल्प एक नया -mno-data-init ड्राइवर विकल्प डेटा के आरंभीकरण और bss अनुभागों को साफ़ करने से रोकता है। यह असेंबली में do copy data और do clear bss प्रतीकों के आउटपुट को दबाकर काम करता है files, जो बदले में लिंकर द्वारा उन रूटीन को शामिल करने से रोकेगा।
उन्नत अनुकूलन कई अनुकूलन सुधार किए गए हैं, जिसमें अनावश्यक वापसी निर्देशों को हटाना, स्किप-इफ-बिट-इस निर्देश के बाद कुछ जंप को हटाना, तथा प्रक्रियात्मक अमूर्तता में सुधार और इस प्रक्रिया को पुनरावृत्त करने की क्षमता शामिल है। इनमें से कुछ अनुकूलन को नियंत्रित करने के लिए अब अतिरिक्त विकल्प उपलब्ध हैं, विशेष रूप से -f सेक्शन-एंकर, जो एक प्रतीक के सापेक्ष निष्पादित किए जाने वाले स्थिर ऑब्जेक्ट की पहुँच की अनुमति देता है; -mpa-iterations=n, जो प्रक्रियात्मक अमूर्तता पुनरावृत्तियों की संख्या को 2 के डिफ़ॉल्ट से बदलने की अनुमति देता है; तथा, -mpa-callcost-shortcall, जो अधिक आक्रामक प्रक्रियात्मक अमूर्तता निष्पादित करता है, इस उम्मीद में कि लिंकर लंबी कॉल को शिथिल कर सकता है। यह अंतिम विकल्प कोड आकार को बढ़ा सकता है यदि अंतर्निहित धारणाएँ साकार नहीं होती हैं।
नया डिवाइस समर्थन निम्नलिखित AVR भागों के लिए समर्थन उपलब्ध है: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48, और AVR128DB64. वापस लिए गए डिवाइस समर्थन अब निम्नलिखित AVR भागों के लिए समर्थन उपलब्ध नहीं है: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C, और ATA664251.
3.9। संस्करण 2.29 (कार्यात्मक सुरक्षा रिलीज़)
हैडर file कंपाइलर बिल्ट-इन के लिए यह सुनिश्चित करने के लिए कि कंपाइलर MISRA जैसे भाषा विनिर्देशों के अनुरूप हो सकता है, हैडर file, जो स्वचालित रूप से शामिल है , को अपडेट किया गया है। इस हेडर में सभी इन-बिल्ट फ़ंक्शन के प्रोटोटाइप शामिल हैं, जैसे कि buildin_avr_nop () और buildin avr delay_cycles ()। कुछ बिल्ट-इन MISRA के अनुरूप नहीं हो सकते हैं; इन्हें कंपाइलर कमांड लाइन में defineXCSTRICT_MISRA जोड़कर छोड़ा जा सकता है। बिल्ट-इन और उनकी घोषणाओं को निश्चित-चौड़ाई प्रकारों का उपयोग करने के लिए अपडेट किया गया है।
3.10. संस्करण 2.20
नया डिवाइस समर्थन निम्नलिखित AVR भागों के लिए समर्थन उपलब्ध है: ATTINY1624, ATTINY1626, और ATTINY1627.
बेहतर बेस्ट फिट आवंटन कंपाइलर में बेस्ट फिट आवंटनकर्ता (BFA) में सुधार किया गया है ताकि अनुभागों को बेहतर अनुकूलन की अनुमति देने वाले क्रम में आवंटित किया जा सके। BFA अब नामित पता स्थानों का समर्थन करता है और डेटा आरंभीकरण को बेहतर ढंग से संभालता है।
प्रक्रियात्मक अमूर्तता में सुधार प्रक्रियात्मक अमूर्तता अनुकूलन अब अधिक कोड अनुक्रमों पर किए जाते हैं। पिछली परिस्थितियाँ जहाँ इस अनुकूलन से कोड का आकार बढ़ सकता था, उन्हें अनुकूलन कोड को लिंकर की कचरा संग्रहण प्रक्रिया से अवगत कराकर संबोधित किया गया है।
AVR असेंबलर का अभाव AVR असेंबलर अब इस वितरण के साथ शामिल नहीं है।
3.11। संस्करण 2.19 (कार्यात्मक सुरक्षा रिलीज़)
कोई नहीं।
3.12. संस्करण 2.10
कोड कवरेज इस रिलीज़ में एक कोड कवरेज सुविधा शामिल है जो इस बात का विश्लेषण करने में सहायता करती है कि किसी प्रोजेक्ट के स्रोत कोड को किस सीमा तक निष्पादित किया गया है। इसे सक्षम करने के लिए -mcodecov=ram विकल्प का उपयोग करें। आपके हार्डवेयर पर प्रोग्राम के निष्पादन के बाद, कोड कवरेज जानकारी डिवाइस में एकत्रित की जाएगी, और इसे कोड कवरेज प्लगइन के माध्यम से MPLAB X IDE में स्थानांतरित और प्रदर्शित किया जा सकता है। इस प्लगइन पर जानकारी प्राप्त करने के लिए IDE दस्तावेज़ देखें। कवरेज विश्लेषण से बाद के फ़ंक्शन को बाहर करने के लिए #pragma nocodecov का उपयोग किया जा सकता है। आदर्श रूप से pragma को शुरुआत में जोड़ा जाना चाहिए file उस पूरे को बाहर करने के लिए file कवरेज विश्लेषण से। वैकल्पिक रूप से, _attribute_ ( (nocodecov) ) का उपयोग कवरेज विश्लेषण से किसी विशिष्ट फ़ंक्शन को बाहर करने के लिए किया जा सकता है।
डिवाइस विवरण files एक नया उपकरण file avr_chipinfo नामक .html संकलक वितरण की docs निर्देशिका में स्थित है। यह file कंपाइलर द्वारा समर्थित सभी डिवाइस की सूची बनाता है। डिवाइस के नाम पर क्लिक करें, और यह उस डिवाइस के लिए सभी स्वीकार्य कॉन्फ़िगरेशन बिट सेटिंग/वैल्यू पेन दिखाते हुए एक पेज खोलेगा, उदाहरण के साथampप्रक्रियात्मक अमूर्तता
प्रक्रियात्मक अमूर्तन अनुकूलन, जो असेंबली कोड के सामान्य ब्लॉक को उस ब्लॉक की निकाली गई कॉपी के लिए कॉल के साथ प्रतिस्थापित करते हैं, को कंपाइलर में जोड़ा गया है। ये एक अलग एप्लिकेशन द्वारा निष्पादित किए जाते हैं, जिसे लेवल 2, 3 या s अनुकूलन का चयन करते समय कंपाइलर द्वारा स्वचालित रूप से आमंत्रित किया जाता है। ये अनुकूलन कोड के आकार को कम करते हैं, लेकिन वे निष्पादन की गति और कोड डीबग करने की क्षमता को कम कर सकते हैं। प्रक्रियात्मक अमूर्तन को -mno-pa विकल्प का उपयोग करके उच्च अनुकूलन स्तरों पर अक्षम किया जा सकता है, या -mpa का उपयोग करके कम अनुकूलन स्तरों (आपके लाइसेंस के अधीन) पर सक्षम किया जा सकता है। इसे किसी ऑब्जेक्ट के लिए अक्षम किया जा सकता है file -मोनो-पा-ऑन- का उपयोग करनाfile=fileनाम, या -mno-pa-on-function=function का उपयोग करके फ़ंक्शन के लिए अक्षम किया जा सकता है। आपके स्रोत कोड के अंदर, फ़ंक्शन की परिभाषा के साथ विशेषता ( (nopa) ) का उपयोग करके या nopa का उपयोग करके फ़ंक्शन के लिए प्रक्रियात्मक अमूर्तता को अक्षम किया जा सकता है, जो विशेषता ( (nopa, noinline) ) तक विस्तारित होता है और इस प्रकार फ़ंक्शन इनलाइनिंग को होने से रोकता है और इनलाइन कोड का अमूर्तन होता है।
प्रैग्मा में लॉक बिट समर्थन #pragma कॉन्फ़िगरेशन का उपयोग अब AVR लॉक बिट्स के साथ-साथ अन्य कॉन्फ़िगरेशन बिट्स को निर्दिष्ट करने के लिए किया जा सकता है। avr_chipinfo .html की जाँच करें file (ऊपर उल्लेखित) इस प्रैग्मा के साथ उपयोग करने के लिए सेटिंग/मूल्य जोड़े के लिए। नया डिवाइस समर्थन निम्नलिखित भागों के लिए समर्थन उपलब्ध है: AVR28DAl28, AVR64DAl28, AVR32DA 128, और AVR48DA 128।
3.13. संस्करण 2.05
आपके पैसे के लिए और भी बहुत कुछ इस कंपाइलर और लाइसेंस मैनेजर का macOS संस्करण अब 64-बिट एप्लीकेशन है। यह सुनिश्चित करेगा कि कंपाइलर macOS के हाल के संस्करणों पर बिना किसी चेतावनी के इंस्टॉल और चलेगा।
प्रोग्राम मेमोरी में कॉन्स्ट ऑब्जेक्ट्स कंपाइलर अब कॉन्स्ट-क्वालिफाइड ऑब्जेक्ट्स को प्रोग्राम फ्लैश मेमोरी में रख सकता है, बजाय इसके कि इन्हें RAM में रखा जाए। कंपाइलर को इस तरह से संशोधित किया गया है कि कॉन्स्ट-क्वालिफाइड ग्लोबल डेटा प्रोग्राम फ्लैश मेमोरी में संग्रहीत किया जाता है और इस डेटा को उचित प्रोग्राम-मेमोरी निर्देशों का उपयोग करके सीधे और अप्रत्यक्ष रूप से एक्सेस किया जा सकता है। यह नई सुविधा डिफ़ॉल्ट रूप से सक्षम है लेकिन -mno-const-data-in-progmem विकल्प का उपयोग करके इसे अक्षम किया जा सकता है। avrxmega3 और avrtiny आर्किटेक्चर के लिए, यह सुविधा आवश्यक नहीं है और हमेशा अक्षम रहती है, क्योंकि प्रोग्राम मेमोरी को इन डिवाइस के लिए डेटा एड्रेस स्पेस में मैप किया जाता है।
इस कंपाइलर के बिना लाइसेंस वाले (निःशुल्क) संस्करण अब स्तर 2 तक अनुकूलन की अनुमति देते हैं। यह एक समान, यद्यपि समरूप नहीं, आउटपुट की अनुमति देगा जो पहले मानक लाइसेंस का उपयोग करके संभव था।
AVRASM2 का स्वागत है 2-बिट डिवाइस के लिए AVRASM8 असेंबलर अब XC8 कंपाइलर इंस्टॉलर में शामिल है। यह असेंबलर XC8 कंपाइलर द्वारा उपयोग नहीं किया जाता है, लेकिन हस्तलिखित असेंबली स्रोत पर आधारित परियोजनाओं के लिए उपलब्ध है।
नए डिवाइस समर्थन निम्नलिखित भागों के लिए समर्थन उपलब्ध है: ATMEGA1608, ATMEGA1609, ATMEGA808, और ATMEGA809.
3.14. संस्करण 2.00
शीर्ष-स्तरीय ड्राइवर एक नया ड्राइवर, जिसे xc8-cc कहा जाता है, अब पिछले avr-gcc ड्राइवर और xc8 ड्राइवर के ऊपर बैठता है, और यह लक्ष्य डिवाइस के चयन के आधार पर उपयुक्त कंपाइलर को कॉल कर सकता है। यह ड्राइवर GCC-शैली के विकल्पों को स्वीकार करता है, जिन्हें या तो निष्पादित किए जा रहे कंपाइलर के लिए अनुवादित किया जाता है या उसके माध्यम से पारित किया जाता है। यह ड्राइवर किसी भी AVR या PIC लक्ष्य के साथ समान अर्थ वाले विकल्पों के समान सेट को उपयोग करने की अनुमति देता है और इस प्रकार यह कंपाइलर को आमंत्रित करने का अनुशंसित तरीका है। यदि आवश्यक हो, तो पुराने avr-gcc ड्राइवर को पुराने-शैली के विकल्पों का उपयोग करके सीधे कॉल किया जा सकता है जिसे उसने पहले के कंपाइलर संस्करणों में स्वीकार किया था।
कॉमन सी इंटरफ़ेस यह कंपाइलर अब MPLAB कॉमन सी इंटरफ़ेस के अनुरूप हो सकता है, जिससे स्रोत कोड को सभी MPLAB XC कंपाइलर में अधिक आसानी से पोर्ट किया जा सकता है। -mext=cci विकल्प इस सुविधा का अनुरोध करता है, जिससे कई भाषा एक्सटेंशन के लिए वैकल्पिक सिंटैक्स सक्षम होता है।
नया लाइब्रेरियन ड्राइवर एक नया लाइब्रेरियन ड्राइवर पिछले PIC लाइब्रेरियन और AVR avr-ar लाइब्रेरियन के ऊपर स्थित है। यह ड्राइवर GCC-आर्काइवर-शैली के विकल्पों को स्वीकार करता है, जिन्हें या तो निष्पादित किए जा रहे लाइब्रेरियन के लिए अनुवादित किया जाता है या उसके माध्यम से पारित किया जाता है। नया ड्राइवर किसी भी PIC या AVR लाइब्रेरी को बनाने या उसमें हेरफेर करने के लिए समान अर्थ वाले विकल्पों के समान सेट का उपयोग करने की अनुमति देता है file और इस प्रकार लाइब्रेरियन को आमंत्रित करने का अनुशंसित तरीका है। यदि विरासत परियोजनाओं के लिए आवश्यक है, तो पिछले लाइब्रेरियन को पुराने संकलक संस्करणों में स्वीकार किए गए पुराने-शैली के विकल्पों का उपयोग करके सीधे बुलाया जा सकता है।
प्रवासन मुद्दे
निम्नलिखित वे विशेषताएँ हैं जिन्हें अब संकलक द्वारा अलग तरीके से संभाला जाता है। यदि आप कोड को इस संकलक संस्करण में पोर्ट कर रहे हैं तो इन परिवर्तनों के लिए आपके स्रोत कोड में संशोधन की आवश्यकता हो सकती है। उपशीर्षकों में संस्करण संख्या निम्नलिखित परिवर्तनों का समर्थन करने वाले पहले संकलक संस्करण को इंगित करती है।
4.1. संस्करण 2.41
गलत fma फ़ंक्शन हटाए गए (XC8-2913) C99 मानक लाइब्रेरी fma 0 -फ़ैमिली फ़ंक्शन ( ) ने एकल राउंडिंग के लिए अनंत परिशुद्धता के साथ गुणा-जोड़ की गणना नहीं की, बल्कि इसके बजाय प्रत्येक ऑपरेशन के साथ राउंडिंग त्रुटियों को संचित किया। इन फ़ंक्शन को आपूर्ति की गई लाइब्रेरी से हटा दिया गया है।
4.2. संस्करण 2.40
कोई नहीं।
4.3। संस्करण 2.39 (कार्यात्मक सुरक्षा रिलीज़)
कोई नहीं।
4.4। संस्करण 2.36 कोई नहीं।
4.5. संस्करण 2.35
स्ट्रिंग-टू बेस (XC8-2420) को संभालना अन्य XC कंपाइलरों के साथ संगतता सुनिश्चित करने के लिए, XC8 स्ट्रिंग-टू फ़ंक्शन, जैसे strtol () आदि, अब इनपुट स्ट्रिंग को बदलने का प्रयास नहीं करेंगे यदि निर्दिष्ट आधार 36 से बड़ा है और इसके बजाय errno को EINVAL पर सेट करेगा। C मानक फ़ंक्शन के व्यवहार को निर्दिष्ट नहीं करता है जब यह आधार मान पार हो जाता है।
अनुचित गति अनुकूलन स्तर 3 अनुकूलन (-03) का चयन करते समय प्रक्रियात्मक अमूर्त अनुकूलन सक्षम किए जा रहे थे। ये अनुकूलन कोड गति की कीमत पर कोड आकार को कम करते हैं, इसलिए प्रदर्शन नहीं किया जाना चाहिए था। इस रिलीज़ के साथ निर्मित होने पर इस अनुकूलन स्तर का उपयोग करने वाली परियोजनाओं को कोड आकार और निष्पादन गति में अंतर दिखाई दे सकता है।
पुस्तकालय की कार्यक्षमता कई मानक सी पुस्तकालय कार्यों के लिए कोड अब माइक्रोचिप की यूनिफाइड स्टैंडर्ड लाइब्रेरी से आते हैं, जो कि पूर्व avr-libc लाइब्रेरी द्वारा प्रदान की गई तुलना में कुछ परिस्थितियों में भिन्न व्यवहार प्रदर्शित कर सकते हैं। पूर्व के लिएampले, अब फ़ॉर्मेटेड चालू करने के लिए 1printf flt लाइब्रेरी (-1printf_flt विकल्प) में लिंक करना आवश्यक नहीं है I0 फ्लोट-फ़ॉर्मेट विनिर्देशकों के लिए समर्थन। स्मार्ट I0 माइक्रोचिप यूनिफाइड स्टैंडर्ड लाइब्रेरी की विशेषताएं इस विकल्प को अनावश्यक बनाती हैं। इसके अतिरिक्त, स्ट्रिंग और मेमोरी फ़ंक्शन (जैसे strcpy_P () आदि) के लिए _P प्रत्यय रूटीन का उपयोग जो फ़्लैश में कॉन्स्ट स्ट्रिंग पर काम करते हैं, अब आवश्यक नहीं हैं। मानक C रूटीन (जैसे strcpy) ऐसे डेटा के साथ सही ढंग से काम करेंगे जब const-data-in-program-memory सुविधा सक्षम हो।
4.6. संस्करण 2.32
कोई नहीं।
4.7. संस्करण 2.31
कोई नहीं।
4.8. संस्करण 2.30
कोई नहीं।
4.1। संस्करण 2.29 (कार्यात्मक सुरक्षा रिलीज़)
कोई नहीं।
4.2. संस्करण 2.20
DFP लेआउट बदला गया कंपाइलर अब DFPs (डिवाइस फ़ैमिली पैक) द्वारा उपयोग किए जाने वाले भिन्न लेआउट को मानता है। इसका अर्थ यह होगा कि एक पुराना DFP इस रिलीज़ के साथ काम नहीं कर सकता है, और पुराने संकलक नवीनतम DFPs का उपयोग करने में सक्षम नहीं होंगे।
4.3। संस्करण 2.19 (कार्यात्मक सुरक्षा रिलीज़)
कोई नहीं।
4.4. संस्करण 2.10
कोई नहीं
4.5. संस्करण 2.05
प्रोग्राम मेमोरी में कॉन्स्ट ऑब्जेक्ट ध्यान दें कि डिफ़ॉल्ट रूप से, कॉन्स्ट-क्वालिफ़ाइड ऑब्जेक्ट्स को प्रोग्राम मेमोरी में रखा जाएगा और एक्सेस किया जाएगा (जैसा कि ह्यू में वर्णित है)। यह आपके प्रोजेक्ट के आकार और निष्पादन गति को प्रभावित करेगा, लेकिन RAM उपयोग को कम करना चाहिए। यदि आवश्यक हो, तो -mnoconst-data-in-progmem विकल्प का उपयोग करके इस सुविधा को अक्षम किया जा सकता है।
4.6. संस्करण 2.00
कॉन्फ़िगरेशन फ़्यूज़ डिवाइस कॉन्फ़िगरेशन फ़्यूज़ को अब कॉन्फ़िगरेशन प्रैग्मा का उपयोग करके प्रोग्राम किया जा सकता है, जिसके बाद फ़्यूज़ स्थिति को निर्दिष्ट करने के लिए सेटिंग-वैल्यू जोड़े होते हैं, जैसे
#pragma कॉन्फ़िगरेशन WDTON = सेट
#pragma कॉन्फ़िगरेशन BODLEVEL = BODLEVEL_4V3
निरपेक्ष वस्तुएं और कार्य अब ऑब्जेक्ट्स और फ़ंक्शन को CCI (एड्रेस) स्पेसिफायर का उपयोग करके मेमोरी में विशिष्ट पते पर रखा जा सकता है, उदाहरण के लिएampपर:
#शामिल करना
int फ़ूबार_एट(0x800100);
char __at(0x250) getID(int ऑफ़सेट) { … }
इस विनिर्देशक का तर्क होना चाहिए एक स्थिरांक जो उस पते का प्रतिनिधित्व करता है जिस पर पहला बाइट या निर्देश रखा जाएगा। RAM पते 0x800000 के ऑफ़सेट का उपयोग करके इंगित किए जाते हैं। CCI को इस सुविधा का उपयोग करने में सक्षम करें।
नया इंटरप्ट फ़ंक्शन सिंटैक्स कंपाइलर अब CCI _interrupt (num) स्पेसिफायर को स्वीकार करता है ताकि यह संकेत दिया जा सके कि C फ़ंक्शन इंटरप्ट हैंडलर हैं। स्पेसिफायर एक इंटरप्ट नंबर लेता है, उदाहरण के लिएampपर:
#शामिल करना
शून्य __interrupt(SPI_STC_vect_num) spi_Isr(शून्य) { … }
निश्चित मुद्दे
निम्नलिखित सुधार कंपाइलर में किए गए हैं। ये जनरेट किए गए कोड में बग को ठीक कर सकते हैं या कंपाइलर के संचालन को उस तरह से बदल सकते हैं जैसा कि उपयोगकर्ता गाइड द्वारा इरादा या निर्दिष्ट किया गया था। उपशीर्षकों में संस्करण संख्या निम्नलिखित समस्याओं के लिए सुधारों को शामिल करने वाले पहले कंपाइलर संस्करण को इंगित करती है। शीर्षक में ब्रैकेटेड लेबल ट्रैकिंग डेटाबेस में उस समस्या की पहचान है। यदि आपको सहायता से संपर्क करने की आवश्यकता है तो ये उपयोगी हो सकते हैं।
ध्यान दें कि डिवाइस से जुड़े डिवाइस फ़ैमिली पैक (DFP) में कुछ डिवाइस-विशिष्ट समस्याओं को ठीक किया जाता है। DFP में किए गए बदलावों की जानकारी और नवीनतम पैक डाउनलोड करने के लिए MPLAB पैक मैनेजर देखें।
5.1. संस्करण 2.41
वेंचुरा (XC8-3088) डोंगल पर डोंगल संबंधी समस्याएं कंपाइलर को लाइसेंस देने के लिए इस्तेमाल किया गया डेटा macOS Ventura होस्ट पर ठीक से पढ़ा नहीं गया होगा, जिसके परिणामस्वरूप लाइसेंसिंग विफलताएँ हो सकती हैं। XCLM लाइसेंस मैनेजर में बदलाव करके इस समस्या को ठीक किया जा सकता है।
मेमोरी आवंटन का गलत संकेत (XC8-2925) मानक लाइब्रेरी मेमोरी प्रबंधन फ़ंक्शन (malloc () इत्यादि) का उपयोग करके मेमोरी के SIZE_MAX बाइट्स (या इसके करीब का मान) आवंटित करने का प्रयास गलत तरीके से सफल हुआ। इसमें इस बात पर ध्यान नहीं दिया गया कि सरल गतिशील मेमोरी आवंटन कार्यान्वयन का उपयोग करते समय अनुरोध किए गए ब्लॉक के अतिरिक्त अतिरिक्त बाइट्स की आवश्यकता थी। ऐसी स्थितियों में अब एक NULL पॉइंटर लौटाया जाएगा और errno को ENOMEM पर सेट किया जाएगा।
गलत fma फ़ंक्शन हटाए गए (XC8-2913) C99 मानक लाइब्रेरी fma ( ) -फ़ैमिली फ़ंक्शन ( ) ने एकल राउंडिंग के लिए अनंत परिशुद्धता के साथ गुणा-जोड़ की गणना नहीं की, बल्कि इसके बजाय प्रत्येक ऑपरेशन के साथ राउंडिंग त्रुटियों को संचित किया। इन फ़ंक्शन को आपूर्ति की गई लाइब्रेरी से हटा दिया गया है।
स्ट्रिंग रूपांतरण का खराब संचालन (XC8-2921, XC8-2652) जब strtod Cr द्वारा रूपांतरण के लिए 'विषय अनुक्रम' में घातांकीय प्रारूप में एक फ़्लोटिंग-पॉइंट संख्या दिखाई देती थी और e/E वर्ण के बाद एक अप्रत्याशित वर्ण होता था, तब जहाँ endptr प्रदान किया गया था, उसे एक पता सौंपा गया था जो e/E के बाद के वर्ण की ओर इंगित करता था, जबकि उसे e/E वर्ण की ओर इंगित करना चाहिए था, क्योंकि उसे रूपांतरित नहीं किया गया था। उदाहरण के लिएample, strtod (“100exx”, &ep) को 100.00 लौटाना चाहिए और ep को स्ट्रिंग के “exx” भाग की ओर इंगित करने के लिए सेट करना चाहिए, जबकि फ़ंक्शन सही मान लौटा रहा था लेकिन ep को स्ट्रिंग के “xx” भाग की ओर इंगित करने के लिए सेट कर रहा था।
5.2. संस्करण 2.40
बहुत आराम से (XCS-2876) -mrelax विकल्प का उपयोग करते समय, संकलक कुछ वर्गों को एक साथ आवंटित नहीं कर रहा था, जिसके परिणामस्वरूप कम इष्टतम कोड आकार होते हैं। यह उस कोड के साथ हो सकता है जो नए MUSL पुस्तकालयों या कमजोर प्रतीकों का उपयोग करता है।
चेतावनी में बताए अनुसार मैपिंग सुविधा अक्षम नहीं की गई है (XC8-2875) const-data-in-config-mappedprogmem सुविधा const-data-in-progmem सुविधा के सक्षम होने पर निर्भर है। यदि const-data-inconfig-mapped-progmem सुविधा को विकल्प का उपयोग करके स्पष्ट रूप से सक्षम किया गया था और const-data-inprogmem सुविधा को अक्षम किया गया था, तो लिंक चरण विफल हो गया, एक चेतावनी संदेश के बावजूद जिसमें बताया गया था कि const-data-in-con fig-mapped-progmem सुविधा को स्वचालित रूप से अक्षम कर दिया गया था, जो पूरी तरह से सही नहीं था। इस स्थिति में const-data-in-config-mapped-progmem सुविधा अब पूरी तरह से अक्षम है।
NVMCTRL (XC8-2848) तक सही तरीके से पहुंचने के लिए DFP में परिवर्तन AVR64EA डिवाइस द्वारा उपयोग किए जाने वाले रनटाइम स्टार्टअप कोड ने इस बात को ध्यान में नहीं रखा कि NVMCTRL रजिस्टर कॉन्फ़िगरेशन चेंज प्रोटेक्शन (CCP) के अंतर्गत था और const-data-in-configmapped-progmem कंपाइलर सुविधा द्वारा उपयोग किए जाने वाले पेज पर I0 SFR सेट करने में सक्षम नहीं था। AVR-Ex_DFP संस्करण 2.2.55 में किए गए परिवर्तन रनटाइम स्टार्टअप कोड को इस रजिस्टर में सही ढंग से लिखने की अनुमति देंगे।
डीएफपी में होने वाले बदलावों से बचें फ्लैश मैपिंग (XC8-2847) AVR128DA28/32/48/64 सिलिकॉन इरेटा (D580000882) में रिपोर्ट की गई फ्लैश-मैपिंग डिवाइस सुविधा के साथ एक समस्या के लिए एक समाधान लागू किया गया है। const-data-in-config-mapped-progmem कंपाइलर सुविधा प्रभावित डिवाइस के लिए डिफ़ॉल्ट रूप से लागू नहीं होगी, और यह परिवर्तन AVR-Dx_DFP संस्करण 2.2.160 में दिखाई देगा।
sinhf या coshf के साथ निर्माण त्रुटि (XC8-2834) sinhf () या coshf () लाइब्रेरी फ़ंक्शंस का उपयोग करने के प्रयासों के परिणामस्वरूप एक अपरिभाषित संदर्भ का वर्णन करते हुए एक लिंक त्रुटि हुई। संदर्भित लापता फ़ंक्शन को अब संकलक वितरण में शामिल किया गया है।
नोपा के साथ निर्माण त्रुटियाँ (XC,8-2833) किसी फ़ंक्शन के साथ nopa विशेषता का उपयोग करना, जिसका असेंबलर नाम asm () का उपयोग करके निर्दिष्ट किया गया है, असेंबलर से त्रुटि संदेश ट्रिगर करता है। यह संयोजन संभव नहीं है।
पॉइंटर तर्कों के साथ वैरिएडिक फ़ंक्शन विफलता (XC8-2755, XC8-2731) जब const-data-in-progmem सुविधा सक्षम होती है, तो तर्कों की एक चर संख्या वाले फ़ंक्शन 24-बिट (memx प्रकार) पॉइंटर्स को चर तर्क सूची में पास किए जाने की अपेक्षा करते हैं। डेटा मेमोरी के पॉइंटर्स वाले तर्क 16-बिट ऑब्जेक्ट के रूप में पास किए जा रहे थे, जिससे अंततः उन्हें पढ़ने पर कोड विफलता हो रही थी। जब constdata-in-progmem सुविधा सक्षम होती है, तो सभी 16-बिट पॉइंटर्स तर्क अब 24-बिट पॉइंटर्स में परिवर्तित हो जाते हैं।
strtoxxx लाइब्रेरी फ़ंक्शन विफल हो रहा है (XC8-2620) जब const-data-in-progmem सुविधा सक्षम की गई थी, तो strtoxxx लाइब्रेरी फ़ंक्शन में endptr पैरामीटर, प्रोग्राम मेमोरी में मौजूद न होने वाले स्रोत स्ट्रिंग तर्कों के लिए ठीक से अद्यतन नहीं किया गया था।
अमान्य कास्ट के लिए अलर्ट (XC8-2612) कंपाइलर अब एक त्रुटि जारी करेगा यदि const-in-progmem सुविधा सक्षम है और स्ट्रिंग लिटरल का पता स्पष्ट रूप से डेटा एड्रेस स्पेस में डाला गया है (const क्वालिफायर को हटाकर), उदाहरण के लिएample, (uint 8_t *) “हैलो वर्ल्ड!”. यदि कॉन्स्ट डेटा पॉइंटर को स्पष्ट रूप से डेटा एड्रेस स्पेस में डाला जाता है, तो पता अमान्य हो सकता है, तो एक चेतावनी जारी की जाती है।
अप्रारंभीकृत const ऑब्जेक्ट्स का प्लेसमेंट (XC8-2408) अप्रारंभीकृत const और const अस्थिर ऑब्जेक्ट को उन डिवाइस पर प्रोग्राम मेमोरी में नहीं रखा जा रहा था जो अपने प्रोग्राम मेमोरी के सभी या हिस्से को डेटा एड्रेस स्पेस में मैप करते हैं। इन डिवाइस के लिए, ऐसे ऑब्जेक्ट को अब प्रोग्राम मेमोरी में रखा जाता है, जिससे उनका संचालन अन्य डिवाइस के साथ सुसंगत हो जाता है।
5.3। संस्करण 2.39 (कार्यात्मक सुरक्षा रिलीज़)
कोई नहीं।
5.4. संस्करण 2.36
विलंब करते समय त्रुटि (XC8-2774) डिफ़ॉल्ट फ्री मोड ऑप्टिमाइजेशन में मामूली परिवर्तनों ने विलंबित अंतर्निहित फ़ंक्शनों में ऑपरेंड अभिव्यक्तियों के निरंतर फोल्डिंग को रोक दिया, जिसके परिणामस्वरूप उन्हें गैर-स्थिरांक के रूप में माना गया और त्रुटि को ट्रिगर किया गया: अंतर्निहित avr delay_cycles एक संकलन समय पूर्णांक स्थिरांक की अपेक्षा करता है।
5.5. संस्करण 2.35
_at का उपयोग करके सन्निहित आवंटन (XC8-2653) एक ही नाम वाले अनुभाग में कई ऑब्जेक्ट स्थानों का सन्निहित आवंटन और _at () का उपयोग करना सही ढंग से काम नहीं करता है। उदाहरण के लिएampपर:
const char arr1[] __attribute__((section(“.mysec”))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((section(“.mysec”))) = {0xEF, 0xFE};
arr2 को arr1 के तुरंत बाद रखना चाहिए था।
अनुभाग आरंभ पते निर्दिष्ट करना (XC8-2650) -W1, –section-start विकल्प चुपचाप नामित आरंभ पते पर अनुभागों को रखने में विफल हो रहा था। यह समस्या किसी भी कस्टम-नाम वाले अनुभागों के लिए ठीक कर दी गई है; हालाँकि, यह किसी भी मानक अनुभागों के लिए काम नहीं करेगा, जैसे कि . text या . bss, जिन्हें -W1, -T विकल्प का उपयोग करके रखा जाना चाहिए।
रिलैक्स करते समय लिंकर क्रैश हो जाता है (XC8-2647) जब -mrelax ऑप्टिमाइज़ेशन सक्षम किया गया था और ऐसे कोड या डेटा सेक्शन थे जो उपलब्ध मेमोरी में फ़िट नहीं हुए, तो लिंकर क्रैश हो गया। अब, ऐसी परिस्थिति में, इसके बजाय त्रुटि संदेश जारी किए जाते हैं।
पीछे न हटना (XC8-2646) -नोफॉलबैक विकल्प को सही ढंग से लागू नहीं किया गया था, न ही प्रलेखित किया गया था। यह अब यह सुनिश्चित करने के लिए चुना जा सकता है कि यदि संकलक बिना लाइसेंस के है, तो संकलक कम अनुकूलन सेटिंग पर वापस नहीं आएगा, और इसके बजाय एक त्रुटि जारी करेगा।
अनुपयुक्त गति अनुकूलन (X03-2637) स्तर 3 अनुकूलन (-03) का चयन करते समय प्रक्रियात्मक अमूर्त अनुकूलन सक्षम किए जा रहे थे। ये अनुकूलन कोड गति की कीमत पर कोड आकार को कम करते हैं, इसलिए प्रदर्शन नहीं किया जाना चाहिए था।
खराब ईप्रोम पहुँच (XC8-2629) द जब -mconst-data-in-progmem विकल्प सक्षम किया गया था (जो कि डिफ़ॉल्ट स्थिति है), तो eeprom_read_block रूटीन Xmega डिवाइस पर सही ढंग से काम नहीं करता था, जिसके परिणामस्वरूप EEPROM मेमोरी सही ढंग से नहीं पढ़ी जा रही थी।
अमान्य मेमोरी आवंटन (XC8-2593, XC8-2651) जब -Ttext या -Tdata लिंकर विकल्प (उदाहरण के लिएampयदि -vl ड्राइवर विकल्प का उपयोग करके पारित किया गया पाठ (यदि -vl ड्राइवर विकल्प का उपयोग करके पारित किया गया पाठ) निर्दिष्ट किया जाता है, तो संबंधित पाठ/डेटा क्षेत्र मूल को अद्यतन किया गया था; तथापि, अंतिम पता तदनुसार समायोजित नहीं किया गया था, जिसके कारण क्षेत्र लक्ष्य डिवाइस की मेमोरी सीमा को पार कर सकता था।
ओवर-एट्रिब्यूटेड फ़ंक्शन के साथ क्रैश (XC8-2580) यदि किसी फ़ंक्शन को एक से अधिक इंटरप्ट, सिग्नल या एनएमआई विशेषताओं का उपयोग करके घोषित किया गया था, उदाहरण के लिए, विशेषता ( ( सिग्नल , इंटरप्ट ) )। तो कंपाइलर क्रैश हो गया।
अमान्य ATtiny इंटरप्ट कोड (XC8-2465) जब ATtiny उपकरणों के लिए निर्माण और ऑप्टिमाइज़ेशन अक्षम (-00) थे, तो इंटरप्ट फ़ंक्शंस ने रेंज असेंबलर संदेशों के ऑपरेंड को ट्रिगर किया हो सकता है।
विकल्प पारित नहीं हो रहे हैं (XC8-2452) एकाधिक, अल्पविराम से अलग किए गए लिंकर विकल्पों के साथ विकल्प का उपयोग करते समय, सभी लिंकर विकल्प लिंकर को पास नहीं किए जा रहे थे।
प्रोग्राम मेमोरी को अप्रत्यक्ष रूप से पढ़ने में त्रुटि (X03-2450) कुछ उदाहरणों में, प्रोग्राम मेमोरी में पॉइंटर से दो बाइट मान पढ़ते समय कंपाइलर एक आंतरिक त्रुटि (पहचानने योग्य insn) उत्पन्न करता है
5.6. संस्करण 2.32
दूसरी पहुंच लाइब्रेरी विफल (XC8-2381) किसी मौजूदा लाइब्रेरी संग्रह तक पहुंचने के लिए xc8-ar. .exe लाइब्रेरी संग्रहकर्ता के Windows संस्करण को दूसरी बार लागू करने पर नाम बदलने में असमर्थ त्रुटि संदेश के साथ विफलता हो सकती है।
5.7. संस्करण 2.31
अस्पष्टीकृत संकलक विफलताएं (XC8-2367) जब विंडोज प्लेटफॉर्म पर सिस्टम अस्थायी निर्देशिका को ऐसे पथ पर सेट किया गया हो जिसमें डॉट '.' वर्ण शामिल हो, तो संभवतः कंपाइलर निष्पादित करने में विफल हो गया हो।
5.8. संस्करण 2.30
रूपरेखा के बाद वैश्विक लेबल खो गए (XC8-2299) हाथ से लिखा असेंबली कोड जो वैश्विक लेबल को असेंबली अनुक्रमों के भीतर रखता है जो कि प्रक्रियात्मक अमूर्तता से प्रभावित होते हैं, हो सकता है कि उन्हें सही ढंग से पुनर्स्थापित नहीं किया गया हो।
एक आरामदायक दुर्घटना (XC8-2287) -mrelax विकल्प का उपयोग करने से लिंकर क्रैश हो सकता है जब टेल जंप रिलैक्सेशन ऑप्टिमाइजेशन ने ret निर्देश को हटाने का प्रयास किया था जो किसी अनुभाग के अंत में नहीं था।
लेबल को मान के रूप में अनुकूलित करते समय क्रैश (XC8-2282) "लेबल के रूप में मान" जीएनयू सी भाषा एक्सटेंशन का उपयोग करने वाले कोड ने प्रक्रियात्मक अमूर्त अनुकूलन को क्रैश करने का कारण हो सकता है, एक उल्लिखित वीएमए रेंज फिक्सअप त्रुटि को फैलाता है।
इतना स्थिर नहीं (XC8-2271) str rstr () और अन्य फ़ंक्शनों के लिए प्रोटोटाइप जब -mconst-data-inprogmem सुविधा अक्षम हो, तो रिटर्न किए गए स्ट्रिंग पॉइंटर्स पर गैर-मानक const क्वालिफायर निर्दिष्ट न करें। ध्यान दें कि avrxmega3 और avrtiny डिवाइस के साथ, यह सुविधा स्थायी रूप से सक्षम है।
खोये हुए इनिशियलाइज़र (XC8-2269) जब . से अधिक एक अनुवाद इकाई में एक चर को एक अनुभाग में रखा गया था (_section या _attribute_ ( (section) ) का उपयोग करके), और पहला ऐसा चर शून्य आरंभीकृत था या उसके पास प्रारंभकर्ता नहीं था, उसी अनुवाद इकाई में अन्य चरों के लिए प्रारंभकर्ता जो एक ही अनुभाग में रखे गए थे, खो गए थे।
5.1। संस्करण 2.29 (कार्यात्मक सुरक्षा रिलीज़)
कोई नहीं।
5.2. संस्करण 2.20
लंबे आदेशों के साथ त्रुटि (XC8-1983) AVR लक्ष्य का उपयोग करते समय, संकलक एक के साथ बंद हो सकता है file त्रुटि नहीं मिली, यदि कमांड लाइन बहुत बड़ी थी और इसमें विशेष वर्ण जैसे उद्धरण, बैकस्लैश आदि शामिल थे।
असाइन न किया गया rodata अनुभाग (XC8-1920) avrxmega3 और avrtiny आर्किटेक्चर के लिए निर्माण करते समय AVR लिंकर कस्टम rodata अनुभागों के लिए मेमोरी असाइन करने में विफल रहा, जिससे संभावित रूप से मेमोरी ओवरलैप त्रुटियाँ उत्पन्न हुईं
5.3. संस्करण 2.19 (कार्यात्मक सुरक्षा रिलीज़)
कोई नहीं।
5.4. संस्करण 2.10
स्थानांतरण विफलताएं (XC8-1891) सबसे उपयुक्त आवंटनकर्ता लिंकर विश्राम के बाद खंडों के बीच मेमोरी 'छेद' छोड़ना था। मेमोरी को खंडित करने के अलावा, इससे पीसी-सापेक्ष जंप या कॉल के सीमा से बाहर होने से संबंधित लिंकर स्थानांतरण विफलताओं की संभावना बढ़ गई।
रिलैक्सेशन द्वारा परिवर्तित नहीं किए गए निर्देश (XC8-1889) जंप या कॉल निर्देशों के लिए लिंकर रिलैक्सेशन नहीं हुआ, जिनके लक्ष्यों को रिलैक्स किए जाने पर पहुंचा जा सकता है।
गुम कार्यक्षमता (XC8E-388) कई परिभाषाएँ , जैसे clock_div_t और clock_prescale set () , को ATmega324PB, ATmega328PB, ATtiny441 और ATtiny841 सहित उपकरणों के लिए परिभाषित नहीं किया गया था।
लापता मैक्रोज़ प्रीप्रोसेसर मैक्रोज़ _XC8_MODE_, _XC8_VERS ION, _XC, और _XC8 को कंपाइलर द्वारा स्वचालित रूप से परिभाषित नहीं किया गया था। ये अब उपलब्ध हैं।
5.5. संस्करण 2.05
आंतरिक संकलक त्रुटि (XC8-1822) विंडोज़ के अंतर्गत निर्माण करते समय, कोड को अनुकूलित करते समय आंतरिक कंपाइलर त्रुटि उत्पन्न हो सकती है।
RAM अतिप्रवाह का पता नहीं चला (XC8-1800, XC8-1796) कुछ स्थितियों में संकलक द्वारा उपलब्ध RAM से अधिक प्रोग्राम का पता नहीं लगाया गया, जिसके परिणामस्वरूप रनटाइम कोड विफल हो गया।
हटाई गई फ्लैश मेमोरी (XC8-1792) avrxmega3 और avrtiny उपकरणों के लिए, फ्लैश मेमोरी के कुछ हिस्सों को MPLAB X द्वारा बिना प्रोग्राम किए छोड़ दिया गया हो सकता है आईडीई.
मुख्य निष्पादन में विफलता (XC8-1788) कुछ स्थितियों में जहां प्रोग्राम में कोई वैश्विक चर परिभाषित नहीं था, रनटाइम स्टार्टअप कोड बाहर नहीं निकला और मुख्य () फ़ंक्शन तक कभी नहीं पहुंचा गया।
ग़लत मेमोरी जानकारी (XC8-1787) avrxmega3 और avrtiny उपकरणों के लिए, avr- आकार कार्यक्रम रिपोर्ट कर रहा था कि केवल-पढ़ने के लिए डेटा प्रोग्राम मेमोरी के बजाय RAM का उपभोग कर रहा था।
गलत प्रोग्राम मेमोरी रीड (XC8-1783) डेटा एड्रेस स्पेस में मैप की गई प्रोग्राम मेमोरी वाले उपकरणों के लिए संकलित प्रोजेक्ट और जो PROGMEM मैक्रो/एट्रिब्यूट का उपयोग करके ऑब्जेक्ट को परिभाषित करते हैं, हो सकता है कि उन्होंने इन ऑब्जेक्ट्स को गलत पते से पढ़ा हो।
विशेषताओं के साथ आंतरिक त्रुटि (XC8-1773) यदि आपने सूचक वस्तुओं को परिभाषित किया है तो एक आंतरिक त्रुटि उत्पन्न हुई
_at () या विशेषता () टोकन सूचक नाम और dereferenced प्रकार के बीच, पूर्व के लिएampले, चार *
_at (0x800150) cp; अब यदि ऐसा कोड सामने आता है तो चेतावनी जारी की जाती है।
मुख्य (XC8-1780, XC8-1767, XC8-1754) निष्पादित करने में विफलता EEPROM चरों का उपयोग करने या कॉन्फ़िगरेशन प्रैग्मा का उपयोग करके फ़्यूज़ को परिभाषित करने से गलत डेटा आरंभीकरण हो सकता है और/या main ( ) तक पहुंचने से पहले रनटाइम स्टार्टअप कोड में प्रोग्राम निष्पादन लॉक हो सकता है।
छोटे उपकरणों के साथ फ्यूज त्रुटि (XC8-1778, XC8-1742) attiny4/5/9/10/20/40 डिवाइस के हेडर में गलत फ़्यूज़ लंबाई निर्दिष्ट की गई थी files जो फ़्यूज़ को परिभाषित करने वाले कोड को बनाने का प्रयास करते समय लिंकर त्रुटियों का कारण बनता है।
विभाजन दोष (XC8-1777) आंतरायिक विभाजन दोष को ठीक कर दिया गया है।
असेंबलर क्रैश (XC8-1761) जब उबंटू 18 के तहत कंपाइलर चलाया गया था, तो avr-as असेंबलर क्रैश हो सकता था।
ऑब्जेक्ट साफ़ नहीं किए गए (XC8-1752) रनटाइम स्टार्टअप कोड द्वारा अप्रारंभीकृत स्थिर संग्रहण अवधि ऑब्जेक्ट को साफ़ नहीं किया गया हो सकता है।
विरोधाभासी डिवाइस विनिर्देशन को अनदेखा किया गया (XC8-1749) जब कई डिवाइस विनिर्देश विकल्पों का उपयोग किया गया था और विभिन्न उपकरणों का संकेत दिया गया था, तो कंपाइलर त्रुटि उत्पन्न नहीं कर रहा था।
ढेर द्वारा स्मृति भ्रष्टाचार (XC8-1748) The _heap_start प्रतीक को गलत तरीके से सेट किया जा रहा था, जिसके परिणामस्वरूप ढेर द्वारा सामान्य चरों के दूषित होने की संभावना थी।
लिंकर स्थानांतरण त्रुटि (XC8-1739) एक लिंकर स्थानांतरण त्रुटि उत्सर्जित हो सकती है जब कोड में 4k बाइट दूर लक्ष्य के साथ एक rjmp या rcall होता है।
5.6. संस्करण 2.00
कोई नहीं।
ज्ञात मुद्दे
संकलक के संचालन में निम्नलिखित सीमाएँ हैं। ये सामान्य कोडिंग प्रतिबंध हो सकते हैं, या उपयोगकर्ता के मैनुअल में निहित जानकारी से विचलन हो सकते हैं। शीर्षक में ब्रैकेटेड लेबल ट्रैकिंग डेटाबेस में उस समस्या की पहचान है। यदि आपको सहायता से संपर्क करने की आवश्यकता है तो यह लाभकारी हो सकता है। जिन वस्तुओं पर लेबल नहीं हैं वे सीमाएँ हैं जो मोडी ऑपरेंडी का वर्णन करती हैं और जो स्थायी रूप से प्रभावी रहने की संभावना है।
6.1। एमपीएलएबी एक्स आईडीई एकीकरण
एमपीएलैब आईडीई एकीकरण यदि कंपाइलर को MPLAB IDE से उपयोग किया जाना है, तो आपको कंपाइलर स्थापित करने से पहले MPLAB IDE स्थापित करना होगा।
6.2. कोड जनरेशन
सेक्शन-एंकर विकल्प के साथ सेगफॉल्ट (XC8-3045) प्रोग्राम जो चर तर्क सूचियों के साथ फ़ंक्शन को परिभाषित करता है और जो -fsection-anchors विकल्प का उपयोग करता है, उसने आंतरिक कंपाइलर त्रुटि को ट्रिगर किया हो सकता है: सेगमेंटेशन फॉल्ट।
डिबग जानकारी सिंक से बाहर (XC8-2948) जब लिंकर विश्राम अनुकूलन निर्देशों को सिकोड़ता है (उदाहरण के लिएamp(उदाहरण के लिए, यदि आप आरकॉल निर्देशों के लिए कॉल करते हैं), तो स्रोत लाइन से पता मैपिंग सिंक में नहीं रह सकती है, जब किसी अनुभाग में एक से अधिक सिकुड़न ऑपरेशन हो रहे हों।
नीचे दिए गए पूर्व मेंampले, फू के लिए दो कॉल हैं जो सापेक्ष कॉल के लिए आराम से समाप्त होते हैं।
PA मेमोरी आवंटन विफलता (XC8-2881) प्रक्रियात्मक अमूर्त अनुकूलक का उपयोग करते समय, लिंकर मेमोरी आवंटन त्रुटियों की रिपोर्ट कर सकता है जब कोड आकार डिवाइस पर उपलब्ध प्रोग्राम मेमोरी की मात्रा के करीब हो, भले ही प्रोग्राम उपलब्ध स्थान को फिट करने में सक्षम हो।
इतना स्मार्ट नहीं स्मार्ट-I0 (XC8-2872) यदि const-data-in-progmem सुविधा को अक्षम कर दिया गया है या यदि डिवाइस ने अपने सभी फ़्लैश को डेटा मेमोरी में मैप किया है, तो कंपाइलर की स्मार्ट-आईओ सुविधा snprint f फ़ंक्शन के लिए वैध लेकिन उप-इष्टतम कोड उत्पन्न करेगी।
इससे भी कम स्मार्ट स्मार्ट-I0 (XC8-2869) जब -flto और -fno-builtin दोनों विकल्पों का उपयोग किया जाता है, तो कंपाइलर की स्मार्ट-io सुविधा वैध लेकिन उप-इष्टतम कोड उत्पन्न करेगी।
उप-इष्टतम केवल-पठन डेटा प्लेसमेंट (XC8-2849) लिंकर को वर्तमान में APPCODE और APPDATA मेमोरी सेक्शन के बारे में पता नहीं है, न ही मेमोरी मैप में [No-Read-While-Write डिवीजनों के बारे में। नतीजतन, इस बात की थोड़ी संभावना है कि लिंकर मेमोरी के अनुपयुक्त क्षेत्र में केवल पढ़ने योग्य डेटा आवंटित कर सकता है। यदि const-data-in-progmem सुविधा सक्षम है, तो गलत डेटा की संभावना बढ़ जाती है, खासकर यदि const-data-in-config-mapped-progmem सुविधा भी सक्षम है। यदि आवश्यक हो तो इन सुविधाओं को अक्षम किया जा सकता है।
वस्तु file प्रसंस्करण आदेश (XC8-2863) जिस क्रम में वस्तुएं fileलिंकर द्वारा संसाधित किया जाएगा प्रक्रियात्मक अमूर्त अनुकूलन (-mpa विकल्प) के उपयोग के आधार पर भिन्न हो सकता है। यह केवल कोड को प्रभावित करेगा जो कई मॉड्यूल में कमजोर कार्यों को परिभाषित करता है।
पूर्ण लिंकर त्रुटि (XC8-2777) जब RAM के प्रारंभ में किसी पते पर किसी वस्तु को निरपेक्ष बनाया गया हो और गैर-प्रारंभिक वस्तुओं को भी परिभाषित किया गया हो, तो एक लिंकर त्रुटि ट्रिगर हो सकती है।
लघु वेक-अप आईडी (XC8-2775) ATA5700/2 उपकरणों के लिए, PHIDO/1 रजिस्टर को 16 बिट्स की चौड़ाई के बजाय केवल 32 बिट्स की चौड़ाई के रूप में परिभाषित किया गया है।
प्रतीक को कॉल करते समय लिंकर क्रैश (XC8-2758) यदि स्रोत कोड द्वारा -cc., –de f sym लिंकर विकल्प का उपयोग करके परिभाषित किए गए प्रतीक को कॉल करते समय -mrelax ड्राइवर विकल्प का उपयोग किया जाता है, तो लिंकर क्रैश हो सकता है।
गलत आरंभीकरण (XC8-2679) वहाँ यह एक विसंगति है जहां कुछ वैश्विक/स्थिर बाइट आकार के ऑब्जेक्ट्स के लिए प्रारंभिक मान डेटा मेमोरी में रखे जाते हैं और जहां रनटाइम पर चरों तक पहुंच बनाई जाएगी।
खराब अप्रत्यक्ष फ़ंक्शन कॉल (XC8-2628) कुछ उदाहरणों में, संरचना के हिस्से के रूप में संग्रहीत फ़ंक्शन पॉइंटर के माध्यम से किए गए फ़ंक्शन कॉल विफल हो सकते हैं।
strtof हेक्साडेसिमल फ़्लोट्स (XC8-2626) के लिए शून्य लौटाता है लाइब्रेरी फ़ंक्शन strtof et al और scanf () et al, हमेशा एक हेक्साडेसिमल फ़्लोटिंग-पॉइंट संख्या को परिवर्तित करेंगे जो घातांक निर्दिष्ट नहीं करता है शून्य में। उदाहरण के लिएampपर:
strtof ("ऑक्सल", &endptr) ;
मान 0 लौटाएगा, I नहीं.
गलत स्टैक सलाहकार संदेश (XC8-2542, XC8-2541) कुछ मामलों में, रिकर्सन या अनिश्चित स्टैक के उपयोग के बारे में स्टैक सलाहकार चेतावनी (संभवतः एलोका () के उपयोग के माध्यम से) उत्सर्जित नहीं होती है।
डुप्लीकेट इंटरप्ट कोड के साथ विफलता (XC8-2421) जहाँ एक से अधिक इंटरप्ट फ़ंक्शन में एक ही बॉडी होती है, कंपाइलर के पास एक इंटरप्ट फ़ंक्शन के लिए आउटपुट हो सकता है जो दूसरे को कॉल करता है। इसके परिणामस्वरूप सभी कॉल-क्लोबर्ड रजिस्टरों को अनावश्यक रूप से सहेजा जा रहा है, और वर्तमान इंटरप्ट हैंडलर के उपसंहार के चलने से पहले ही व्यवधान सक्षम हो जाएगा, जिससे कोड विफलता हो सकती है।
अमान्य DFP पथ के साथ ख़राब आउटपुट (XC8-2376) यदि कंपाइलर को अमान्य DFP पथ और 'युक्ति' के साथ लागू किया जाता है file चयनित डिवाइस के लिए मौजूद है, कंपाइलर लापता डिवाइस परिवार पैक की रिपोर्ट नहीं कर रहा है और इसके बजाय 'युक्ति' का चयन कर रहा है file, जो तब अमान्य आउटपुट का कारण बन सकता है। 'कल्पना' fileएस वितरित डीएफपी के साथ अद्यतित नहीं हो सकता है और केवल आंतरिक कंपाइलर परीक्षण के साथ उपयोग के लिए अभिप्रेत था।
मेमोरी ओवरलैप का पता नहीं चला (XC8-1966) संकलक किसी पते पर निरपेक्ष बनाए गए ऑब्जेक्ट्स (_at () के माध्यम से) और सेक्शन () विनिर्देशक का उपयोग करने वाले अन्य ऑब्जेक्ट्स और जो समान पते से जुड़े हुए हैं, के मेमोरी ओवरलैप का पता नहीं लगा रहा है।
पुस्तकालय कार्यों और _memx (XC8-1763) के साथ विफलता मेमएक्स एड्रेस स्पेस में तर्क के साथ libgcc फ्लोट फ़ंक्शन को कॉल करना विफल हो सकता है। ध्यान दें कि लाइब्रेरी रूटीन को कुछ C ऑपरेटर से कॉल किया जाता है, इसलिए, उदाहरण के लिएample, निम्नलिखित कोड प्रभावित होता है:
regFloatVar > memxFloatVar लौटाएं;
सीमित libgcc कार्यान्वयन (AVRTC-731) ATTiny4/5/9/10/20/40 उत्पादों के लिए, libgcc में मानक C/गणित लाइब्रेरी कार्यान्वयन बहुत सीमित है या मौजूद नहीं है।
प्रोग्राम मेमोरी सीमाएँ (AVRTC-732) 128 केबी से अधिक की प्रोग्राम मेमोरी छवियां टूलचेन द्वारा समर्थित हैं; हालांकि, -mre lax विकल्प का उपयोग करने पर आवश्यक फ़ंक्शन स्टब्स उत्पन्न करने के बजाय, बिना किसी छूट और बिना किसी सहायक त्रुटि संदेश के लिंकर निरस्तीकरण के ज्ञात उदाहरण हैं।
नाम स्थान की सीमाएँ (AVRTC-733) उपयोगकर्ता के गाइड सेक्शन स्पेशल टाइप क्वालिफायर में उल्लिखित सीमाओं के अधीन, नामित पता स्थान टूलचेन द्वारा समर्थित हैं।
समय क्षेत्र लाइब्रेरी फ़ंक्शन GMT को मानते हैं और स्थानीय समय क्षेत्रों का समर्थन नहीं करते हैं, इस प्रकार localtime ( ) gmtime ( ) के समान समय लौटाएगा, उदाहरण के लिएampले.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
दस्तावेज़ / संसाधन
![]() |
माइक्रोचिप MPLAB XC8 C कंपाइलर विकास सॉफ्टवेयर [पीडीएफ] मालिक नियमावली MPLAB XC8 C, MPLAB XC8 C कंपाइलर डेवलपमेंट सॉफ्टवेयर, कंपाइलर डेवलपमेंट सॉफ्टवेयर, डेवलपमेंट सॉफ्टवेयर, सॉफ्टवेयर |