MICROCHIP логотипіMPLAB® XC8 C компилятор нұсқасы 2.41 AVR® MCU үшін шығарылым жазбалары
Пайдаланушы нұсқаулығы

MPLAB XC8 C компиляторын әзірлеуге арналған бағдарламалық құрал

БҰЛ ҚҰЖАТ МИКРОЧІП AVR ҚҰРЫЛҒЫЛАРЫН МАҚСАНДАҒАН КЕЗДЕ MPLAB XC8 C ҚҰРАСТЫРУШЫСЫНА ҚАТЫСТЫ МАҢЫЗДЫ АҚПАРАТТЫ БАР.
БҰЛ БАҒДАРЛАМАЛЫҚ ҚҰРАЛДЫ ҚОСУ БҰРЫН ОҚЫП ШЫҒЫҢЫЗ. ЕГЕР СІЗ 8 биттік PIC ҚҰРЫЛҒЫЛАРЫ ҮШІН КОМПИЛЬЕРДІ ПАЙДАЛАНСАҢЫЗ, PIC ҚҰЖАТЫНЫҢ MPLAB XC8 C КОМПИЛЬЕРІНІҢ ШЫҒАРУ ЕСКЕРТПЕСІН ҚАРАҢЫЗ.

Біттіview

1.1. Кіріспе
Microchip MPLAB® XC8 C компиляторының бұл шығарылымында бірнеше жаңа мүмкіндіктер мен қателерді түзету бар.
1.2. Құрылған күні
Бұл компилятор нұсқасының ресми құрастырылған күні – 8 жылдың 2023 ақпаны.
1.3. Алдыңғы нұсқа
MPLAB XC8 C компиляторының алдыңғы нұсқасы 2.40 жылдың 3 шілдесінде құрастырылған 2022 болды.
1.4. Функционалдық қауіпсіздік жөніндегі нұсқаулық
MPLAB XC компиляторларына арналған функционалдық қауіпсіздік нұсқаулығы функционалдық қауіпсіздік лицензиясын сатып алған кезде құжаттамалар бумасында қолжетімді.
1.5. Құрамдас лицензиялар мен нұсқалар
AVR MCU құралдарына арналған MPLAB XC8 C компиляторы GNU General Public License (GPL) бойынша жазылған және таратылады, бұл оның бастапқы коды еркін таратылады және жалпыға қолжетімді дегенді білдіреді.
GNU GPL бойынша құралдардың бастапқы кодын Microchip файлдарынан бөлек жүктеп алуға болады webсайт. GNU GPL файлын орнату license.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. Windows жүйесіне арналған екілік файлдар кодпен қол қойылды. MacOS жүйесіне арналған екілік файлдар кодпен қол қойылған және нотариалды куәландырылған. MPLAB XC желілік лицензия сервері Microsoft Windows 64 және одан жоғары нұсқаларды қоса алғанда, әртүрлі 10 биттік операциялық жүйелер үшін қол жетімді; Ubuntu 18.04 және одан жоғары; немесе macOS 10.15 және одан жоғары. Сервер сонымен қатар Windows Server, Linux дистрибутивтері, мысалы, Oracle® Enterprise Linux® және Red Hate Enterprise Linux, сондай-ақ қолдау көрсетілетін операциялық жүйелердің ескі нұсқаларында жұмыс істей алады. Дегенмен, MPLAB XC желілік лицензия сервері осы операциялық жүйелерде тексерілмеген. MPLAB XC желілік лицензия серверін желілік лицензияларға (SW006021-VM) арналған виртуалды машина лицензиясы арқылы қолдау көрсетілетін ОЖ виртуалды машиналарында іске қосуға болады. MPLAB XC желілік серверінің барлық 32 биттік нұсқалары 3.00 нұсқасынан бастап тоқтатылады.
Қолдау көрсетілетін құрылғылар
Бұл компилятор шығарылым кезінде барлық қол жетімді 8-биттік AVR MCU құрылғыларын қолдайды. Барлық қолдау көрсетілетін құрылғылардың тізімін (компилятор каталогында) қараңыз. Бұл файлдар да тізімде
avr_chipinfo.html әрбір құрылғы үшін құжат конфигурациясының бит параметрлері.

1.7. Басылымдар және лицензияны жаңарту
MPLAB XC8 компиляторын лицензияланған (PRO) немесе лицензиясыз (Тегін) өнім ретінде белсендіруге болады. Компиляторды лицензиялау үшін белсендіру кілтін сатып алу қажет. Лицензия Тегін өніммен салыстырғанда оңтайландырудың жоғары деңгейіне мүмкіндік береді. Лицензиясыз компилятор лицензиясыз шексіз жұмыс істей алады. MPLAB XC8 Functional Safety компиляторы Microchip-тен сатып алынған функционалды қауіпсіздік лицензиясымен іске қосылуы керек. Бұл лицензиясыз компилятор жұмыс істемейді. Іске қосылғаннан кейін кез келген оңтайландыру деңгейін таңдап, компилятордың барлық мүмкіндіктерін пайдалануға болады. MPLAB XC функционалдық қауіпсіздік компиляторының бұл шығарылымы желілік сервер лицензиясын қолдайды.
Лицензия түрлері және компиляторды лицензиямен орнату туралы ақпаратты MPLAB XC C компиляторларын орнату және лицензиялау (DS50002059) құжатын қараңыз.

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 Compilers (DS52059) үшін лицензия менеджері құжатын қараңыз.
Бағалау лицензиясы бойынша компиляторды іске қосуды таңдасаңыз, бағалау мерзімі аяқталғаннан кейін 14 күн ішінде компиляция кезінде ескерту аласыз. Егер сіз HPA жазылымы аяқталғаннан кейін 14 күн ішінде болсаңыз, дәл осындай ескерту беріледі.
XC желілік лицензия сервері бөлек орнатушы болып табылады және бір пайдаланушыға арналған компилятор орнатушысына кірмейді.
XC License Manager енді қалқымалы желі лицензияларының роумингіне қолдау көрсетеді. Мобильді пайдаланушыларға арналған бұл мүмкіндік қалқымалы лицензияға қысқа уақыт ішінде желіден шығуға мүмкіндік береді. Бұл мүмкіндікті пайдалана отырып, сіз желіден ажыратып, әлі де MPLAB XC компиляторын пайдалана аласыз. Бұл мүмкіндік туралы қосымша ақпарат алу үшін XCLM орнатуының құжат қалтасын қараңыз.
MPLAB X IDE роумингті визуалды басқару үшін Лицензиялар терезесін (Құралдар > Лицензиялар) қамтиды.

1.8.1. Орнату мәселелерін шешу
Windows операциялық жүйелерінің кез келгенінде компиляторды орнатуда қиындықтар туындаса, келесі ұсыныстарды орындап көріңіз.
Орнатуды әкімші ретінде іске қосыңыз.
Орнатушы қолданбасының рұқсаттарын «Толық басқару» күйіне орнатыңыз. (Файлды тінтуірдің оң жақ түймешігімен нұқыңыз, Сипаттар, Қауіпсіздік қойындысын таңдаңыз, пайдаланушыны таңдаңыз, өңдеу.)
Уақытша қалтаның рұқсаттарын «Толық басқару» күйіне орнатыңыз.
Уақытша қалтаның орнын анықтау үшін Run пәрменіне %temp% теріңіз (Windows логотиптік пернесі + R).
Бұл сол каталогты көрсететін файл зерттеушісі диалогын ашады және сол қалтаның жолын анықтауға мүмкіндік береді.
1.9. Компиляторлық құжаттама
Компилятордың пайдаланушы нұсқаулығын скриншотта көрсетілгендей MPLAB X IDE бақылау тақтасындағы көк анықтама түймешігін басқан кезде браузерде ашылатын HTML бетінен ашуға болады.

8-биттік AVR мақсаттары үшін құрастырып жатсаңыз, AVR® MCU үшін MPLAB® XC8 C компиляторының пайдаланушы нұсқаулығы осы архитектураға қолданылатын компилятор опциялары мен мүмкіндіктері туралы ақпаратты қамтиды.

MICROCHIP MPLAB XC8 C компиляторын әзірлеу бағдарламасы -

1.10. Тұтынушыларды қолдау
Microchip осы компилятор нұсқасына қатысты қате туралы есептерді, ұсыныстарды немесе пікірлерді құптайды. Қате туралы есептерді немесе мүмкіндік сұрауларын қолдау жүйесі арқылы жіберіңіз.

Құжаттама жаңартулары

MPLAB XC8 құжаттамасының онлайн және жаңартылған нұсқалары үшін Microchip онлайн техникалық құжаттамасына кіріңіз. webсайт. Осы шығарылымдағы жаңа немесе жаңартылған AVR құжаттамасы:

  • AVR® MCU үшін MPLAB® XC8 C компиляторының пайдаланушы нұсқаулығы (G нұсқасы)
  • AVR® GNU құралдар тізбегі MPLAB® XC8 көшіру нұсқаулығы (А нұсқасы)
  • Hexmate пайдаланушы нұсқаулығы (В нұсқасы)

AVR® GNU құралдар тізбегі MPLAB® XC8 көшіру нұсқаулығы C негізіндегі жобаны AVR 8-биттік GNU құралдар тізбегінен Microchip MPLAB XC8 C компиляторына көшіруді шешкен кезде қажет болуы мүмкін бастапқы кодқа өзгертулер мен құрастыру опцияларын сипаттайды. Microchip Unified Standard Library Анықтамалық нұсқаулығы Microchip Unified Standard Library арқылы анықталған функциялардың әрекетін және интерфейсін, сондай-ақ кітапхана түрлері мен макростарды мақсатты пайдалануды сипаттайды. Бұл ақпараттың кейбірі бұрын AVR® MCU үшін MPLAB® XC8 C компиляторының пайдаланушы нұсқаулығында қамтылған. Құрылғыға арналған кітапхана туралы ақпарат әлі де осы компилятор нұсқаулығында қамтылған.
Егер сіз 8 биттік құрылғылармен және MPLAB XC8 C компиляторымен жаңадан жұмыс істеп жатсаңыз, ендірілген инженерлерге арналған MPLAB® XC8 пайдаланушы нұсқаулығы – AVR® MCUs (DS50003108) MPLAB X IDE жүйесінде жобаларды орнату және сіздің компьютеріңіз үшін код жазу туралы ақпарат бар. бірінші MPLAB XC8 C жобасы. Бұл нұсқаулық енді компилятормен бірге таратылады.
Hexmate пайдаланушы нұсқаулығы Hexmate қолданбасын дербес қолданба ретінде іске қосатындарға арналған.

Жаңалықтар

Төменде компилятор қолдайтын жаңа AVR мақсатты мүмкіндіктері берілген. Ішкі тақырыпшалардағы нұсқа нөмірі келесі мүмкіндіктерге қолдау көрсету үшін компилятордың бірінші нұсқасын көрсетеді.
3.1. 2.41-нұсқа
Bootrow қолдауы (XC8-3053) Компилятор HEX файлында 0x860000 at.bootrow мекенжайы префиксі бар кез келген бөлімдердің мазмұнын орналастырады. Бұл бөлімдер тек жүктеушіге қол жетімді болатын кілттерді және басқа қауіпсіз ақпаратты сақтауға арналған BOOTROW жады үшін пайдаланылады.

Артық қайтаруды жою (XC8-3048) Компилятор енді теңшелетін сілтеме сценарийлері пайдаланылғанда, кейінге қалдыру арқылы рет функцияларындағы артық нұсқауларды жояды. Бұл бұрын орындалғанға ұқсас оңтайландыру, бірақ ол енді пайдаланушы сілтеме сценарийі пайдаланылса және ең жақсы сәйкестік бөлу схемасы ойнатылмаса да, барлық жетім бөлімдерде орындалады. Уақыт түрін өзгерту (XC8-2982, 2932) C99 стандартты кітапхана түрі time_t түрінен түрге өзгертілді, ол кейбір уақытқа байланысты ұзақ ұзақ функцияларда код өлшемін жақсартуларды береді, мысалы. қол қойылмаған ұзақ mktime()
Жаңа ноп (XC8-2946, 2945) Макрос қосылды. Бұл макрос жоқ NOP() кірістіреді шығысқа nop операциясының нұсқауы.
XCLM (XC8-2944) нұсқасына жаңарту Компилятормен бірге пайдаланылған лицензия менеджері жаңартылды және енді компилятордың лицензия мәліметтерін тексеру кезінде жылдамырақ жауап береді.
Trampреттелген шақырулар (XC8-2760) Компилятор енді нұсқаулардың салыстырмалы пішіндері әдетте тағайындалған аумақтан тыс болғанда, ұзын пішінді шақыру нұсқауларын қысқарақ салыстырмалы шақырулармен ауыстыруды орындай алады. Бұл жағдайда компилятор rcall нұсқаулығын шақыру үшін нұсқаулармен ауыстыруға әрекеттенеді, ол 'trampталап етілетін мекенжайға oline' орындалуы, мысалыample: jmp
rcall tramp_foo ;фу деп аталды

rcall tramp_фу

tramp_foo:
jmp foo

Бұл оңтайландыру ұқсас бағдарлама ағынын оңтайландырулармен бірге -mrelax опциясы арқылы басқарылады.

3.2. 2.40-нұсқа
Жаңа құрылғы қолдауы енді келесі AVR бөліктері үшін қол жетімді: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32EA64, AVR28, AVR64, AVR32, AVR64.
Жақсартылған процедуралық абстракция Процедуралық абстракцияны (PA) оңтайландыру құралы функцияны шақыру нұсқаулығын (/ ) қамтитын кодты сипаттауға болатындай жақсартылды. Бұл стекке аргументтерді беру немесе функциядан қайтару мәнін алу үшін пайдаланылмаса ғана, қоңырау шалу орындалады. Стек айнымалы аргумент тізімі бар функцияны шақырғанда немесе осы мақсат үшін тағайындалған регистрлерге қарағанда көбірек аргументтерді қабылдайтын функцияны шақырғанда пайдаланылады. Бұл мүмкіндікті опцияны пайдаланып өшіруге болады немесе процедуралық абстракцияны - және сәйкесінше пайдалану арқылы немесе функциялармен бірге төлсипатты (спецификаторды) таңдау арқылы нысан файлы немесе функциясы үшін толығымен өшіруге болады.
mno-pa-outline-қоңыраулар -mno-pa-on-file -mno-pa-on-function nopa Кодты қамту макросы Егер жарамды опция __nopa __CODECOV -mcodecov көрсетілген болса, компилятор енді макросты анықтайды.
Жадты брондау опциясы Енді AVR мақсаттары үшін құрастыру кезінде драйвер xc8-cc -mreserve=space@start:end опциясын қабылдайды. Бұл опция көрсетілген жад ауқымын деректер немесе бағдарлама жады кеңістігінде сақтайды, бұл байланыстырушының осы аймақта кодты немесе нысандарды толтыруын болдырмайды. Smarter smart IO Smart IO функцияларына бірнеше жақсартулар енгізілді, оның ішінде printf негізгі кодына жалпы түзетулер енгізілді, %n түрлендіру спецификаторын тәуелсіз нұсқа ретінде қарастырады, сұраныс бойынша vararg pop режимдерін байланыстырады, өңдеу үшін мүмкіндігінше қысқарақ деректер түрлерін пайдаланады. 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 регистрін автоматты түрде инициализациялауы үшін пайдалануға болады. кеңістік, онда оған тиімдірек қол жеткізуге болады.
Microchip Бірыңғай стандартты кітапханалары Барлық MPLAB XC компиляторлары MPLAB XC8 нұсқасының осы шығарылымымен бірге қолжетімді Microchip Бірыңғай стандартты кітапханасымен бөліседі. AVO MCU үшін MPLA# XC8 C компиляторының пайдаланушы нұсқаулығы енді осы стандартты функцияларға арналған құжаттаманы қамтымайды. Бұл ақпаратты енді Microchip Бірыңғай стандартты кітапханасының анықтамалық нұсқаулығынан табуға болады. Бұрын avr-libc арқылы анықталған кейбір функциялар енді қолжетімді емес екенін ескеріңіз. (Lila функциясын қараңыз.)
Smart I0 Жаңа біріккен кітапханалардың бөлігі ретінде printf және scanf отбасыларындағы I0 функциялары енді бағдарламада осы функциялардың қалай пайдаланылғанына негізделген әрбір құрастыруда теңшелетін етіп жасалады. Бұл бағдарлама пайдаланатын ресурстарды айтарлықтай азайтуы мүмкін.
Smart ICI көмек опциясы Смарт I0 функцияларына (мысалы, f () басып шығару немесе scanf ()) шақыруларды талдау кезінде, компилятор пішім жолынан әрқашан анықтай алмайды немесе аргументтерден қоңырауға қажетті түрлендіру спецификаторларын шығара алмайды. Бұрын компилятор әрқашан ешқандай болжам жасамайтын және толық жұмыс істейтін 10 функцияның соңғы бағдарлама кескінімен байланыстырылғанын қамтамасыз ететін. Жаңа – msmart-io-format=fmt опциясы қосылды, осылайша компиляторды оның орнына қолдануы анық емес смарт I0 функциялары пайдаланатын түрлендіру спецификаторлары туралы пайдаланушы хабардар ете алады, бұл тым ұзақ 10 режимді байланыстыруға жол бермейді. (Толығырақ ақпарат алу үшін smart-io-пішім опциясын қараңыз.)
Теңшелетін бөлімдерді орналастыру Бұрын -W1, –section-start опциясы сілтеме сценарийі бірдей атпен шығыс бөлімін анықтаған кезде ғана көрсетілген бөлімді сұралған мекенжайға орналастырды. Бұлай болмаған кезде, бөлім сілтемеші таңдаған мекенжайға орналастырылды және опция негізінен еленбейді. Енді сілтеме сценарийі бөлімді анықтамаса да, опция барлық теңшелетін бөлімдер үшін құрметтеледі. Дегенмен, стандартты бөлімдер үшін мұндай . мәтін, . bss немесе . деректер болса, ең жақсы сәйкес келетін бөлгіш әлі де олардың орналасуын толық басқарады және опцияның еш әсері болмайды. Пайдаланушы нұсқаулығында сипатталғандай -ton, -Tsection=addr опциясын пайдаланыңыз.
3.6. 2.32-нұсқа
Стек нұсқаулығы PRO компилятор лицензиясымен қол жетімді, компилятордың стек нұсқаулығы мүмкіндігін бағдарлама пайдаланатын кез келген стектің максималды тереңдігін бағалау үшін пайдалануға болады. Ол бағдарламаның шақыру графигін құрастырады және талдайды, әрбір функцияның стек пайдалануын анықтайды және есеп шығарады, одан бағдарлама пайдаланатын стектердің тереңдігі туралы қорытынды жасауға болады. Бұл мүмкіндік -mchp-stack-usage пәрмен жолы опциясы арқылы қосылады. Орындаудан кейін стекті пайдаланудың қысқаша мазмұны басып шығарылады. Стек туралы егжей-тегжейлі есеп картада қол жетімді file, оны әдеттегі жолмен сұрауға болады.
Жаңа құрылғыны қолдау келесі AVR бөліктері үшін қол жетімді: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB, AVR28 және AVR64. Шығарылған құрылғыны қолдау келесі AVR бөліктері үшін енді қолжетімсіз: AVR32DA32, AVR48DA16 және AVR28DA16.
3.7. 2.31-нұсқа
Жоқ.
3.8. 2.30-нұсқа
Деректерді инициализациялауды болдырмаудың жаңа опциясы Жаңа -mno-data-init драйвері опциясы деректерді инициализациялауды және BSS бөлімдерін тазалауды болдырмайды. Ол көшіру деректерінің шығысын басу арқылы жұмыс істейді және құрастыруда анық bss таңбаларын жасайды files, бұл өз кезегінде байланыстырушының сол тәртіптерді қосуына жол бермейді.
Жетілдірілген оңтайландырулар Оңтайландырудың бірқатар жақсартулары жасалды, соның ішінде артық қайтару нұсқауларын алып тастау, егер бит болса, өткізіп жіберу нұсқауынан кейінгі кейбір секірістерді жою және жақсартылған процедуралық абстракция және осы процесті қайталау мүмкіндігі. Осы оңтайландырулардың кейбірін басқару үшін енді қосымша опциялар қол жетімді, атап айтқанда бір таңбаға қатысты орындалатын статикалық нысандарға қол жеткізуге мүмкіндік беретін -f бөлімі-анкерлері; -mpa-iterations=n, ол процедуралық абстракция итерацияларының санын әдепкіден 2-ден өзгертуге мүмкіндік береді; және, -mpa-callcost-shortcall, ол неғұрлым агрессивті процедуралық абстракцияны орындайды, байланыстырушы ұзақ қоңырауларды босаңсытады деген үмітпен. Бұл соңғы опция негізгі болжамдар орындалмаса, код өлшемін ұлғайта алады.
Жаңа құрылғыны қолдау келесі AVR бөліктері үшін қол жетімді: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DA28, AVR128DA32, AVR128, AVR48DB128, AVR64, AVR5272, AVR5790, AVR5790, AVR5791, AVR5795, AVR6285, AVR6286DA6612, AVR6613DA6614. Қайтарылған құрылғыны қолдау қызметі келесі AVR бөліктері үшін енді қолжетімсіз: ATA6616, ATA6617, ATA664251N, ATAXNUMX, ATAXNUMX, ATAXNUMX, ATAXNUMX, ATAXNUMXC, ATAXNUMXC, ATAXNUMXQ, ATAXNUMXQ, ATAXNUMX.
3.9. 2.29 нұсқасы (Функционалдық қауіпсіздік шығарылымы)
Тақырып file компилятордың кірістірілген құрылғылары үшін Компилятордың MISRA сияқты тіл сипаттамаларына сәйкес келуін қамтамасыз ету үшін, тақырыбы fileарқылы автоматты түрде қосылады , жаңартылды. Бұл тақырыпта builtin_avr_nop ( ) және орнатылған 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 келесі функцияларды қамту талдауларынан шығару үшін пайдаланылуы мүмкін. Ең дұрысы прагманың басында қосылуы керек file оны толығымен алып тастау үшін file қамту талдауларынан. Немесе, _атрибуты_ ( (nocodecov) ) қамту талдауынан белгілі бір функцияны алып тастау үшін пайдаланылуы мүмкін.
Құрылғы сипаттамасы files Жаңа құрылғы file avr_chipinfo деп аталады. html компилятор таратуының docs каталогында орналасқан. Бұл file компилятор қолдайтын барлық құрылғыларды тізімдейді. Құрылғы атауын нұқыңыз және ол осы құрылғыға арналған барлық рұқсат етілген конфигурация бит параметрі/мәні ауыртпалығын көрсететін бетті ашады.amples. Процедуралық абстракция
Құрастырушы кодтың жалпы блоктарын сол блоктың шығарылған көшірмесіне шақырулармен алмастыратын процедуралық абстракцияны оңтайландырулар компиляторға қосылды. Олар 2, 3 немесе s оңтайландыруларды таңдаған кезде компилятор арқылы автоматты түрде шақырылатын бөлек қолданба арқылы орындалады. Бұл оңтайландырулар код өлшемін азайтады, бірақ олар орындау жылдамдығын және кодты жөндеу мүмкіндігін азайтуы мүмкін. Процедуралық абстракцияны -mno-pa опциясын пайдаланып жоғары оңтайландыру деңгейлерінде өшіруге болады немесе -mpa арқылы төменгі оңтайландыру деңгейлерінде (лицензияңызға байланысты) қосуға болады. Оны нысан үшін өшіруге болады file -mno-pa-on- пайдалануfile=fileатауы немесе -mno-pa-on-function=функциясы арқылы функция үшін өшірілген. Бастапқы код ішінде процедуралық абстракцияны функцияның анықтамасымен атрибутын ( (nopa) ) пайдалану арқылы немесе атрибутқа ( ( (nopa, noinline) ) кеңейтетін және осылайша функция кірістіруінің орын алуына жол бермейтін nopa пайдалану арқылы өшіруге болады. және кірістірілген кодтың абстракциясы бар.
Прагмада құлыптау биті қолдауы #pragma конфигурациясын енді AVR құлыптау биттерін, сондай-ақ басқа конфигурация биттерін көрсету үшін пайдалануға болады. avr_chipinfo тексеріңіз. html file (жоғарыда аталған) осы прагмамен бірге пайдалану үшін параметр/мән жұптары үшін. Жаңа құрылғыны қолдау келесі бөліктерге қол жетімді: AVR28DAl28, AVR64DAl28, AVR32DA 128 және AVR48DA 128.
3.13. 2.05-нұсқа
Бұл компилятордың және лицензия менеджерінің macOS нұсқасы енді 64 биттік қолданба болып табылады. Бұл компилятордың MacOS жүйесінің соңғы нұсқаларында ескертусіз орнатылып, іске қосылуын қамтамасыз етеді.
Бағдарлама жадындағы Const объектілері. Енді компилятор жедел жадта емес, конст-квалификацияланған объектілерді бағдарламаның Flash жадына орналастыра алады. Компилятор конфигурацияланған жаһандық деректер бағдарламаның флэш жадында сақталады және бұл деректерге сәйкес бағдарлама жады нұсқаулары арқылы тікелей және жанама түрде қол жеткізуге болады. Бұл жаңа мүмкіндік әдепкі бойынша қосылған, бірақ оны -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 драйверін бұрынғы компилятор нұсқаларында қабылданған ескі стиль опциялары арқылы тікелей шақыруға болады.
Жалпы C интерфейсі Бұл компилятор енді MPLAB Common C интерфейсіне сәйкес келеді, бұл бастапқы кодты барлық 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 компиляторларымен сәйкестікті қамтамасыз ету үшін, strtol () сияқты XC8 жолды-функциялары, т.б., егер көрсетілген негіз 36-дан үлкен болса, енді кіріс жолын түрлендіруге әрекет жасамайды. және оның орнына errno мәнін EINVAL мәніне орнатады. С стандарты осы негізгі мәннен асып кеткен кездегі функциялардың әрекетін көрсетпейді.
Сәйкес емес жылдамдықты оңтайландырулар 3-деңгейдегі оңтайландыруларды таңдау кезінде процедуралық абстракцияны оңтайландырулар қосылды (-03). Бұл оңтайландырулар код жылдамдығы есебінен код өлшемін азайтады, сондықтан орындалмауы керек. Осы оңтайландыру деңгейін пайдаланатын жобалар осы шығарылыммен құрастырылған кезде код өлшемі мен орындау жылдамдығындағы айырмашылықтарды көруі мүмкін.
Кітапхананың функционалдығы Көптеген стандартты C кітапханасы функцияларының коды енді Microchip Бірыңғай стандартты кітапханасынан алынған, ол бұрынғы avr-libc кітапханасымен салыстырғанда кейбір жағдайларда басқа мінез-құлық көрсетуі мүмкін. Мысалыample, пішімделген файлды қосу үшін 1printf flt кітапханасына (-1printf_flt опциясы) сілтеме жасау қажет емес. I0 float пішімінің спецификаторларына қолдау көрсету. Ақылды I0 Microchip Unified Standard Library мүмкіндіктері бұл опцияны артық етеді. Сонымен қатар, флеште const жолдарында жұмыс істейтін жол және жад функциялары (мысалы, strcpy_P ( ) және т.б.) үшін _P жұрнағы бар процедураларды пайдалану енді қажет емес. Стандартты C процедуралары (мысалы, strcpy ) бағдарлама жадысындағы const-data-data-мүмкіндігі қосылғанда мұндай деректермен дұрыс жұмыс істейді.

4.6. 2.32-нұсқа
Жоқ.
4.7. 2.31-нұсқа
Жоқ.
4.8. 2.30-нұсқа
Жоқ.
4.1. 2.29 нұсқасы (Функционалдық қауіпсіздік шығарылымы)
Жоқ.
4.2. 2.20-нұсқа
DFP орналасуы өзгертілді Компилятор енді DFP (Device Family Packs) пайдаланатын басқа орналасуды болжайды. Бұл ескі DFP бұл шығарылыммен жұмыс істемеуі мүмкін екенін және ескі құрастырушылар соңғы DFP файлдарын пайдалана алмайтынын білдіреді.
4.3. 2.19 нұсқасы (Функционалдық қауіпсіздік шығарылымы)
Жоқ.
4.4. 2.10-нұсқа
Жоқ
4.5. 2.05-нұсқа
Бағдарлама жадындағы Const нысандары Әдепкі бойынша, const-квалификацияланған нысандар бағдарлама жадына орналастырылатынын және оларға қол жетімді болатынын ескеріңіз (түс сипатталғандай). Бұл жобаңыздың өлшеміне және орындалу жылдамдығына әсер етеді, бірақ жедел жадты пайдалануды азайтуы керек. Бұл мүмкіндікті қажет болса, -mnoconst-data-in-progmem опциясы арқылы өшіруге болады.
4.6. 2.00-нұсқа
Конфигурация сақтандырғыштары Құрылғы конфигурациясының сақтандырғыштарын енді сақтандырғыш күйін көрсету үшін конфигурациялау прагмасы, содан кейін орнату мәндері жұптары арқылы бағдарламалауға болады, мысалы
#pragma конфигурациясы WDTON = SET
#pragma конфигурациясы BODLEVEL = BODLEVEL_4V3
Абсолюттік объектілер мен функциялар Енді объектілер мен функцияларды CCI (адрес) спецификаторы арқылы жадтағы белгілі бір мекенжайға орналастыруға болады, мысалы,ampле:
#қосу
int foobar_at(0x800100);
char __at(0x250) getID(int офсет) {…}
Бұл спецификатордың аргументі болуы керек бірінші байт немесе нұсқау орналасатын мекенжайды көрсететін тұрақты. ЖЖҚ мекенжайлары 0x800000 ығысу арқылы көрсетіледі. Бұл мүмкіндікті пайдалану үшін CCI қосыңыз.
Жаңа үзіліс функциясы синтаксисі Компилятор енді C функцияларының үзу өңдеушілері екенін көрсету үшін CCI _interrupt (num) спецификаторын қабылдайды. Спецификатор үзу нөмірін қабылдайды, мысалыampле:
#қосу
жарамсыз __үзу(SPI_STC_vect_num) spi_Isr(жарамсыз) { … }

Түзетілген мәселелер

Төменде компиляторға енгізілген түзетулер берілген. Олар жасалған кодтағы қателерді түзетуі немесе компилятор жұмысын пайдаланушы нұсқаулығында көзделген немесе көрсетілгенге өзгертуі мүмкін. Ішкі тақырыпшалардағы нұсқа нөмірі келесі мәселелерге арналған түзетулерді қамтитын бірінші компилятор нұсқасын көрсетеді. Тақырыптағы жақшадағы белгі(лер) бақылау дерекқорындағы мәселенің сәйкестендіруі болып табылады. Қолдау қызметіне хабарласу қажет болса, бұлар пайдалы болуы мүмкін.
Кейбір құрылғыға қатысты мәселелер құрылғымен байланысты Device Family Pack (DFP) ішінде түзетілетінін ескеріңіз. DFP-ге енгізілген өзгерістер туралы ақпаратты және соңғы бумаларды жүктеп алу үшін MPLAB бума реттеушісін қараңыз.

5.1. 2.41-нұсқа
Ventura (XC8-3088) Dongles құрылғысында ақаулық компиляторды лицензиялау үшін пайдаланылған деректер macOS Ventura хосттарында дұрыс оқылмауы мүмкін, бұл лицензиялау сәтсіздігіне әкеледі. XCLM лицензия менеджеріне енгізілген өзгертулер бұл мәселені түзетеді.
Жадты бөлудің дұрыс емес көрсеткіші (XC8-2925) Стандартты кітапхана жадын басқару функцияларын (malloc () және т.б.) пайдаланып жадтың 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 мәнін қайтарып, ep мәнін жолдың «exx» бөлігін көрсету үшін орнатуы керек, ал функция дұрыс мәнді қайтарды, бірақ жолдың «xx» бөлігін көрсету үшін ep параметрін орнатты. .

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 мүмкіндігі енді толығымен өшірілген.
DFP NVMCTRL (XC8-2848) дұрыс қатынасу үшін өзгертеді AVR64EA құрылғылары пайдаланатын іске қосу коды NVMCTRL регистрінің конфигурацияны өзгертуден қорғау (CCP) астында екенін және I0 SFR параметрін const-data-in-configmapped-progmem пайдаланатын бетке орната алмағанын ескермеді. компилятор мүмкіндігі. AVR-Ex_DFP 2.2.55 нұсқасында жасалған өзгертулер іске қосу кодын осы регистрге дұрыс жазуға мүмкіндік береді.
DFP өзгертулерін болдырмау керек жарқылмен салыстыру (XC8-2847) AVR128DA28/32/48/64 Silicon Errata (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) Аргументтердің айнымалы саны бар функциялар 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 деректер көрсеткіші деректер мекенжай кеңістігіне нақты шығарылған кезде мекенжай жарамсыз болуы мүмкін болса, ескерту мәселе болып табылады.
Басталмаған 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[] __атрибут__((бөлім(".mysec"))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __атрибут__((бөлім(".mysec"))) = {0xEF, 0xFE};
arr2-ні arr1-ден кейін бірден орналастыру керек еді.
Бөлімнің бастапқы мекенжайларын көрсету (XC8-2650) The -W1, –section-start опциясы бөлімдерді белгіленген бастау мекенжайына үнсіз орналастыра алмады. Бұл мәселе кез келген теңшелетін атаулары бар бөлімдер үшін түзетілді; дегенмен, ол стандартты бөлімдер үшін жұмыс істемейді, мысалы. мәтін немесе . bss, оны -W1, -T опциясы арқылы орналастыру керек.
Босаңсу кезінде байланыстырушы бұзылады (XC8-2647) -mrelax оңтайландыруы қосылғанда және қолжетімді жадқа сәйкес келмейтін код немесе деректер бөлімдері болғанда, байланыстырушы бұзылды. Енді мұндай жағдайда оның орнына қате туралы хабарлар шығарылады.

Қайтару жоқ (XC8-2646) The – nofallback опциясы дұрыс орындалмаған немесе құжатталмаған. Оны енді компилятор лицензиясыз болса, компилятор төменірек оңтайландыру параметріне қайта түспеуін және оның орнына қате жіберетінін қамтамасыз ету үшін таңдауға болады.

Сәйкес емес жылдамдықты оңтайландырулар (X03-2637) 3-деңгейдегі оңтайландыруларды таңдау кезінде процедуралық абстракцияны оңтайландырулар қосылды (-03). Бұл оңтайландырулар код жылдамдығы есебінен код өлшемін азайтады, сондықтан орындалмауы керек.
Нашар EEPROM қол жеткізу (XC8-2629) The -mconst-data-in-progmem опциясы қосылғанда (бұл әдепкі күй) Xmega құрылғыларында eeprom_read_block режимі дұрыс жұмыс істемеді, нәтижесінде EEPROM жады дұрыс оқылмайды.
Жарамсыз жадты бөлу (XC8-2593, XC8-2651) -Ttext немесе -Tdata сілтемесі опциясы (мысалы,ample -vl драйвер опциясы арқылы өтті) көрсетілген, сәйкес мәтін/деректер аймағының шығу тегі жаңартылды; дегенмен, соңғы мекенжай сәйкесінше реттелмеді, бұл аймақтың мақсатты құрылғының жады ауқымынан асып кетуіне әкелуі мүмкін.
Тым атрибутталған функциясы бар апат (XC8-2580) Функция үзіліс, сигнал немесе nmi атрибуттарының, мысалы, атрибуттың ( ( ( сигнал , үзу ) ) бірнешеуін пайдаланып жарияланса, компилятор бұзылды.
Жарамсыз ATtiny үзу коды (XC8-2465) ATtiny құрылғылары үшін құрастырылған кезде және оңтайландырулар өшірілген (-00), үзу функциялары диапазоннан тыс операндты ассемблер хабарламаларын іске қосқан болуы мүмкін.
Опциялар өткізілмейді (XC8-2452) Опцияны бірнеше, үтірмен бөлінген сілтеме опцияларымен пайдаланған кезде, байланыстырушы опциялардың барлығы сілтемешіге берілмеді.
Бағдарлама жадын жанама оқу қатесі (X03-2450) Кейбір жағдайларда компилятор көрсеткіштен бағдарлама жадына екі байт мәнді оқу кезінде ішкі қате (танылмаған insn) жасады.
5.6. 2.32-нұсқа
Екінші қол жеткізу кітапхана сәтсіз аяқталды (XC8-2381) xc8-ar нұсқасының Windows нұсқасын шақыру. Бар кітапхана мұрағатына екінші рет кіру үшін .exe кітапханасының мұрағатшысы қате туралы хабардың атын өзгерту мүмкін болмағандықтан сәтсіз болуы мүмкін.
5.7. 2.31-нұсқа
Түсініксіз компилятор сәтсіздіктер (XC8-2367) Жүйенің уақытша каталогы '.' нүктесі бар жолға орнатылған Windows платформаларында жұмыс істегенде. таңба болса, компилятор орындай алмаған болуы мүмкін.
5.8. 2.30-нұсқа
Жаһандық белгілер сызбадан кейін қате орналастырылды (XC8-2299) Процедуралық абстракция арқылы шығарылатын жинақ реттіліктері ішінде жаһандық белгілерді орналастыратын қолмен жазылған құрастыру коды дұрыс қайта орналаспаған болуы мүмкін.
Тыныштандыратын апат (XC8-2287) -mrelax опциясын пайдалану, секіріп релаксацияны оңтайландырулар бөлімнің соңында жоқ ret нұсқаулығын жоюға әрекет жасағанда байланыстырғыштың істен шығуына себеп болуы мүмкін.
Белгілерді мәндер ретінде оңтайландыру кезінде бұзылу (XC8-2282) «Мәндер ретіндегі белгілер» GNU C тілінің кеңейтімін пайдаланатын код Outlined VMA ауқымын түзету қатесі бар процедуралық абстракцияны оңтайландырулардың бұзылуына себеп болуы мүмкін.
Тұрақты емес (XC8-2271) st rstr ( ) және басқа функцияларға арналған прототиптер -mconst-data-inprogmem мүмкіндігі өшірілгенде, қайтарылған жол көрсеткіштерінде стандартты емес const біліктілігін көрсетпеңіз. avrxmega3 және avrtiny құрылғыларында бұл мүмкіндік біржола қосылатынын ескеріңіз.
Жоғалған инициализаторлар (XC8-2269) артық болғанда аударма бірлігіндегі бір айнымалы бөлімге орналастырылды (_бөлім немесе _атрибут_ ( (бөлім) ) арқылы) және мұндай бірінші айнымалы нөлге тең болды немесе инициализаторы, орналастырылған бір аударма бірлігіндегі басқа айнымалылар үшін инициализаторы болмады сол бөлімде жоғалған.
5.1. 2.29 нұсқасы (Функционалдық қауіпсіздік шығарылымы)
Жоқ.
5.2. 2.20-нұсқа
Ұзын командалармен қате (XC8-1983) AVR нысанасын пайдаланған кезде, компилятор a арқылы тоқтаған болуы мүмкін file қате табылмады, егер пәрмен жолы өте үлкен болса және тырнақшалар, кері қиғаш сызықтар және т.б.
Тағайындалмаған жол деректер бөлімі (XC8-1920) AVR сілтемесі avrxmega3 және avrtiny архитектуралары үшін құрастыру кезінде реттелетін родата бөлімдері үшін жадты тағайындай алмады, бұл жадтың қабаттасу қателерін тудыруы мүмкін
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) Windows жүйесінде құрастыру кезінде кодты оңтайландыру кезінде ішкі компилятор қатесі пайда болуы мүмкін.
ЖЖҚ толып кетуі анықталмады (XC8-1800, XC8-1796) Қол жетімді жедел жадтан асатын бағдарламаларды компилятор кейбір жағдайларда анықтамады, нәтижесінде орындалу уақыты кодының сәтсіздігі орын алды.
Қабылданбаған флэш-жад (XC8-1792) avrxmega3 және avrtiny құрылғылары үшін флэш-жад бөліктері MPLAB X арқылы бағдарламаланбаған болуы мүмкін. IDE.
Негізгі орындалмау (XC8-1788) Бағдарламада анықталған жаһандық айнымалылар болмаған кейбір жағдайларда іске қосу коды шықпады және негізгі ( ) функциясына ешқашан қол жеткізілмеді.
Жад туралы қате ақпарат (XC8-1787) avrxmega3 және avrtiny құрылғылары үшін avr өлшемді бағдарлама тек оқуға арналған деректер бағдарлама жадының орнына жедел жадты тұтынатынын хабарлады.
Бағдарлама жады дұрыс оқылмаған (XC8-1783) Деректер мекенжай кеңістігіне салыстырылған және PROGMEM макросы/атрибутының көмегімен нысандарды анықтайтын бағдарламалық жады бар құрылғылар үшін құрастырылған жобалар бұл нысандарды қате мекенжайдан оқыған болуы мүмкін.
Атрибуттары бар ішкі қате (XC8-1773) Меңзер нысандарын келесімен анықтасаңыз, ішкі қате орын алды
_at () немесе атрибут() таңбалауыштары көрсеткіш аты мен сілтеме жасалған түр арасындағы, мысалыampле, таңба *
_at (0x800150) cp; Енді мұндай код кездескен жағдайда ескерту беріледі.
Негізгі орындалмау (XC8-1780, XC8-1767, XC8-1754) EEPROM айнымалы мәндерін пайдалану немесе конфигурация прагмасының көмегімен сақтандырғыштарды анықтау негізгі ( ) параметріне жеткенге дейін орындалу уақытының іске қосу кодында қате деректерді баптандыруға және/немесе бағдарламаның орындалуын бұғаттауға әкелуі мүмкін.
Кішкентай құрылғылардағы сақтандырғыш қатесі (XC8-1778, XC8-1742) Attiny4/5/9/ 10/20/40 құрылғыларында сақтандырғыш ұзындығы олардың тақырыбында көрсетілген қате болды. fileсақтандырғыштарды анықтайтын кодты құру әрекеті кезінде сілтеме қателеріне әкелетін с.
Сегменттеу қате (XC8-1777) Үздік сегменттеу ақаулығы түзетілді.
Ассемблер апаты (XC8-1761) Компилятор Ubuntu 18 астында іске қосылған кезде avr-as ассемблері бұзылған болуы мүмкін.
Нысандар тазартылмаған (XC8-1752) Басталмаған статикалық сақтау ұзақтығы нысандары орындау уақытының іске қосу коды арқылы тазаланбаған болуы мүмкін.
Қайшылықты құрылғы сипаттамасы еленбейді (XC8-1749) Бірнеше құрылғы спецификациясының опциялары пайдаланылғанда және әртүрлі құрылғыларды көрсеткенде, компилятор қате жасамады.
Үйме арқылы жадтың бұзылуы (XC8-1748) The _heap_start таңбасы дұрыс орнатылмады, нәтижесінде үйме арқылы қарапайым айнымалылардың бүліну мүмкіндігі туды.
Сілтемені ауыстыру қатесі (XC8-1739) Сілтемені ауыстыру қатесі кодта rjmp немесе мақсатты дәл 4к байт қашықтықта орналасқан rc Call болған кезде шығарылған болуы мүмкін.
5.6. 2.00-нұсқа
Жоқ.

Белгілі мәселелер

Төменде компилятор жұмысындағы шектеулер берілген. Бұл жалпы кодтау шектеулері немесе пайдаланушы нұсқаулығындағы ақпараттан ауытқулар болуы мүмкін. Тақырыптағы жақшадағы белгі(лер) бақылау дерекқорындағы мәселенің сәйкестендіруі болып табылады. Қолдау қызметіне хабарласу қажет болса, бұл пайдалы болуы мүмкін. Белгілері жоқ элементтер режимді сипаттайтын шектеулер болып табылады және олар біржола күшінде қалады.
6.1. MPLAB X IDE Интеграция
MPLAB IDE интеграция Егер компиляторды MPLAB IDE ішінен пайдалану керек болса, онда компиляторды орнатпас бұрын MPLAB IDE орнату керек.
6.2. Код жасау
Segfault with section-anchors опциясы (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 мүмкіндігі -flto және -fno-құрылған опциялары пайдаланылған кезде жарамды, бірақ оңтайлы емес кодты жасайды.
Тек оқуға арналған оңтайлы емес деректерді орналастыру (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) ЖЖҚ басындағы мекенжайда нысан абсолютті болған кезде және инициализацияланбаған нысандар да анықталғанда, сілтеме қатесі іске қосылуы мүмкін.
Қысқа ояту идентификаторлары (XC8-2775) ATA5700/2 құрылғылары үшін PHIDO/1 регистрлері ені 16 бит емес, ені 32 бит ретінде ғана анықталады.
Символды шақыру кезінде байланыстырғыштың бұзылуы (XC8-2758) Бастапқы код -cc., –de f sym байланыстырғыш опциясы арқылы анықталған таңбаны шақырғанда -mrelax драйвер опциясы пайдаланылса, сілтеме істен шығуы мүмкін.
Қате инициализация (XC8-2679) Онда кейбір жаһандық/статикалық байт өлшемді нысандардың бастапқы мәндері деректер жадында орналастырылатын және айнымалы мәндерге орындау уақытында қатынасатын жер арасындағы сәйкессіздік.
Нашар жанама функция шақырулары (XC8-2628) Кейбір жағдайларда құрылымның бөлігі ретінде сақталған функция көрсеткіші арқылы жасалған функция шақырулары сәтсіз болуы мүмкін.
strtof он алтылық қалқымалы мәндер үшін нөлді қайтарады (XC8-2626) strtof және басқалар және scanf ( ) және т.б. кітапхана функциялары әрқашан көрсеткішті нөлге көрсетпейтін он алтылық жылжымалы нүкте санын түрлендіреді. Мысалыampле:
strtof («Oxl», &endptr) ;
I емес, 0 мәнін қайтарады.
Стек кеңесшісінің дұрыс емес хабар алмасуы (XC8-2542, XC8-2541) Кейбір жағдайларда пайдаланылған рекурсияға немесе анықталмаған стекке (мүмкін alloca() пайдалану арқылы) қатысты стек кеңесшісі ескертуі шығарылмайды.
Үзіліс кодының қайталануындағы қате (XC8-2421) Бірнеше үзу функциясының денесі бірдей болса, компиляторда бір үзу функциясының екіншісін шақыру үшін шығыс болуы мүмкін. Бұл барлық қоңырау шалу регистрлерінің қажетсіз сақталуына әкеледі және үзілістер ағымдағы үзу өңдеушісінің эпилогы іске қосылмай тұрып қосылады, бұл кодтың сәтсіздігіне әкелуі мүмкін.
Жарамсыз DFP жолы бар нашар нәтиже (XC8-2376) Егер компилятор жарамсыз DFP жолы және "спецификация" арқылы шақырылса file таңдалған құрылғы үшін бар болса, компилятор құрылғының жетіспейтін топтамасы туралы есеп бермейді және оның орнына «спецификацияны» таңдайды file, бұл кейін жарамсыз нәтижеге әкелуі мүмкін. «спецификация» files таратылған DFP-мен жаңартылмауы мүмкін және тек ішкі компилятор сынағымен пайдалануға арналған.
Жадтың қабаттасуы анықталмады (XC8-1966) Компилятор мекенжайда абсолютті (_at ( ) арқылы) және бөлім ( ) спецификаторын қолданатын және бір мекенжаймен байланыстырылған басқа нысандарда абсолютті жасалған нысандардың жадының қабаттасуын анықтамайды.
Кітапхана функциялары мен _memx (XC8-1763) Memx мекенжай кеңістігінде аргументі бар libgcc float деп аталатын функциялар сәтсіз болуы мүмкін. Кітапхана процедуралары кейбір C операторларынан шақырылатынын ескеріңіз, мысалы, мысалыample, келесі код әсер етеді:
қайтару regFloatVar > memxFloatVar;
Шектеулі libgcc іске асыру (AVRTC-731) ATTiny4/5/9/10/20/40 өнімдері үшін libgcc ішіндегі стандартты C / Math кітапханасын енгізу өте шектеулі немесе жоқ.
Бағдарлама жады шектеулері (AVRTC-732) 128 кб-тан асатын бағдарлама жады суреттеріне құралдар тізбегі қолдау көрсетеді; дегенмен, -mre lax опциясы пайдаланылған кезде қажетті функция түйіршіктерін жасаудың орнына релаксациясыз және пайдалы қате туралы хабарсыз байланыстырғышты тоқтатудың белгілі жағдайлары бар.
Атау кеңістігінің шектеулері (AVRTC-733) Атаулы мекенжай кеңістіктері пайдаланушы нұсқаулығының Арнайы типті сараптау бөлімінде айтылған шектеулерге сәйкес құралдар тізбегі арқылы қолдау көрсетеді.
Уақыт белдеулері The кітапхана функциялары GMT уақытын қабылдайды және жергілікті уақыт белдеулерін қолдамайды, осылайша жергілікті уақыт ( ) gmtime ( ) сияқты уақытты қайтарады, мысалыampле.

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

Құжаттар / Ресурстар

MICROCHIP MPLAB XC8 C компиляторды әзірлеуге арналған бағдарламалық құрал [pdf] Пайдаланушы нұсқаулығы
MPLAB XC8 C, MPLAB XC8 C компиляторды әзірлеуге арналған бағдарламалық құрал, компиляторларды әзірлеуге арналған бағдарламалық құрал, әзірлеуге арналған бағдарламалық қамтамасыз ету, бағдарламалық қамтамасыз ету

Анықтамалар

Пікір қалдырыңыз

Электрондық пошта мекенжайыңыз жарияланбайды. Міндетті өрістер белгіленген *