माइक्रोचिप लोगोMPLAB® XC8 C कम्पाइलर संस्करण 2.41 AVR® MCU का लागि रिलीज नोटहरू
मालिकको म्यानुअल

MPLAB XC8 C कम्पाइलर विकास सफ्टवेयर

यस कागजातमा MICROCHIP AVR यन्त्रहरूलाई लक्षित गर्दा MPLAB XC8 C कम्पाइलरसँग सम्बन्धित महत्त्वपूर्ण जानकारीहरू समावेश छन्।
कृपया यो सफ्टवेयर चलाउनु अघि यसलाई पढ्नुहोस्। यदि तपाईंले 8-बिट PIC यन्त्रहरूका लागि कम्पाइलर प्रयोग गर्दै हुनुहुन्छ भने PIC कागजातका लागि MPLAB XC8 C कम्पाइलर रिलिज नोटहरू हेर्नुहोस्।

माथिview

1.1. परिचय
माइक्रोचिप MPLAB® XC8 C कम्पाइलरको यो रिलीजमा धेरै नयाँ सुविधाहरू र बग फिक्सहरू छन्।
१.२। निर्माण मिति
यस कम्पाइलर संस्करणको आधिकारिक निर्माण मिति 8 फेब्रुअरी 2023 हो।
१.३। अघिल्लो संस्करण
अघिल्लो MPLAB XC8 C कम्पाइलर संस्करण 2.40 जुलाई 3 मा निर्मित 2022 थियो।
१.४। कार्यात्मक सुरक्षा पुस्तिका
MPLAB XC कम्पाइलरहरूको लागि कार्यात्मक सुरक्षा म्यानुअल कागजात प्याकेजमा उपलब्ध छ जब तपाइँ कार्यात्मक सुरक्षा इजाजतपत्र खरिद गर्नुहुन्छ।
१.५ कम्पोनेन्ट लाइसेन्स र संस्करणहरू
AVR MCUs उपकरणहरूको लागि MPLAB XC8 C कम्पाइलर GNU जनरल पब्लिक इजाजतपत्र (GPL) अन्तर्गत लेखिएको र वितरण गरिएको छ जसको अर्थ यसको स्रोत कोड स्वतन्त्र रूपमा वितरण गरिएको छ र जनतालाई उपलब्ध छ।
GNU GPL अन्तर्गतका उपकरणहरूको लागि स्रोत कोड माइक्रोचिपबाट अलग रूपमा डाउनलोड गर्न सकिन्छ webसाइट। तपाईले GNU GPL लाई आफ्नो install licence.txt avr/doc डाइरेक्टरीको उपनिर्देशिका नामको फाइलमा पढ्न सक्नुहुन्छ। GPL अन्तर्निहित सिद्धान्तहरूको सामान्य छलफल यहाँ पाउन सकिन्छ।
हेडर फाइलहरू, लिङ्कर स्क्रिप्टहरू, र रनटाइम पुस्तकालयहरूको लागि प्रदान गरिएको समर्थन कोड स्वामित्व कोड हो र GPL अन्तर्गत कभर गरिएको छैन।
यो कम्पाइलर GCC संस्करण 5.4.0, binutils संस्करण 2.26 को कार्यान्वयन हो, र avr-libc संस्करण 2.0.0 प्रयोग गर्दछ।
1.6. प्रणाली आवश्यकताहरू
MPLAB XC8 C कम्पाइलर र यसले प्रयोग गर्ने इजाजतपत्र सफ्टवेयर निम्नका 64-बिट संस्करणहरू सहित विभिन्न अपरेटिङ सिस्टमहरूको लागि उपलब्ध छन्: Microsoft® Windows® 10 को व्यावसायिक संस्करणहरू; Ubuntu® 18.04; र macOS® 10.15.5। विन्डोजका लागि बाइनरीहरू कोड-साइन गरिएको छ। macOS को लागि बाइनरीहरू कोड-हस्ताक्षरित र नोटरी गरिएका छन्। MPLAB XC नेटवर्क इजाजतपत्र सर्भर Microsoft Windows 64 र माथि सहित, 10-बिट अपरेटिङ सिस्टमहरूको विभिन्न प्रकारका लागि उपलब्ध छ; Ubuntu 18.04 र माथि; वा macOS 10.15 र माथिको। सर्भरले विन्डोज सर्भर, लिनक्स वितरणहरू, जस्तै 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 प्रत्येक उपकरणको लागि कागजात कन्फिगरेसन बिट सेटिङहरू।

१.७। संस्करण र लाइसेन्स अपग्रेडहरू
MPLAB XC8 कम्पाइलरलाई इजाजतपत्र प्राप्त (PRO) वा बिना इजाजतपत्र (नि:शुल्क) उत्पादनको रूपमा सक्रिय गर्न सकिन्छ। तपाइँ तपाइँको कम्पाइलर लाइसेन्स गर्न को लागी एक सक्रियता कुञ्जी किन्न आवश्यक छ। एक इजाजतपत्रले नि: शुल्क उत्पादनको तुलनामा उच्च स्तरको अनुकूलनको लागि अनुमति दिन्छ। एक बिना इजाजत पत्र कम्पाइलर बिना लाइसेन्स अनिश्चित कालको लागि सञ्चालन गर्न सकिन्छ। एक MPLAB XC8 कार्यात्मक सुरक्षा कम्पाइलर माइक्रोचिपबाट खरिद गरिएको कार्यात्मक सुरक्षा इजाजतपत्रको साथ सक्रिय हुनुपर्छ। कम्पाइलर यो इजाजतपत्र बिना काम गर्दैन। एक पटक सक्रिय भएपछि, तपाइँ कुनै पनि अप्टिमाइजेसन स्तर चयन गर्न सक्नुहुन्छ र सबै कम्पाइलर सुविधाहरू प्रयोग गर्न सक्नुहुन्छ। MPLAB XC कार्यात्मक सुरक्षा कम्पाइलरको यो रिलीजले नेटवर्क सर्भर इजाजतपत्र समर्थन गर्दछ।
इजाजतपत्र प्रकारहरू र इजाजतपत्रको साथ कम्पाइलरको स्थापना बारे जानकारीको लागि MPLAB XC C कम्पाइलरहरू (DS50002059) स्थापना र लाइसेन्सिङ कागजात हेर्नुहोस्।

२. स्थापना र सक्रियता
यो कम्पाइलरसँग समावेश गरिएको नवीनतम इजाजतपत्र प्रबन्धकको बारेमा महत्त्वपूर्ण जानकारीको लागि माइग्रेसन मुद्दाहरू र सीमाहरू खण्डहरू पनि हेर्नुहोस्।
यदि MPLAB IDE प्रयोग गर्दै हुनुहुन्छ भने, यो उपकरण स्थापना गर्नु अघि नवीनतम MPLAB X IDE संस्करण 5.0 वा पछिको स्थापना गर्न निश्चित हुनुहोस्। कम्पाइलर स्थापना गर्नु अघि IDE छोड्नुहोस्। (Windows), (Linux) वा (macOS) .exe .run .app कम्पाइलर स्थापनाकर्ता अनुप्रयोग चलाउनुहोस्, जस्तै र स्क्रिनमा निर्देशनहरू पालना गर्नुहोस्। XC8-1.00.11403-windows.exe पूर्वनिर्धारित स्थापना निर्देशिका सिफारिस गरिएको छ। यदि तपाइँ लिनक्स प्रयोग गर्दै हुनुहुन्छ भने, तपाइँले टर्मिनल र रूट खाताबाट कम्पाइलर स्थापना गर्नुपर्छ। प्रशासक विशेषाधिकारहरूको साथ macOS खाता प्रयोग गरेर स्थापना गर्नुहोस्।
सक्रियता अब स्थापना गर्न छुट्टै गरिन्छ। थप जानकारीको लागि MPLAB® XC C Compilers (DS52059) को लागि कागजात लाइसेन्स प्रबन्धक हेर्नुहोस्।
यदि तपाइँ मूल्याङ्कन इजाजतपत्र अन्तर्गत कम्पाइलर चलाउन रोज्नुहुन्छ भने, तपाइँ अब तपाइँको मूल्याङ्कन अवधि समाप्त भएको 14 दिन भित्र हुँदा संकलनको समयमा चेतावनी प्राप्त गर्नुहुनेछ। यदि तपाइँ तपाइँको HPA सदस्यता समाप्त भएको 14 दिन भित्र हुनुहुन्छ भने उही चेतावनी जारी गरिन्छ।
XC नेटवर्क लाइसेन्स सर्भर एक अलग स्थापनाकर्ता हो र एकल-प्रयोगकर्ता कम्पाइलर स्थापनाकर्तामा समावेश गरिएको छैन।
XC लाइसेन्स प्रबन्धकले अब फ्लोटिंग नेटवर्क इजाजतपत्रहरूको रोमिङ समर्थन गर्दछ। मोबाइल प्रयोगकर्ताहरूलाई लक्षित गरी, यो सुविधाले फ्लोटिंग लाइसेन्सलाई छोटो समयको लागि नेटवर्क बन्द गर्न अनुमति दिन्छ। यो सुविधा प्रयोग गरेर, तपाइँ नेटवर्कबाट विच्छेदन गर्न सक्नुहुन्छ र अझै पनि तपाइँको MPLAB XC कम्पाइलर प्रयोग गर्न सक्नुहुन्छ। यस सुविधामा थप जानकारीको लागि XCLM स्थापनाको कागजात फोल्डर हेर्नुहोस्।
MPLAB X IDE ले रोमिङलाई दृश्यात्मक रूपमा व्यवस्थापन गर्न लाइसेन्स विन्डो (उपकरणहरू > इजाजतपत्रहरू) समावेश गर्दछ।

१.९.१। स्थापना समस्याहरू समाधान गर्दै
यदि तपाइँ कुनै पनि विन्डोज अपरेटिङ सिस्टम अन्तर्गत कम्पाइलर स्थापना गर्न कठिनाइहरू अनुभव गर्नुहुन्छ भने, निम्न सुझावहरू प्रयास गर्नुहोस्।
प्रशासकको रूपमा स्थापना चलाउनुहोस्।
स्थापनाकर्ता अनुप्रयोगको अनुमतिहरू 'पूर्ण नियन्त्रण' मा सेट गर्नुहोस्। (फाइलमा दायाँ क्लिक गर्नुहोस्, गुणहरू चयन गर्नुहोस्, सुरक्षा ट्याब, प्रयोगकर्ता चयन गर्नुहोस्, सम्पादन गर्नुहोस्।)
अस्थायी फोल्डरको अनुमतिहरू 'पूर्ण नियन्त्रण' मा सेट गर्नुहोस्।
अस्थायी फोल्डरको स्थान निर्धारण गर्न, रन कमाण्डमा %temp% टाइप गर्नुहोस् (Windows लोगो कुञ्जी + R)।
यसले त्यो डाइरेक्टरी देखाउने फाइल एक्सप्लोरर संवाद खोल्नेछ र तपाइँलाई त्यो फोल्डरको मार्ग निर्धारण गर्न अनुमति दिनेछ।
१.१०। कम्पाइलर कागजात
MPLAB X IDE ड्यासबोर्डमा नीलो मद्दत बटन क्लिक गर्दा तपाईको ब्राउजरमा खुल्ने HTML पृष्ठबाट कम्पाइलरको प्रयोगकर्ताको गाइड खोल्न सकिन्छ, स्क्रिनसटमा उल्लेख गरिए अनुसार।

यदि तपाइँ 8-बिट AVR लक्ष्यहरूको लागि निर्माण गर्दै हुनुहुन्छ भने, AVR® MCU को लागि MPLAB® XC8 C कम्पाइलर प्रयोगकर्ताको गाइडले ती कम्पाइलर विकल्पहरू र यस वास्तुकलामा लागू हुने सुविधाहरूको जानकारी समावेश गर्दछ।

MICROCHIP MPLAB XC8 C कम्पाइलर विकास सफ्टवेयर -

C. ग्राहक समर्थन
माइक्रोचिपले यस कम्पाइलर संस्करणको बारेमा बग रिपोर्टहरू, सुझावहरू वा टिप्पणीहरूलाई स्वागत गर्दछ। कृपया कुनै पनि बग रिपोर्ट वा सुविधा अनुरोध समर्थन प्रणाली मार्फत निर्देशित गर्नुहोस्।

कागजात अद्यावधिकहरू

MPLAB XC8 कागजातहरूको अन-लाइन र अप-टु-डेट संस्करणहरूको लागि, कृपया माइक्रोचिपको अनलाइन प्राविधिक कागजातहरूमा जानुहोस्। webसाइट। यस रिलीजमा नयाँ वा अद्यावधिक गरिएको AVR कागजात:

  • AVR® MCU (संशोधन G) को लागि MPLAB® XC8 C कम्पाइलर प्रयोगकर्ताको गाइड
  • AVR® GNU Toolchain to MPLAB® XC8 माइग्रेसन गाइड (संशोधन A)
  • हेक्समेट प्रयोगकर्ता गाइड (संशोधन बी)

AVR® GNU Toolchain to MPLAB® XC8 माइग्रेसन गाइडले स्रोत कोडमा परिवर्तनहरू वर्णन गर्दछ र तपाईंले AVR 8-bit GNU Toolchain बाट Microchip MPLAB XC8 C कम्पाइलरमा C-आधारित परियोजना माइग्रेट गर्ने निर्णय गर्दा आवश्यक हुन सक्ने विकल्पहरू निर्माण गर्दछ। माइक्रोचिप एकीकृत मानक पुस्तकालय सन्दर्भ गाइडले माइक्रोचिप एकीकृत मानक पुस्तकालयद्वारा परिभाषित कार्यहरूको व्यवहार र इन्टरफेस, साथै पुस्तकालय प्रकारहरू र म्याक्रोहरूको उद्देश्य प्रयोगको वर्णन गर्दछ। यस मध्ये केही जानकारी पहिले MPLAB® XC8 C कम्पाइलर प्रयोगकर्ताको गाइड AVR® MCU मा समावेश गरिएको थियो। यन्त्र-विशिष्ट पुस्तकालय जानकारी अझै पनि यो कम्पाइलर गाइडमा समावेश छ।
यदि तपाइँ भर्खरै 8-बिट यन्त्रहरू र MPLAB XC8 C कम्पाइलरको साथ सुरु गर्दै हुनुहुन्छ भने, MPLAB® XC8 प्रयोगकर्ताको इम्बेडेड इन्जिनियरहरूको लागि गाइड - AVR® MCUs (DS50003108) मा MPLAB X IDE मा परियोजनाहरू सेटअप गर्ने र कोड लेख्ने बारे जानकारी छ। पहिलो MPLAB XC8 C परियोजना। यो गाइड अब कम्पाइलर संग वितरित छ।
हेक्समेट प्रयोगकर्ताको गाइड एक स्ट्यान्ड-अलोन एप्लिकेसनको रूपमा हेक्समेट चलाउनेहरूका लागि हो।

नयाँ के छ

निम्न नयाँ AVR-लक्ष्य सुविधाहरू छन् जुन कम्पाइलरले समर्थन गर्दछ। उपशीर्षकहरूमा संस्करण नम्बरले पछ्याउने सुविधाहरू समर्थन गर्नको लागि पहिलो कम्पाइलर संस्करणलाई संकेत गर्दछ।
३७ संस्करण १
Bootrow समर्थन (XC8-3053) कम्पाइलरले कुनै पनि खण्डको सामग्रीलाई HEX फाइलमा at.bootrow ठेगाना 0x860000 को उपसर्गको साथ राख्नेछ। यी खण्डहरू BOOTROW मेमोरीको लागि प्रयोग गरिन्छ, जुन कुञ्जीहरू र अन्य सुरक्षित जानकारीको भण्डारणको लागि डिजाइन गरिएको हो जुन बुटलोडरमा मात्र पहुँचयोग्य हुनुपर्छ।

रिडन्डन्ट रिटर्न एलिमिनेशन (XC8-3048) कम्पाइलरले अब कस्टम लिङ्कर स्क्रिप्टहरू प्रयोग गर्दा टेल जम्पको साथ ret प्रकार्यहरूमा अनावश्यक निर्देशनहरू हटाउनेछ। यो पहिले प्रदर्शन गरिएको जस्तै एक अप्टिमाइजेसन हो, तर यो अब सबै अनाथ खण्डहरूमा प्रदर्शन गरिन्छ, चाहे अनुकूलन लिङ्कर स्क्रिप्ट प्रयोग गरिएको छ र उत्तम फिट आवंटन योजना खेलमा छैन। समय प्रकार परिवर्तन (XC8-2982, 2932) C99 मानक पुस्तकालय प्रकार, time_t बाट एक प्रकारमा परिवर्तन गरिएको छ, जसले केही समय-सम्बन्धित लामो लामो कार्यहरूमा कोड-साइज सुधारहरू दिन्छ, जस्तै। हस्ताक्षर नगरिएको लामो mktime()
नयाँ nop (XC8-2946, 2945) मा म्याक्रो थपिएको छ। यो म्याक्रोले no-NOP() सम्मिलित गर्दछ आउटपुटमा nop सञ्चालन निर्देशन।
XCLM (XC8-2944) मा अपडेट गर्नुहोस् कम्पाइलरसँग प्रयोग गरिएको इजाजतपत्र प्रबन्धक अद्यावधिक गरिएको छ र अब कम्पाइलरको इजाजतपत्र विवरणहरू जाँच गर्दा थप उत्तरदायी छ।
Trampअलाइन कलहरू (XC8-2760) कम्पाइलरले अब लामो-फार्म कल निर्देशनहरूलाई छोटो सापेक्ष कलहरूसँग प्रतिस्थापन गर्न सक्छ जब निर्देशनहरूको सापेक्ष रूपहरू सामान्यतया तिनीहरूको गन्तव्यको दायरा बाहिर हुनेछ। यस अवस्थामा, कम्पाइलरले rcall निर्देशनलाई 'tr' लाई कल गर्न निर्देशनहरूसँग प्रतिस्थापन गर्ने प्रयास गर्नेछ।ampआवश्यक ठेगानामा oline' कार्यान्वयन, पूर्वका लागिample: jmp
rcal tramp_foo; कल foo थियो
...
rcal tramp_foo
...
tramp_foo:
jmp foo

यो अनुकूलन, समान कार्यक्रम प्रवाह अनुकूलन संग, -mrelax विकल्प द्वारा नियन्त्रित छ।

३७ संस्करण १
नयाँ उपकरण समर्थन समर्थन अब निम्न AVR भागहरूका लागि उपलब्ध छ: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64, AVR28DD64, AVR32, AVR64।
सुधारिएको प्रक्रियात्मक अमूर्तता प्रक्रियात्मक अमूर्त (PA) अप्टिमाइजेसन उपकरण सुधार गरिएको छ ताकि एक प्रकार्य कल निर्देशन (/ ) समावेश भएको कोड प्रयोग गर्न सकिन्छ। यदि स्ट्याक फंक्शनबाट फिर्ता मान प्राप्त गर्नका लागि आर्गुमेन्टहरू पास गर्न प्रयोग गरिएन भने मात्र यो कल आरकल हुनेछ। स्ट्याक प्रयोग गरिन्छ जब एक चल तर्क सूची संग एक प्रकार्य कल गर्दा वा यस उद्देश्यका लागि तोकिएका दर्ताहरू भन्दा बढी तर्कहरू लिने प्रकार्यलाई कल गर्दा। यो सुविधा विकल्पको प्रयोग गरेर असक्षम गर्न सकिन्छ, वा प्रक्रियात्मक एब्स्ट्र्याक्शनलाई वस्तु फाइल वा प्रकार्यको लागि पूर्ण रूपमा असक्षम गर्न सकिन्छ - र, क्रमशः, वा विशेषता (विशिष्ट) प्रयोग गरेर प्रकार्यहरूसँग चयन गरेर।
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa कोड कभरेज म्याक्रो कम्पाइलरले अब म्याक्रो परिभाषित गर्दछ यदि मान्य विकल्प __nopa __CODECOV -mcodecov निर्दिष्ट गरिएको छ।
मेमोरी रिजर्भेसन विकल्प ड्राइभरले अब AVR लक्ष्यहरूको लागि निर्माण गर्दा xc8-cc -mreserve=space@start:end विकल्प स्वीकार गर्नेछ। यो विकल्पले डेटा वा प्रोग्राम मेमोरी स्पेसमा निर्दिष्ट मेमोरी दायरा आरक्षित गर्दछ, लिङ्करलाई यस क्षेत्रमा कोड वा वस्तुहरू भर्नबाट रोक्छ। स्मार्ट smart IO स्मार्ट IO प्रकार्यहरूमा धेरै सुधारहरू गरिएका छन्, प्रिन्टफ कोर कोडमा सामान्य ट्वीकहरू सहित, %n रूपान्तरण निर्दिष्टकर्तालाई स्वतन्त्र भेरियन्टको रूपमा व्यवहार गर्दै, मागमा vararg पप दिनचर्याहरूमा लिङ्क गर्दै, ह्यान्डल गर्न सम्भव भएसम्म छोटो डेटा प्रकारहरू प्रयोग गरी। IO प्रकार्य तर्कहरू, र फिल्ड चौडाइ र सटीक ह्यान्डलिंगमा सामान्य कोड फ्याक्टरिंग। यसले महत्त्वपूर्ण कोड र डेटा बचत गर्न सक्छ, साथै IO को कार्यान्वयन गति बढाउन सक्छ।

३.२। संस्करण २.३९ (कार्यात्मक सुरक्षा रिलीज)
नेटवर्क सर्भर इजाजतपत्र MPLAB XC8 कार्यात्मक सुरक्षा कम्पाइलरको यो रिलीजले नेटवर्क सर्भर लाइसेन्स समर्थन गर्दछ।
३७ संस्करण १
कुनै पनि छैन।

३७ संस्करण १
नयाँ उपकरण समर्थन समर्थन निम्न AVR भागहरूका लागि उपलब्ध छ: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28, र AVR64DD32।
सुधारिएको सन्दर्भ स्विचिङ नयाँ -mcall-isr-prologues विकल्पले कसरी बाधा प्रकार्यहरूले प्रविष्टिमा दर्ताहरूलाई बचत गर्छ र अवरोध दिनचर्या समाप्त हुँदा ती दर्ताहरू कसरी पुनर्स्थापित हुन्छन् परिवर्तन गर्दछ। यसले -mcall-prologues विकल्पमा समान रूपमा काम गर्दछ, तर अवरोध कार्यहरू (ISRs) लाई मात्र असर गर्छ।
अझ सुधारिएको सन्दर्भ स्विचिङ नयाँ -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 नयाँ एकीकृत पुस्तकालयहरूको भागको रूपमा, प्रिन्टफ र स्क्यानफ परिवारहरूमा I0 प्रकार्यहरू अब प्रत्येक निर्माणमा अनुकूलन-उत्पन्न हुन्छन्, यी कार्यहरू कार्यक्रममा कसरी प्रयोग गरिन्छ भन्ने आधारमा। यसले कार्यक्रमद्वारा प्रयोग हुने स्रोतहरूलाई पर्याप्त रूपमा घटाउन सक्छ।
स्मार्ट ICI सहायता विकल्प स्मार्ट I0 प्रकार्यहरूमा कलहरूको विश्लेषण गर्दा (जस्तै प्रिन्ट f () वा स्क्यानफ ()), कम्पाइलरले सधैं ढाँचा स्ट्रिङबाट निर्धारण गर्न सक्दैन वा कललाई आवश्यक ती रूपान्तरण निर्दिष्टकर्ताहरूको तर्कबाट अनुमान लगाउन सक्दैन। पहिले, कम्पाइलरले सँधै कुनै पनि अनुमानहरू नगर्ने र पूर्ण रूपमा कार्यात्मक 10 प्रकार्यहरू अन्तिम कार्यक्रम छविमा जोडिएको सुनिश्चित गर्थे। एउटा नयाँ – msmart-io-format=fmt विकल्प थपिएको छ ताकि कम्पाइलरलाई स्मार्ट I0 प्रकार्यहरू द्वारा प्रयोग गरिएको रूपान्तरण निर्दिष्टकर्ताहरूको प्रयोगकर्ताद्वारा सूचित गर्न सकिन्छ जसको प्रयोग अस्पष्ट छ, अत्यधिक लामो 10 दिनचर्याहरूलाई लिङ्क हुनबाट रोक्दै। (थप विवरणहरूको लागि smart-io-format विकल्प हेर्नुहोस्।)
अनुकूलन खण्डहरू राख्दै पहिले, -W1, -section-start विकल्पले अनुरोध गरिएको ठेगानामा निर्दिष्ट खण्ड मात्र राख्छ जब लिङ्कर स्क्रिप्टले उही नामको आउटपुट खण्ड परिभाषित गर्दछ। जब त्यो मामला थिएन, खण्ड लिङ्कर द्वारा छनोट गरिएको ठेगानामा राखिएको थियो र विकल्प अनिवार्य रूपमा बेवास्ता गरिएको थियो। अब विकल्पलाई सबै अनुकूलन खण्डहरूका लागि सम्मानित गरिनेछ, यदि लिङ्कर लिपिले खण्ड परिभाषित गर्दैन भने पनि। नोट गर्नुहोस्, यद्यपि, मानक खण्डहरूको लागि, जस्तै। पाठ,। bss वा। डेटा, उत्तम फिट आवंटकसँग अझै पनि तिनीहरूको प्लेसमेन्टमा पूर्ण नियन्त्रण हुनेछ, र विकल्पको कुनै प्रभाव हुनेछैन। प्रयोगकर्ताको गाइडमा वर्णन गरिए अनुसार -ton, -Tsection=addr विकल्प प्रयोग गर्नुहोस्।
३७ संस्करण १
स्ट्याक मार्गदर्शन PRO कम्पाइलर इजाजतपत्रको साथ उपलब्ध छ, कम्पाइलरको स्ट्याक मार्गदर्शन सुविधा कार्यक्रम द्वारा प्रयोग गरिएको कुनै पनि स्ट्याकको अधिकतम गहिराइ अनुमान गर्न प्रयोग गर्न सकिन्छ। यसले कार्यक्रमको कल ग्राफ निर्माण र विश्लेषण गर्दछ, प्रत्येक प्रकार्यको स्ट्याक उपयोग निर्धारण गर्दछ, र रिपोर्ट उत्पादन गर्दछ, जसबाट कार्यक्रम द्वारा प्रयोग गरिएको स्ट्याकहरूको गहिराई अनुमान गर्न सकिन्छ। यो सुविधा -mchp-stack-usage आदेश-लाइन विकल्प मार्फत सक्षम गरिएको छ। स्ट्याक प्रयोगको सारांश कार्यान्वयन पछि छापिएको छ। विस्तृत स्ट्याक रिपोर्ट नक्सामा उपलब्ध छ file, जुन सामान्य तरिकामा अनुरोध गर्न सकिन्छ।
नयाँ उपकरण समर्थन समर्थन निम्न AVR भागहरूका लागि उपलब्ध छ: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DBDB64, AVR64DB28, AVR32DB28, AVR64, AVR32B32, AVR48B16, फिर्ता लिइएको यन्त्र समर्थन समर्थन निम्न AVR भागहरूको लागि अब उपलब्ध छैन: AVR28DA16, AVR32DA16 र, AVR48DAXNUMX।
३७ संस्करण १
कुनै पनि छैन।
३७ संस्करण १
डाटा प्रारम्भिकरण रोक्नको लागि नयाँ विकल्प नयाँ -mno-data-init ड्राइभर विकल्पले डाटाको प्रारम्भिककरण र bss खण्डहरू खाली गर्न रोक्छ। यसले do प्रतिलिपि डाटाको आउटपुटलाई दबाएर काम गर्दछ र एसेम्बलीमा स्पष्ट bss प्रतीकहरू गर्छ files, जसले बारीमा लिङ्करद्वारा ती दिनचर्याहरू समावेश गर्नबाट रोक्नेछ।
परिष्कृत अप्टिमाइजेसनहरू अनावश्यक फिर्ता निर्देशनहरू हटाउने, skip-if-bit-is निर्देशन पछि केही जम्पहरू हटाउने, र सुधारिएको प्रक्रियात्मक अमूर्तता र यो प्रक्रिया दोहोर्याउने क्षमता सहित धेरै अनुकूलन सुधारहरू गरिएका छन्। अतिरिक्त विकल्पहरू अब यी केही अनुकूलनहरू नियन्त्रण गर्न उपलब्ध छन्, विशेष गरी -f सेक्शन-एङ्करहरू, जसले स्थिर वस्तुहरूको पहुँचलाई एउटा प्रतीकको सापेक्ष प्रदर्शन गर्न अनुमति दिन्छ; -mpa-iterations=n, जसले 2 को पूर्वनिर्धारितबाट प्रक्रियात्मक अमूर्त पुनरावृत्तिहरूको संख्या परिवर्तन गर्न अनुमति दिन्छ; र, -mpa-callcost-shortcall, जसले अधिक आक्रामक प्रक्रियात्मक अमूर्त कार्य गर्दछ, यो आशामा कि लिङ्करले लामो कलहरू आराम गर्न सक्छ। यदि अन्तर्निहित धारणाहरू साकार भएन भने यो अन्तिम विकल्पले कोड साइज बढाउन सक्छ।
नयाँ उपकरण समर्थन समर्थन निम्न एभआर एभआर एभआर 16, AVR28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DB32, AVR32DB48, AVR64DB28, AVR64DB32, AVR64DDB48, AVR64DB64, AVR128DDB28, AVR128DB32, AVR128DB48, AVR128DB64, AVR5272DB5790, AVR5790DB5791, AVR5795DB6285, AVR6286DB6612 फिर्ता लिइएको यन्त्र समर्थन समर्थन अब निम्न AVR भागहरूका लागि उपलब्ध छैन: ATA6613, ATA6614, ATA6616N, ATA6617, ATA664251, ATAXNUMX, ATAXNUMX, ATAXNUMXC, ATAXNUMXC, ATAXNUMXQ, AXNUMXTA, AXNUMXTAXNUMXC, ATAXNUMXC, ATAXNUMXN।
३.२। संस्करण २.३९ (कार्यात्मक सुरक्षा रिलीज)
हेडर file कम्पाइलर बिल्ट-इनहरूको लागि कम्पाइलरले MISRA जस्ता भाषा विशिष्टताहरू अनुरूप हुन सक्छ भन्ने सुनिश्चित गर्न हेडर file, जुन स्वचालित रूपमा समावेश गरिएको छ , अद्यावधिक गरिएको छ। यो हेडरमा निर्मित सबै प्रकार्यहरूका लागि प्रोटोटाइपहरू समावेश छन्, जस्तै buildin_avr_nop ( ) र बिल्टइन avr delay_cycles ()। केही बिल्ट-इनहरू MISRA अनुरूप नहुन सक्छन्; यसलाई कम्पाइलर कमाण्ड लाइनमा defineXCSTRICT_MISRA थपेर मेटाउन सकिन्छ। बिल्ट-इनहरू र तिनीहरूको घोषणाहरू निश्चित-चौडाइ प्रकारहरू प्रयोग गर्न अद्यावधिक गरिएको छ।
३७ संस्करण १
नयाँ उपकरण समर्थन समर्थन निम्न AVR भागहरूको लागि उपलब्ध छ: ATTINY1624, ATTINY1626, र ATTINY1627।
उत्तम उत्तम फिट आवंटन कम्पाइलरमा उत्तम फिट आवंटनकर्ता (BFA) सुधार गरिएको छ ताकि खण्डहरूलाई राम्रो अनुकूलन अनुमति दिने क्रममा आवंटित गरियो। BFA ले अब नामित ठेगाना स्पेसहरूलाई समर्थन गर्दछ र डेटा प्रारम्भिकतालाई राम्रोसँग ह्यान्डल गर्दछ।
सुधारिएको प्रक्रियात्मक अमूर्तता प्रक्रियात्मक अमूर्त अनुकूलनहरू अब थप कोड अनुक्रमहरूमा प्रदर्शन गरिन्छ। यस अप्टिमाइजेसनले कोड साइज बढाएको हुनसक्ने अघिल्लो अवस्थाहरूलाई अप्टिमाइजेसन कोडलाई लिङ्करको फोहोर सङ्कलन प्रक्रियाको बारेमा सचेत बनाएर सम्बोधन गरिएको छ।
AVR एसेम्बलरको अनुपस्थिति AVR एसेम्बलर अब यस वितरणमा समावेश गरिएको छैन।
३.२। संस्करण २.३९ (कार्यात्मक सुरक्षा रिलीज)
कुनै पनि छैन।
३७ संस्करण १
कोड कभरेज यो विज्ञप्तिमा कोड कभरेज सुविधा समावेश छ जसले परियोजनाको स्रोत कोड कार्यान्वयन भएको हदसम्मको विश्लेषणलाई सहज बनाउँछ। यसलाई सक्षम गर्न विकल्प -mcodecov=ram प्रयोग गर्नुहोस्। तपाइँको हार्डवेयरमा कार्यक्रमको कार्यान्वयन पछि, कोड कभरेज जानकारी उपकरणमा मिलाइनेछ, र यो कोड कभरेज प्लगइन मार्फत MPLAB X IDE मा स्थानान्तरण र प्रदर्शन गर्न सकिन्छ। यो प्लगइन प्राप्त गर्न सकिन्छ जानकारीको लागि IDE कागजात हेर्नुहोस्। #pragma nocodecov कभरेज विश्लेषणबाट पछिका कार्यहरू बहिष्कार गर्न प्रयोग गर्न सकिन्छ। आदर्श रूपमा प्राग्मा को सुरुमा थपिनुपर्छ file त्यो सम्पूर्ण बहिष्कार गर्न file कभरेज विश्लेषणबाट। वैकल्पिक रूपमा, _attribute_ ( (nocodecov) ) कभरेज विश्लेषणबाट एक विशेष प्रकार्य बहिष्कार गर्न प्रयोग गर्न सकिन्छ।
उपकरण विवरण files नयाँ उपकरण file avr_chipinfo भनिन्छ। html कम्पाइलर वितरणको कागजात डाइरेक्टरीमा अवस्थित छ। यो file कम्पाइलर द्वारा समर्थित सबै उपकरणहरू सूचीबद्ध गर्दछ। यन्त्रको नाममा क्लिक गर्नुहोस्, र यसले त्यो यन्त्रको लागि सबै स्वीकार्य कन्फिगरेसन बिट सेटिङ/मान पीडा देखाउने पृष्ठ खोल्नेछ, पूर्वampलेस। प्रक्रियागत अमूर्तता
प्रक्रियात्मक एब्स्ट्रेक्शन अप्टिमाइजेसनहरू, जसले त्यस ब्लकको एक्स्ट्र्याक्टेड प्रतिलिपिमा कलहरूका साथ एसेम्बली कोडको सामान्य ब्लकहरू प्रतिस्थापन गर्दछ, कम्पाइलरमा थपिएको छ। यी एक अलग अनुप्रयोग द्वारा प्रदर्शन गरिन्छ, जुन स्तर 2, 3 वा s अनुकूलन चयन गर्दा कम्पाइलर द्वारा स्वचालित रूपमा आह्वान गरिन्छ। यी अप्टिमाइजेसनहरूले कोड साइज घटाउँछन्, तर तिनीहरूले कार्यान्वयन गति र कोड डिबगेबिलिटी कम गर्न सक्छन्। प्रक्रियात्मक अमूर्तता विकल्प -mno-pa प्रयोग गरेर उच्च अप्टिमाइजेसन स्तरहरूमा असक्षम गर्न सकिन्छ, वा कम अप्टिमाइजेसन स्तरहरूमा सक्षम गर्न सकिन्छ (तपाईंको इजाजतपत्रको अधीनमा) -mpa प्रयोग गरेर। यो वस्तुको लागि असक्षम गर्न सकिन्छ file -mno-pa-on- प्रयोग गर्दैfile=fileनाम, वा -mno-pa-on-function=function प्रयोग गरेर प्रकार्यको लागि अक्षम। तपाईंको स्रोत कोड भित्र, प्रकार्यको परिभाषाको साथ विशेषता ( (nopa) ) प्रयोग गरेर, वा nopa प्रयोग गरेर कार्यको लागि प्रक्रियात्मक एब्स्ट्र्याक्शन असक्षम गर्न सकिन्छ, जसले विशेषता ( (nopa, noinline)) मा विस्तार गर्दछ र यसरी कार्य इनलाइनिङलाई स्थान लिनबाट रोक्छ। र त्यहाँ इनलाइन कोडको अमूर्तता छ।
pragma मा लक बिट समर्थन #pragma कन्फिगरेसन अब AVR लक बिटहरू साथै अन्य कन्फिगरेसन बिटहरू निर्दिष्ट गर्न प्रयोग गर्न सकिन्छ। avr_chipinfo जाँच गर्नुहोस्। html file (माथि उल्लेख गरिएको) यो pragma संग प्रयोग गर्न सेटिङ/मान जोडीहरूको लागि। नयाँ उपकरण समर्थन समर्थन निम्न भागहरूको लागि उपलब्ध छ: AVR28DAl28, AVR64DAl28, AVR32DA 128, र AVR48DA 128।
३७ संस्करण १
तपाईंको पैसाको लागि थप बिटहरू यस कम्पाइलर र इजाजतपत्र प्रबन्धकको macOS संस्करण अब 64-बिट अनुप्रयोग हो। यसले सुनिश्चित गर्नेछ कि कम्पाइलरले macOS को हालैका संस्करणहरूमा चेतावनी बिना स्थापना र चल्नेछ।
कार्यक्रम मेमोरीमा कन्स्ट वस्तुहरू कम्पाइलरले अब कन्स्ट-योग्य वस्तुहरू प्रोग्राम फ्ल्याश मेमोरीमा राख्न सक्छ, यी RAM मा अवस्थित हुनुको सट्टा। कम्पाइलर परिमार्जन गरिएको छ ताकि कन्स टी-योग्य ग्लोबल डाटा प्रोग्राम फ्लैश मेमोरीमा भण्डारण गरिएको छ र यो डाटा प्रत्यक्ष र अप्रत्यक्ष रूपमा उपयुक्त प्रोग्राम-मेमोरी निर्देशनहरू प्रयोग गरेर पहुँच गर्न सकिन्छ। यो नयाँ सुविधा पूर्वनिर्धारित रूपमा सक्षम गरिएको छ तर -mno-const-data-in-progmem विकल्प प्रयोग गरेर असक्षम गर्न सकिन्छ। avrxmega3 र avrtiny आर्किटेक्चरहरूको लागि, यो सुविधा आवश्यक पर्दैन र सधैं असक्षम हुन्छ, किनभने प्रोग्राम मेमोरीलाई यी यन्त्रहरूको लागि डाटा ठेगाना स्पेसमा म्याप गरिएको हुन्छ।
यस कम्पाइलरको नि:शुल्क बिना इजाजतपत्र (नि:शुल्क) संस्करणहरूले अब स्तर 2 सम्म र समावेश गर्नको लागि अप्टिमाइजेसनहरूलाई अनुमति दिन्छ। यसले मानक इजाजतपत्र प्रयोग गरेर पहिले सम्भव भएको आउटपुटमा समान नभए पनि समान अनुमति दिन्छ।
स्वागत AVRASM2 2-बिट यन्त्रहरूको लागि AVRASM8 एसेम्बलर अब XC8 कम्पाइलर स्थापनाकर्तामा समावेश गरिएको छ। यो एसेम्बलर XC8 कम्पाइलर द्वारा प्रयोग गरिएको छैन, तर हातले लिखित असेंबली स्रोतमा आधारित परियोजनाहरूको लागि उपलब्ध छ।
नयाँ उपकरण समर्थन समर्थन निम्न भागहरूको लागि उपलब्ध छ: ATMEGA1608, ATMEGA1609, ATMEGA808, र ATMEGA809।

३७ संस्करण १
शीर्ष-स्तर ड्राइभर xc8-cc भनिने नयाँ ड्राइभर, अब अघिल्लो avr-gcc ड्राइभर र xc8 ड्राइभर भन्दा माथि बस्छ, र यसले लक्षित यन्त्रको चयनमा आधारित उपयुक्त कम्पाइलरलाई कल गर्न सक्छ। यो ड्राइभरले GCC-शैली विकल्पहरू स्वीकार गर्दछ, जुन कार्यान्वयन भइरहेको कम्पाइलरको लागि अनुवाद वा पास गरिन्छ। यो ड्राइभरले कुनै पनि AVR वा PIC लक्ष्यसँग प्रयोग गर्न मिल्दोजुल्दो शब्दार्थका साथ विकल्पहरूको समान सेटलाई अनुमति दिन्छ र यसैले कम्पाइलरलाई आह्वान गर्ने सिफारिस गरिएको तरिका हो। यदि आवश्यक भएमा, पुरानो avr-gcc ड्राइभरलाई पहिलेको कम्पाइलर संस्करणहरूमा स्वीकार गरिएको पुरानो शैली विकल्पहरू प्रयोग गरेर सिधै कल गर्न सकिन्छ।
साझा C इन्टरफेस यो कम्पाइलर अब MPLAB साझा C इन्टरफेस अनुरूप हुन सक्छ, स्रोत कोड सबै MPLAB XC कम्पाइलरहरूमा थप सजिलै पोर्ट गर्न अनुमति दिन्छ। -mext=cci विकल्पले यो सुविधाको लागि अनुरोध गर्दछ, धेरै भाषा विस्तारहरूको लागि वैकल्पिक वाक्य रचना सक्षम पार्दै।
नयाँ लाइब्रेरियन ड्राइभर नयाँ लाइब्रेरियन ड्राइभरलाई अघिल्लो PIC लाइब्रेरियन र AVR avr-ar लाइब्रेरियन भन्दा माथि राखिएको छ। यो ड्राइभरले GCC-Archiver-शैली विकल्पहरू स्वीकार गर्दछ, जुन कि त अनुवाद गरिएको छ वा लाइब्रेरियनलाई कार्यान्वयन गरिँदै छ। नयाँ ड्राइभरले कुनै पनि PIC वा AVR लाइब्रेरी सिर्जना गर्न वा हेरफेर गर्न प्रयोग गर्न समान शब्दार्थका साथ विकल्पहरूको समान सेटलाई अनुमति दिन्छ। file र यसरी लाइब्रेरियनलाई बोलाउने सिफारिस गरिएको तरिका हो। विरासत परियोजनाहरूका लागि आवश्यक भएमा, अघिल्लो कम्पाइलर संस्करणहरूमा स्वीकार गरिएको पुरानो-शैली विकल्पहरू प्रयोग गरेर अघिल्लो लाइब्रेरियनलाई सिधै कल गर्न सकिन्छ।

माइग्रेसन मुद्दाहरू

निम्न सुविधाहरू छन् जुन अब कम्पाइलरद्वारा फरक रूपमा ह्यान्डल गरिएको छ। यदि यो कम्पाइलर संस्करणमा कोड पोर्टिङ गर्दा यी परिवर्तनहरूलाई तपाइँको स्रोत कोडमा परिमार्जन आवश्यक हुन सक्छ। उपशीर्षकहरूमा संस्करण नम्बरले पछ्याउने परिवर्तनहरूलाई समर्थन गर्नको लागि पहिलो कम्पाइलर संस्करणलाई संकेत गर्दछ।

३७ संस्करण १
गलत fma प्रकार्यहरू हटाइयो (XC8-2913) C99 मानक पुस्तकालय fma 0 -पारिवारिक कार्यहरू ( ) ले एकल राउन्डिङमा असीम परिशुद्धताका साथ गुणन-जोड गणना गरेन, तर बरु प्रत्येक अपरेशनको साथ राउन्डिङ त्रुटिहरू जम्मा गर्यो। यी कार्यहरू आपूर्ति गरिएको पुस्तकालयबाट हटाइएका छन्।
३७ संस्करण १
कुनै पनि छैन।
३.२। संस्करण २.३९ (कार्यात्मक सुरक्षा रिलीज)
कुनै पनि छैन।
४.१। संस्करण 4.4 कुनै पनि छैन।
३७ संस्करण १
स्ट्रिङ-टु बेसहरूको ह्यान्डलिंग (XC8-2420) अन्य XC कम्पाइलरहरूसँग एकरूपता सुनिश्चित गर्न, XC8 string-to प्रकार्यहरू, जस्तै strtol () आदि, यदि निर्दिष्ट आधार 36 भन्दा ठूलो छ भने इनपुट स्ट्रिङ रूपान्तरण गर्ने प्रयास गर्दैन। र यसको सट्टा EINVAL मा त्रुटि सेट गर्नेछ। C मानकले यो आधार मान नाघिँदा प्रकार्यहरूको व्यवहार निर्दिष्ट गर्दैन।
अनुपयुक्त गति अनुकूलन स्तर ३ अप्टिमाइजेसन (-०३) चयन गर्दा प्रक्रियागत अमूर्त अप्टिमाइजेसनहरू सक्षम गरिँदै थिए। यी अप्टिमाइजेसनहरूले कोड गतिको खर्चमा कोड साइज घटाउँछन्, त्यसैले प्रदर्शन गर्नु हुँदैनथ्यो। यो अप्टिमाइजेसन स्तर प्रयोग गर्ने परियोजनाहरूले कोड साइज र कार्यान्वयन गतिमा भिन्नता देख्न सक्छ जब यो रिलीजको साथ बनाइन्छ।
पुस्तकालय कार्यक्षमता धेरै मानक C पुस्तकालय प्रकार्यहरूको लागि कोड अब माइक्रोचिपको एकीकृत मानक पुस्तकालयबाट आउँछ, जुन पहिलेको avr-libc पुस्तकालयले प्रदान गरेको तुलनामा केही परिस्थितिहरूमा फरक व्यवहार देखाउन सक्छ। पूर्वका लागिample, यो अब 1printf flt पुस्तकालयमा लिङ्क गर्न आवश्यक छैन (-1printf_flt विकल्प) ढाँचा खोल्न। I0 फ्लोट-ढाँचा निर्दिष्टकर्ताहरूको लागि समर्थन। स्मार्ट I0 माइक्रोचिप एकीकृत मानक पुस्तकालयका सुविधाहरूले यो विकल्पलाई अनावश्यक बनाउँछ। थप रूपमा, स्ट्रिङ र मेमोरी प्रकार्यहरू (जस्तै strcpy_P ( ) इत्यादि) को लागि _P प्रत्यय दिनचर्याहरूको प्रयोग जुन फ्ल्यासमा const स्ट्रिङहरूमा सञ्चालन हुन्छ अब आवश्यक छैन। Const-data-in-program-memory सुविधा सक्षम हुँदा मानक C दिनचर्याहरू (जस्तै strcpy ) ले यस्तो डेटासँग सही रूपमा काम गर्नेछ।

३७ संस्करण १
कुनै पनि छैन।
३७ संस्करण १
कुनै पनि छैन।
३७ संस्करण १
कुनै पनि छैन।
३.२। संस्करण २.३९ (कार्यात्मक सुरक्षा रिलीज)
कुनै पनि छैन।
३७ संस्करण १
DFP लेआउट परिवर्तन गरियो कम्पाइलरले अब DFPs (उपकरण परिवार प्याकहरू) द्वारा प्रयोग गरिएको फरक लेआउट मान्दछ। यसको मतलब यो हुनेछ कि पुरानो DFP ले यो रिलीजको साथ काम नगर्न सक्छ, र पुराना कम्पाइलरहरूले नवीनतम DFPs प्रयोग गर्न सक्षम हुनेछैनन्।
३.२। संस्करण २.३९ (कार्यात्मक सुरक्षा रिलीज)
कुनै पनि छैन।
३७ संस्करण १
कुनै पनि छैन
३७ संस्करण १
कार्यक्रम मेमोरीमा कन्स्ट वस्तुहरू ध्यान दिनुहोस् कि पूर्वनिर्धारित रूपमा, const-qualfiied वस्तुहरू कार्यक्रम मेमोरीमा राखिनेछ र पहुँच गरिनेछ (बनाइए अनुसार रंग)। यसले तपाइँको परियोजनाको आकार र कार्यान्वयन गतिलाई असर गर्नेछ, तर RAM को प्रयोग कम गर्नुपर्छ। यो सुविधा असक्षम गर्न सकिन्छ, यदि आवश्यक भएमा, -mnoconst-data-in-progmem विकल्प प्रयोग गरेर।
३७ संस्करण १
कन्फिगरेसन फ्यूजहरू उपकरण कन्फिगरेसन फ्यूजहरू अब कन्फिगरेसन प्राग्मा प्रयोग गरी प्रोग्राम गर्न सकिन्छ र त्यसपछि फ्यूज अवस्था निर्दिष्ट गर्न सेटिङ-भ्यालु जोडीहरू, जस्तै
#pragma कन्फिगरेसन WDTON = SET
#pragma कन्फिगरेसन BODLEVEL = BODLEVEL_4V3
निरपेक्ष वस्तु र कार्यहरू वस्तु र प्रकार्यहरू अब सीसीआई (ठेगाना) निर्दिष्टकर्ता प्रयोग गरेर मेमोरीमा निर्दिष्ट ठेगानामा राख्न सकिन्छ, पूर्वका लागिampLe:
#समावेश गर्नुहोस्
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
यो निर्दिष्टकर्ताको तर्क हुनुपर्छ एउटा स्थिरता जसले पहिलो बाइट वा निर्देशन राखिने ठेगानालाई प्रतिनिधित्व गर्दछ। RAM ठेगानाहरू 0x800000 को अफसेट प्रयोग गरेर संकेत गरिएको छ। CCI लाई यो सुविधा प्रयोग गर्न सक्षम पार्नुहोस्।
नयाँ अवरोध प्रकार्य वाक्य रचना कम्पाइलरले अब CCI _interrupt (num) निर्दिष्टकर्ता स्वीकार गर्दछ कि C प्रकार्यहरू अवरोध ह्यान्डलरहरू हुन्। निर्दिष्टकर्ताले एक अवरोध नम्बर लिन्छ, उदाहरणका लागिampLe:
#समावेश गर्नुहोस्
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }

स्थिर मुद्दाहरू

निम्न सुधारहरू छन् जुन कम्पाइलरमा गरिएका छन्। यसले उत्पन्न कोडमा बगहरू समाधान गर्न सक्छ वा प्रयोगकर्ताको गाइडद्वारा अभिप्रेत वा निर्दिष्ट गरिएकोमा कम्पाइलरको सञ्चालनलाई परिवर्तन गर्न सक्छ। उपशीर्षकहरूमा संस्करण नम्बरले पछ्याउने समस्याहरूको लागि फिक्सहरू समावेश गर्न पहिलो कम्पाइलर संस्करणलाई संकेत गर्दछ। शीर्षकमा कोष्ठक लगाइएको लेबल (हरू) ट्र्याकिङ डेटाबेसमा मुद्दाको पहिचान हो। यदि तपाईंलाई समर्थनलाई सम्पर्क गर्न आवश्यक छ भने यी उपयोगी हुन सक्छन्।
नोट गर्नुहोस् कि यन्त्रसँग सम्बन्धित यन्त्र परिवार प्याक (DFP) मा केही यन्त्र-विशिष्ट समस्याहरू सच्याइएका छन्। DFP मा गरिएका परिवर्तनहरू र नवीनतम प्याकहरू डाउनलोड गर्नका लागि MPLAB प्याक प्रबन्धक हेर्नुहोस्।

३७ संस्करण १
Ventura (XC8-3088) Dongles मा Dongle मुद्दाहरू कम्पाइलरलाई इजाजतपत्र दिनको लागि प्रयोग गरिएको macOS Ventura होस्टहरूमा राम्रोसँग पढ्न नसकेको हुन सक्छ, परिणामस्वरूप इजाजतपत्र असफल भयो। XCLM इजाजतपत्र प्रबन्धकमा परिवर्तनहरूले यो समस्यालाई सच्याउँछ।
मेमोरी विनियोजनको गलत संकेत (XC8-2925) मानक पुस्तकालय मेमोरी व्यवस्थापन प्रकार्यहरू (malloc () et al) प्रयोग गरेर मेमोरीको SIZE_MAX बाइटहरू (वा यो नजिकको मान) आवंटित गर्ने प्रयास गलत रूपमा सफल भयो। यसले साधारण गतिशील मेमोरी आवंटन कार्यान्वयन प्रयोग गर्दा अनुरोध गरिएको ब्लकको अतिरिक्त अतिरिक्त बाइटहरू आवश्यक थियो भन्ने कुरालाई ध्यानमा राखेन। एउटा NULL सूचक अब फर्काइनेछ र त्यस्ता परिस्थितिहरूमा 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 फर्काउनु पर्छ र स्ट्रिङको “exx” भागमा इंगित गर्न ep सेट गर्नुपर्छ, जबकि प्रकार्यले सही मान फिर्ता गरिरहेको थियो तर स्ट्रिङको “xx” भागमा इंगित गर्न ep सेट गर्दैछ। ।

३७ संस्करण १
धेरै आराम (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 मा गरिएका परिवर्तनहरूले रनटाइम स्टार्टअप कोडलाई यो दर्तामा सही रूपमा लेख्न अनुमति दिनेछ।
जोगिनको लागि DFP परिवर्तनहरू फ्लैश म्यापिङ (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 () पुस्तकालय प्रकार्यहरू प्रयोग गर्ने प्रयास गर्दा एउटा अपरिभाषित सन्दर्भ वर्णन गर्दा लिङ्क त्रुटि भयो। सन्दर्भ गरिएको छुटेको प्रकार्य अब कम्पाइलर वितरणमा समावेश गरिएको छ।
Nopa (XC,8-2833) सँग त्रुटिहरू बनाउनुहोस् asm ( ) को प्रयोग गरेर निर्दिष्ट गरिएको एसेम्बलर नाम भएको प्रकार्यसँग nopa विशेषता प्रयोग गर्दा एसेम्बलरबाट त्रुटि सन्देशहरू ट्रिगर भयो। यो संयोजन सम्भव छैन।
पोइन्टर आर्गुमेन्टहरू (XC8-2755, XC8-2731) सँग विभिन्न प्रकार्य विफलता कन्स्ट-डेटा-इन-प्रोग्मेम सुविधा सक्षम हुँदा भ्यारीएबल आर्गुमेन्ट सूचीमा 24-बिट (मेमएक्स प्रकार) पोइन्टर्स पास हुने आर्गुमेन्टहरूको चर संख्या भएका कार्यहरूले अपेक्षा गर्दछ। तर्कहरू जुन डेटा मेमोरीको लागि संकेतकहरू थिए 16-बिट वस्तुहरूको रूपमा पास गरिँदै थियो, तिनीहरू अन्ततः पढ्दा कोड विफलताको कारण। जब constdata-in-progmem सुविधा सक्षम हुन्छ, सबै 16-बिट पोइन्टर्स आर्गुमेन्टहरू अब 24-बिट पोइन्टरहरूमा रूपान्तरण हुन्छन्।
strtoxxx पुस्तकालय प्रकार्यहरू असफल (XC8-2620) जब const-data-in-progmem सुविधा सक्षम पारिएको थियो, कार्यक्रम मेमोरीमा नभएको स्रोत स्ट्रिङ तर्कहरूको लागि strtoxxx पुस्तकालय प्रकार्यहरूमा endptr प्यारामिटर ठीकसँग अद्यावधिक गरिएको थिएन।
अवैध कास्टहरूका लागि अलर्टहरू (XC8-2612) कम्पाइलरले अब त्रुटि जारी गर्नेछ यदि const-in-progmem सुविधा सक्षम पारिएको छ र स्ट्रिङ शाब्दिकको ठेगाना स्पष्ट रूपमा डेटा ठेगाना स्पेसमा कास्ट गरिएको छ (कन्स्ट क्वालिफायर छोड्दै), पूर्वका लागि।ample, (uint 8_t *) "हेलो वर्ल्ड!"। एक चेतावनी मुद्दा हो यदि ठेगाना अमान्य हुन सक्छ जब const डेटा सूचक स्पष्ट रूपमा डाटा ठेगाना ठाउँमा कास्ट हुन्छ।
अनइनिशियलाइज्ड कन्स्ट वस्तुहरूको प्लेसमेन्ट (XC8-2408) Uninitialized const र const वाष्पशील वस्तुहरू यन्त्रहरूमा प्रोग्राम मेमोरीमा राखिएको थिएन जसले डेटा ठेगाना स्पेसमा तिनीहरूको प्रोग्राम मेमोरीको सबै वा अंश नक्सा गर्दछ। यी उपकरणहरूका लागि, त्यस्ता वस्तुहरू अब प्रोग्राम मेमोरीमा राखिएका छन्, तिनीहरूको सञ्चालन अन्य उपकरणहरूसँग सुसंगत बनाउँदै।

३.२। संस्करण २.३९ (कार्यात्मक सुरक्षा रिलीज)
कुनै पनि छैन।
३७ संस्करण १
ढिलाइ गर्दा त्रुटि (XC8-2774) पूर्वनिर्धारित नि: शुल्क मोड अप्टिमाइजेसनहरूमा साना परिवर्तनहरूले ढिलाइ बिल्ट-इन प्रकार्यहरूमा अपरेन्ड अभिव्यक्तिहरूको निरन्तर फोल्ड गर्न रोक्यो, जसको परिणामस्वरूप तिनीहरूलाई गैर-अचलको रूपमा व्यवहार गरिन्छ र त्रुटि ट्रिगर हुन्छ: बिल्टइन avr delay_cycles ले कम्पाइल समय पूर्णांक स्थिरताको अपेक्षा गर्दछ।
३७ संस्करण १
_at (XC8-2653) को प्रयोग गरेर निरन्तर आवंटन एउटै नामको खण्डमा र _at ( ) प्रयोग गरेर धेरै वस्तुहरू स्थानहरूको निरन्तर आवंटनले सही रूपमा काम गरेन। पूर्वका लागिampLe:
const char arr1[] __attribute__((section(“.mysec”))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __विशेषता__((खण्ड(“.mysec”))) = {0xEF, 0xFE};
arr2 पछि तुरुन्तै arr1 राख्नु पर्छ।
खण्ड सुरु ठेगाना निर्दिष्ट गर्दै (XC8-2650) द -W1, -section-start विकल्प चुपचाप मनोनित सुरु ठेगानामा खण्डहरू राख्न असफल भयो। यो मुद्दा कुनै पनि अनुकूलन-नाम खण्डहरूको लागि तय गरिएको छ; यद्यपि, यसले कुनै पनि मानक खण्डहरूमा काम गर्दैन, जस्तै। पाठ वा। bss, जसलाई -W1, -T विकल्प प्रयोग गरेर राखिएको हुनुपर्छ।
आराम गर्दा लिङ्कर क्र्यास हुन्छ (XC8-2647) जब -mrelax अप्टिमाइजेसन सक्षम पारिएको थियो र त्यहाँ उपलब्ध मेमोरीमा फिट नहुने कोड वा डेटा खण्डहरू थिए, लिङ्कर क्र्यास भयो। अब, यस्तो परिस्थितिमा, त्रुटि सन्देशहरू सट्टा जारी गरिन्छ।

नो नो-फलिंग-ब्याक (XC8-2646) द -nofallback विकल्प सही रूपमा लागू गरिएको थिएन, न त कागजात। यो अब कम्पाइलर लाइसेन्स नभएको खण्डमा कम अप्टिमाइजेसन सेटिङमा फर्किने छैन भन्ने सुनिश्चित गर्न चयन गर्न सकिन्छ, र यसको सट्टा त्रुटि जारी गर्नेछ।

अनुपयुक्त गति अनुकूलन (X03-2637) स्तर ३ अप्टिमाइजेसन (-०३) चयन गर्दा प्रक्रियागत अमूर्त अप्टिमाइजेसनहरू सक्षम गरिँदै थिए। यी अप्टिमाइजेसनहरूले कोड गतिको खर्चमा कोड साइज घटाउँछन्, त्यसैले प्रदर्शन गर्नु हुँदैनथ्यो।
खराब EEPROM पहुँच (XC8-2629) द eeprom_read_block दिनचर्याले Xmega यन्त्रहरूमा ठीकसँग काम गरेन जब -mconst-data-in-progmem विकल्प सक्षम पारिएको थियो (जुन पूर्वनिर्धारित अवस्था हो), परिणामस्वरूप EEPROM मेमोरी सही तरिकाले पढिएको छैन।
अवैध मेमोरी आवंटन (XC8-2593, XC8-2651) जब -Ttext वा -Tdata लिंकर विकल्प (उदाहरणका लागिample एक -vl ड्राइभर विकल्प प्रयोग गरेर पारित) निर्दिष्ट गरिएको छ, सम्बन्धित पाठ/डेटा क्षेत्र मूल अद्यावधिक गरिएको थियो; यद्यपि, अन्तिम ठेगाना तदनुसार समायोजन गरिएको थिएन, जसले क्षेत्रलाई लक्षित यन्त्रको मेमोरी दायरा नाघेको हुन सक्छ।
ओभर-एट्रिब्युटेड प्रकार्यको साथ क्र्यास (XC8-2580) कम्पाइलर क्र्यास भयो यदि कुनै प्रकार्य अवरोध, सिग्नल वा nmi विशेषताहरू, उदाहरण ( ( सिग्नल , अवरोध ) ) को प्रयोग गरेर घोषणा गरिएको थियो।
अमान्य ATtiny अवरोध कोड (XC8-2465) ATtiny उपकरणहरूको लागि निर्माण गर्दा र अप्टिमाइजेसनहरू असक्षम पारिएको थियो (-00), अवरोध प्रकार्यहरूले दायरा एसेम्बलर सन्देशहरू बाहिरको अपरेन्ड ट्रिगर गरेको हुन सक्छ।
विकल्पहरू पारित गरिएन (XC8-2452) धेरै, अल्पविराम-विभाजित लिङ्कर विकल्पहरूसँग विकल्प प्रयोग गर्दा, सबै लिङ्कर विकल्पहरू लिङ्करलाई पास गरिएन।
त्रुटि अप्रत्यक्ष रूपमा कार्यक्रम मेमोरी पढ्ने (X03-2450) केही उदाहरणहरूमा, कम्पाइलरले एउटा आन्तरिक त्रुटि (अपरिचित insn) उत्पादन गर्यो जब एक सूचकबाट प्रोग्राम मेमोरीमा दुई बाइट मान पढ्दा।
३७ संस्करण १
को दोस्रो पहुँच पुस्तकालय असफल (XC8-2381) Xc8-ar को Windows संस्करण आह्वान गर्दै। .exe पुस्तकालय अभिलेख एक अवस्थित पुस्तकालय अभिलेख पहुँच गर्न दोस्रो पटक त्रुटि सन्देश पुन: नामकरण गर्न असक्षम भएको हुन सक्छ।
३७ संस्करण १
अस्पष्ट कम्पाइलर असफलता (XC8-2367) विन्डोज प्लेटफर्महरूमा चल्दा प्रणालीको अस्थायी डाइरेक्टरीमा डट '।' समावेश भएको पथमा सेट गरिएको थियो। वर्ण, कम्पाइलर कार्यान्वयन गर्न असफल भएको हुन सक्छ।
३७ संस्करण १
रूपरेखा (XC8-2299) पछि ग्लोबल लेबलहरू गलत ठाउँमा हातले लेखिएको असेंबली कोड जसले विश्वव्यापी लेबलहरूलाई एसेम्बली अनुक्रमहरू भित्र राख्छ जुन प्रक्रियात्मक एब्स्ट्र्याक्शनद्वारा फ्याक्टर गरिएको हुन्छ सही रूपमा पुनर्स्थापित गरिएको हुन सक्छ।
आरामदायी दुर्घटना (XC8-2287) -mrelax विकल्प प्रयोग गर्दा टेल जम्प रिलेक्सेसन अप्टिमाइजेसनले खण्डको अन्त्यमा नभएको ret निर्देशन हटाउने प्रयास गर्दा लिङ्कर क्र्यास भएको हुन सक्छ।
मानको रूपमा लेबलहरू अनुकूलन गर्दा क्र्यास (XC8-2282) "मानहरूको रूपमा लेबलहरू" GNU C भाषा विस्तार प्रयोग गर्ने कोडले प्रक्रियात्मक एब्स्ट्र्याकसन अप्टिमाइजेसनहरू क्र्यास भएको हुन सक्छ, आउटलाइन गरिएको VMA दायरा फिक्सअप त्रुटिको साथ।
यस्तो छैन const (XC8-2271) st rstr ( ) र बाट अन्य प्रकार्यहरूका लागि प्रोटोटाइपहरू -mconst-data-inprogmem सुविधा असक्षम हुँदा फर्काइएको स्ट्रिङ पोइन्टर्समा गैर-मानक कन्स्ट क्वालिफायर निर्दिष्ट नगर्नुहोस्। नोट गर्नुहोस् कि avrxmega3 र avrtiny उपकरणहरूसँग, यो सुविधा स्थायी रूपमा सक्षम छ।
हराएका प्रारम्भिकहरू (XC8-2269) भन्दा बढी हुँदा अनुवाद इकाईमा एउटा भेरिएबल खण्डमा राखिएको थियो (_section वा _attribute_ ( (section) ) प्रयोग गरेर), र पहिलो यस्तो चर शून्य प्रारम्भिक थियो वा इनिसियलाइजर थिएन, उही अनुवाद इकाईमा अन्य चरहरूका लागि प्रारम्भिकहरू राखिएको थियो। सोही खण्डमा हराएका थिए ।
३.२। संस्करण २.३९ (कार्यात्मक सुरक्षा रिलीज)
कुनै पनि छैन।
३७ संस्करण १
लामो आदेशहरूको साथ त्रुटि (XC8-1983) AVR लक्ष्य प्रयोग गर्दा, कम्पाइलर a सँग रोकिएको हुन सक्छ file त्रुटि फेला परेन, यदि आदेश रेखा अत्यन्त ठूलो थियो र विशेष क्यारेक्टरहरू जस्तै उद्धरणहरू, ब्याकस्ल्याशहरू, आदि समावेश गर्दछ।
असाइन नगरिएको rodata खण्ड (XC8-1920) AVR लिङ्करले avrxmega3 र avrtiny आर्किटेक्चरहरूको लागि निर्माण गर्दा अनुकूलन rodata खण्डहरूको लागि मेमोरी असाइन गर्न असफल भयो, सम्भावित रूपमा मेमोरी ओभरल्याप त्रुटिहरू उत्पादन गर्दै।
३७ संस्करण १ (कार्यात्मक सुरक्षा रिलीज)
कुनै पनि छैन।
३७ संस्करण १
स्थानान्तरण विफलताहरू (XC8-1891) उत्तम फिट आवंटकले लिङ्कर विश्राम पछि खण्डहरू बीचमा मेमोरी 'प्वाल' छोड्दै थियो। मेमोरी टुक्रा पार्नु बाहेक, यसले पीसी-रिलेटिभ जम्प वा कलहरू दायरा बाहिर हुने सम्बन्धमा लिंकर रिलोकेशन विफलता हुने सम्भावना बढाएको छ।
विश्राम (XC8-1889) द्वारा रूपान्तरित नभएका निर्देशनहरू जम्प वा कल निर्देशनहरूका लागि भएन जसको लक्ष्यहरू आराम गरेमा पुग्न सकिन्छ।
हराइरहेको छ कार्यक्षमता (XC8E-388) बाट धेरै परिभाषाहरू , जस्तै clock_div_t र clock_prescale सेट () , ATmega324PB, ATmega328PB, ATtiny441, र ATtiny841 सहित यन्त्रहरूका लागि परिभाषित गरिएको थिएन।
म्याक्रोहरू छुटेका छन् प्रिप्रोसेसर म्याक्रोहरू _XC8_MODE_, _XC8_VERS ION, _XC, र _XC8 स्वचालित रूपमा कम्पाइलरद्वारा परिभाषित गरिएको थिएन। यी अब उपलब्ध छन्।
३७ संस्करण १
आन्तरिक कम्पाइलर त्रुटि (XC8-1822) Windows अन्तर्गत निर्माण गर्दा, कोड अनुकूलन गर्दा आन्तरिक कम्पाइलर त्रुटि उत्पन्न भएको हुन सक्छ।
RAM ओभरफ्लो पत्ता लगाइएको छैन (XC8-1800, XC8-1796) उपलब्ध RAM भन्दा बढी भएका कार्यक्रमहरू केही परिस्थितिहरूमा कम्पाइलरले पत्ता लगाएनन्, रनटाइम कोड विफलताको परिणामस्वरूप।
फ्ल्यास मेमोरी (XC8-1792) avrxmega3 र avrtiny यन्त्रहरूका लागि, फ्ल्यास मेमोरीका भागहरू MPLAB X द्वारा प्रोग्राम नगरी छोडिएको हुन सक्छ। IDE।
मुख्य कार्यान्वयन गर्न असफल (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 चरहरू प्रयोग गरेर वा कन्फिग प्राग्मा प्रयोग गरेर फ्यूजहरू परिभाषित गर्दा मुख्य () मा पुग्नु अघि रनटाइम स्टार्टअप कोडमा गलत डाटा प्रारम्भिकरण र/वा कार्यक्रम कार्यान्वयन लक भएको हुन सक्छ।
साना यन्त्रहरूसँग फ्यूज त्रुटि (XC8-1778, XC8-1742) attiny4/5/9/ 10/20/40 यन्त्रहरूसँग तिनीहरूको हेडरमा निर्दिष्ट गरिएको गलत फ्यूज लम्बाइ थियो। files जसले फ्यूजहरू परिभाषित गर्ने कोड निर्माण गर्ने प्रयास गर्दा लिङ्कर त्रुटिहरू निम्त्याउँछ।
विभाजन गल्ती (XC8-1777) एक रुकावट विभाजन गल्ती सच्याइएको छ।
एसेम्बलर दुर्घटना (XC8-1761) Ubuntu 18 अन्तर्गत कम्पाइलर चलाउँदा avr-as एसेम्बलर क्र्यास भएको हुन सक्छ।
वस्तुहरू खाली छैनन् (XC8-1752) सुरु नगरिएको स्थिर भण्डारण अवधि वस्तुहरू रनटाइम स्टार्टअप कोड द्वारा खाली नगरिएको हुन सक्छ।
विवादित उपकरण विशिष्टतालाई बेवास्ता गरियो (XC8-1749) कम्पाइलरले त्रुटि उत्पन्न गर्दैन जब धेरै यन्त्र विशिष्टता विकल्पहरू प्रयोग गरिन र विभिन्न यन्त्रहरूलाई संकेत गरेको थियो।
हिप द्वारा मेमोरी भ्रष्टाचार (XC8-1748) द _heap_start प्रतीक गलत तरिकाले सेट गरिएको थियो, जसको परिणामस्वरूप सामान्य चरहरू हिपद्वारा भ्रष्ट हुने सम्भावना हुन्छ।
लिङ्कर स्थानान्तरण त्रुटि (XC8-1739) कोडमा rjmp वा rcal 4k बाइट टाढा लक्ष्य भएको हुँदा लिङ्कर स्थानान्तरण त्रुटि उत्सर्जन भएको हुन सक्छ।
३७ संस्करण १
कुनै पनि छैन।

ज्ञात मुद्दाहरू

कम्पाइलरको सञ्चालनमा निम्न सीमितताहरू छन्। यी सामान्य कोडिङ प्रतिबन्धहरू, वा प्रयोगकर्ताको म्यानुअलमा समावेश जानकारीबाट विचलनहरू हुन सक्छन्। शीर्षकमा कोष्ठक लगाइएको लेबल (हरू) ट्र्याकिङ डेटाबेसमा मुद्दाको पहिचान हो। यदि तपाईंलाई सहयोगलाई सम्पर्क गर्न आवश्यक छ भने यो लाभदायक हुन सक्छ। ती वस्तुहरू जसमा लेबलहरू छैनन् तिनीहरू सीमितताहरू हुन् जसले मोडी अपरेन्डीको वर्णन गर्दछ र जुन स्थायी रूपमा प्रभावमा रहने सम्भावना हुन्छ।
६.१। MPLAB X IDE एकीकरण
MPLAB IDE एकीकरण यदि कम्पाइलर MPLAB IDE बाट प्रयोग गर्ने हो भने, तपाईंले कम्पाइलर स्थापना गर्नु अघि MPLAB IDE स्थापना गर्नुपर्छ।
६.२। कोड जेनेरेसन
Segfault with section-anchors option (XC8-3045) प्रोग्राम जसले चर आर्गुमेन्ट सूचिहरूसँग प्रकार्यहरू परिभाषित गर्दछ र जसले -fsection-anchors विकल्प प्रयोग गर्दछ आन्तरिक कम्पाइलर त्रुटि ट्रिगर भएको हुन सक्छ: विभाजन त्रुटि।
डिबग जानकारी सिंक बाहिर (XC8-2948) जब लिङ्कर विश्राम अप्टिमाइजेसनले निर्देशनहरू कम गर्छ (पूर्वको लागिampले कल टु आरकल निर्देशनहरू), खण्डमा एकभन्दा बढी संकुचन सञ्चालन हुँदा म्यापिङहरू सम्बोधन गर्ने स्रोत रेखा सिङ्कमा नरहन सक्छ।
तल पूर्व माample, त्यहाँ दुईवटा कलहरू foo छन् जुन सापेक्ष कलहरूमा आराम हुन्छ।
PA मेमोरी आवंटन विफलता (XC8-2881) प्रक्रियात्मक अमूर्त अप्टिमाइजरहरू प्रयोग गर्दा, लिङ्करले मेमोरी आवंटन त्रुटिहरू रिपोर्ट गर्न सक्छ जब कोड साइज उपकरणमा उपलब्ध प्रोग्राम मेमोरीको मात्राको नजिक हुन्छ, यद्यपि प्रोग्राम उपलब्ध ठाउँमा फिट हुन सक्षम हुनुपर्छ।
त्यति स्मार्ट Smart-I0 (XC8-2872) छैन कम्पाइलरको smart-io सुविधाले snprint f प्रकार्यको लागि मान्य तर सब-इष्टतम कोड उत्पन्न गर्नेछ यदि const-data-in-progmem सुविधा असक्षम गरिएको छ वा यदि यन्त्रले यसको सबै फ्ल्यास डेटा मेमोरीमा म्याप गरेको छ।
अझ कम स्मार्ट Smart-I0 (XC8-2869) कम्पाइलरको smart-io सुविधाले मान्य तर suboptimal कोड उत्पन्न गर्नेछ जब -flto र -fno-builtin विकल्पहरू दुवै प्रयोग गरिन्छ।
सबोप्टिमल रिड-ओन्ली डाटा प्लेसमेन्ट (XC8-2849) लिङ्कर हाल APPCODE र APPDATA मेमोरी खण्डहरू बारे सचेत छैन, न त मेमोरी नक्शामा [No-Read-While-Write विभाजनहरू। नतिजाको रूपमा, त्यहाँ एक सानो मौका छ कि लिङ्करले मेमोरीको अनुपयुक्त क्षेत्रमा पढ्न-मात्र डेटा आवंटित गर्न सक्छ। यदि const-data-in-progmem सुविधा सक्षम पारिएको छ भने, विशेष गरी यदि const-data-in-config-mapped-progmem सुविधा पनि सक्षम पारिएको छ भने गलत स्थानमा हुने डाटाको सम्भावना बढ्छ। यदि आवश्यक भएमा यी सुविधाहरू असक्षम गर्न सकिन्छ।
वस्तु file प्रशोधन आदेश (XC8-2863) वस्तुहरूको क्रम files लाई लिङ्कर द्वारा प्रशोधन गरिनेछ प्रक्रियात्मक अमूर्त अप्टिमाइजेसन (-mpa विकल्प) को प्रयोगको आधारमा फरक हुन सक्छ। यसले कोडलाई मात्र असर गर्छ जसले धेरै मोड्युलहरूमा कमजोर प्रकार्यहरू परिभाषित गर्दछ।
निरपेक्ष (XC8-2777) सँग लिङ्कर त्रुटि जब RAM को सुरुमा कुनै ठेगानामा वस्तु निरपेक्ष बनाइएको छ र सुरु नगरिएका वस्तुहरू पनि परिभाषित गरिएको छ, लिङ्कर त्रुटि ट्रिगर हुन सक्छ।
छोटो वेक-अप आईडीहरू (XC8-2775) ATA5700/2 यन्त्रहरूका लागि, PHIDO/1 रेजिस्टरहरूलाई 16 बिट चौडाइको सट्टा 32 बिट चौडाइको रूपमा मात्र परिभाषित गरिएको छ।
प्रतीक कल गर्दा लिङ्कर क्र्यास (XC8-2758) स्रोत कोडले -cc., -de f sym linker विकल्प प्रयोग गरी परिभाषित गरिएको प्रतीकलाई कल गर्दा -mrelax चालक विकल्प प्रयोग गरिएमा लिङ्कर क्र्यास हुन सक्छ।
गलत प्रारम्भिकरण (XC8-2679) त्यहाँ केही विश्वव्यापी/स्थिर बाइट-आकारका वस्तुहरूको प्रारम्भिक मानहरू डेटा मेमोरीमा राखिएको र रनटाइममा चरहरू पहुँच गरिने ठाउँहरू बीचको भिन्नता हो।
खराब अप्रत्यक्ष प्रकार्य कलहरू (XC8-2628) केहि उदाहरणहरूमा, संरचनाको भागको रूपमा भण्डारण गरिएको प्रकार्य सूचक मार्फत गरिएको प्रकार्य कलहरू असफल हुन सक्छ।
हेक्साडेसिमल फ्लोट्सका लागि strtof ले शून्य फर्काउँछ (XC8-2626) पुस्तकालय प्रकार्यहरू strtof et al र scanf ( ) et al, सधैं हेक्साडेसिमल फ्लोटिंग-पोइन्ट नम्बरलाई रूपान्तरण गर्दछ जसले शून्यमा घातांक निर्दिष्ट गर्दैन। पूर्वका लागिampLe:
strtof ("Oxl", &endptr);
मान 0 फर्काउनेछ, I होइन।
गलत स्ट्याक सल्लाहकार सन्देश (XC8-2542, XC8-2541) केहि उदाहरणहरूमा, प्रयोग गरिएको पुनरावृत्ति वा अनिश्चित स्ट्याक सम्बन्धी स्ट्याक सल्लाहकार चेतावनी (सम्भवतः alloca() को प्रयोग मार्फत) उत्सर्जित हुँदैन।
डुप्लिकेट अवरोध कोड (XC8-2421) को साथ विफलता जहाँ एक भन्दा बढी अवरोध प्रकार्य एउटै शरीर हुन्छ, कम्पाइलरसँग एउटा अवरोध प्रकार्यको लागि अर्कोलाई कल गर्न आउटपुट हुन सक्छ। यसले गर्दा सबै कल-क्लोबर्ड रेजिस्टरहरू अनावश्यक रूपमा बचत हुनेछन्, र हालको अवरोध ह्यान्डलरको एपिलग चल्नु अघि नै अवरोधहरू सक्षम हुनेछन्, जसले कोड विफलता निम्त्याउन सक्छ।
अवैध DFP पथ (XC8-2376) सँग खराब आउटपुट यदि कम्पाइलर अवैध DFP पथ र 'विशिष्ट' संग बोलाइएको छ file चयन गरिएको यन्त्रको लागि अवस्थित छ, कम्पाइलरले हराएको उपकरण परिवार प्याक रिपोर्ट गर्दैन र यसको सट्टा 'विशेष' चयन गर्दैछ। file, जसले त्यसपछि अवैध आउटपुट निम्त्याउन सक्छ। 'विशिष्ट' files वितरित DFPs सँग अप टु डेट नहुन सक्छ र आन्तरिक कम्पाइलर परीक्षणको साथ प्रयोगको लागि मात्र हो।
मेमोरी ओभरल्याप पत्ता लागेन (XC8-1966) कम्पाइलरले ठेगानामा निरपेक्ष बनाइएको वस्तुहरूको मेमोरी ओभरल्याप (_at ( ) मार्फत) र खण्ड ( ) निर्दिष्टकर्ता प्रयोग गरेर अन्य वस्तुहरू पत्ता लगाएको छैन र जुन एउटै ठेगानामा लिङ्क गरिएको छ।
पुस्तकालय प्रकार्यहरू र _memx (XC8-1763) को साथ विफलता memx ठेगाना स्पेस मा तर्क संग libgcc फ्लोट प्रकार्यहरू असफल हुन सक्छ। नोट गर्नुहोस् कि पुस्तकालय दिनचर्याहरू केही C अपरेटरहरूबाट बोलाइन्छ, त्यसैले, उदाहरणका लागिample, निम्न कोड प्रभावित छ:
regFloatVar > memxFloatVar फर्काउनुहोस्;
सीमित libgcc कार्यान्वयन (AVRTC-731) ATTiny4/5/9/10/20/40 उत्पादनहरूको लागि, libgcc मा मानक C / गणित पुस्तकालय कार्यान्वयन धेरै सीमित छ वा अवस्थित छैन।
कार्यक्रम मेमोरी सीमितता (AVRTC-732) 128 kb भन्दा माथिको कार्यक्रम मेमोरी छविहरू टूलचेन द्वारा समर्थित छन्; यद्यपि, त्यहाँ -mre lax विकल्प प्रयोग गर्दा आवश्यक प्रकार्य स्टबहरू उत्पन्न गर्नुको सट्टा आराम बिना र उपयोगी त्रुटि सन्देश बिना लिङ्कर रद्द गर्ने ज्ञात उदाहरणहरू छन्।
नाम स्पेस सीमाहरू (AVRTC-733) नाम दिइएको ठेगाना स्पेसहरू टूलचेनद्वारा समर्थित छन्, प्रयोगकर्ताको गाइड खण्ड विशेष प्रकार योग्यताहरूमा उल्लेख गरिएका सीमितताहरूको अधीनमा।
समय क्षेत्रहरू पुस्तकालय प्रकार्यहरूले GMT मान्छन् र स्थानीय समय क्षेत्रहरूलाई समर्थन गर्दैन, यसरी स्थानीय समय ( ) ले gmtime ( ) को रूपमा उही समय फर्काउनेछ।ample।

file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm

कागजातहरू / स्रोतहरू

MICROCHIP MPLAB XC8 C कम्पाइलर विकास सफ्टवेयर [pdf] मालिकको म्यानुअल
MPLAB XC8 C, MPLAB XC8 C कम्पाइलर विकास सफ्टवेयर, कम्पाइलर विकास सफ्टवेयर, विकास सफ्टवेयर, सफ्टवेयर

सन्दर्भहरू

एक टिप्पणी छोड्नुहोस्

तपाईंको इमेल ठेगाना प्रकाशित गरिने छैन। आवश्यक क्षेत्रहरू चिन्ह लगाइएका छन् *