MPLAB® XC8 C Compiler Ferzje 2.41 Release Notes foar AVR® MCU
Eigner hânboek
MPLAB XC8 C Compiler Untwikkelingssoftware
DIT DOKUMENT BEVET WICHTICH YNFORMAASJE LIET OP DE MPLAB XC8 C-KOMPILER BY TAGERJE MICROCHIP AVR-apparaten.
LÊS DIT asjebleaft FOARDAT DIT SOFTWARE RUNNT. SJOCH DE MPLAB XC8 C COMPILER RELEASE OPMERKINGEN FOAR PIC DOKUMENT AS JO DE COMPILER GEBRUKKE FOAR 8-BIT PIC DEVICES.
Oerview
1.1. Ynlieding
Dizze útjefte fan 'e Microchip MPLAB® XC8 C-kompiler befettet ferskate nije funksjes en bugfixes.
1.2. Bouwdatum
De offisjele boudatum fan dizze gearstallerferzje is 8 febrewaris 2023.
1.3. Foarige ferzje
De foarige MPLAB XC8 C-kompilerferzje wie 2.40 boud op 3 july 2022.
1.4. Hânlieding foar funksjonele feiligens
In Hânlieding foar funksjonele feiligens foar de MPLAB XC-kompilators is beskikber yn it dokumintaasjepakket as jo in funksjonele feiligenslisinsje keapje.
1.5. Komponint Lisinsjes en ferzjes
De MPLAB XC8 C Compiler foar AVR MCU's-ark binne skreaun en ferspraat ûnder de GNU General Public License (GPL), wat betsjut dat syn boarnekoade frij ferspraat en beskikber is foar it publyk.
De boarnekoade foar ark ûnder de GNU GPL kin apart downloade wurde fan Microchip's website. Jo kinne de GNU GPL lêze yn it bestân dat de submap leit fan jo install license.txt avr/doc map. In algemiene diskusje oer prinsipes dy't de GPL ûnderlizze kinne hjir fûn wurde.
Stipekoade foarsjoen foar de koptekstbestannen, linkerskripts en runtime-biblioteken binne proprietêre koade en net ûnder de GPL behannele.
Dizze gearstaller is in ymplemintaasje fan GCC ferzje 5.4.0, binutils ferzje 2.26, en brûkt avr-libc ferzje 2.0.0.
1.6. Systeem easken
De MPLAB XC8 C-kompiler en de lisinsjesoftware dy't it brûkt binne beskikber foar in ferskaat oan bestjoeringssystemen, ynklusyf 64-bit ferzjes fan de folgjende: Profesjonele edysjes fan Microsoft® Windows® 10; Ubuntu® 18.04; en macOS® 10.15.5. Binaries foar Windows binne koade-ûndertekene. Binaries foar macOS binne koade-ûndertekene en notarisearre. De MPLAB XC Network License Server is beskikber foar in ferskaat oan 64-bit bestjoeringssystemen, ynklusyf Microsoft Windows 10 en boppe; Ubuntu 18.04 en heger; of macOS 10.15 en heger. De tsjinner kin ek rinne op ferskate oare bestjoeringssystemen, ynklusyf Windows Server, Linux-distribúsjes, lykas Oracle® Enterprise Linux® en Red Hate Enterprise Linux, lykas ek âldere ferzjes fan stipe bestjoeringssystemen. De MPLAB XC Network License Server wurdt lykwols net testen op dizze bestjoeringssystemen. De MPLAB XC Network License Server kin wurde útfierd op firtuele masines fan it stipe OS mei in firtuele masine-lisinsje foar netwurklisinsjes (SW006021-VM). Alle 32-bit ferzjes fan 'e MPLAB XC Network Server wurde stopset fanôf ferzje 3.00.
Stipe apparaten
Dizze kompilator stipet alle beskikbere 8-bit AVR MCU-apparaten op it momint fan frijlitting. Sjoch (yn de map fan de gearstaller) foar in list fan alle stipe apparaten. Dizze bestannen listje ek
avr_chipinfo.html doc konfiguraasje bit ynstellings foar elk apparaat.
1.7. Editions en lisinsje Upgrades
De MPLAB XC8-kompiler kin wurde aktivearre as in lisinsje (PRO) of net lisinsearre (Fergees) produkt. Jo moatte in aktivearringskaai keapje om jo kompilator te lisinsje. In lisinsje soarget foar in heger nivo fan optimalisaasje yn ferliking mei it fergese produkt. In net lisinsearre kompilator kin sûnder lisinsje betsjinne wurde. In MPLAB XC8 Functional Safety compiler moat wurde aktivearre mei in funksjonele feiligens lisinsje kocht fan Microchip. De gearstaller sil net wurkje sûnder dizze lisinsje. Ienris aktivearre kinne jo elk optimalisaasjenivo selektearje en alle kompilerfunksjes brûke. Dizze útjefte fan 'e MPLAB XC Functional Safety Compiler stipet de Network Server License.
Sjoch it Ynstallearjen en lisinsje fan MPLAB XC C Compilers (DS50002059) dokumint foar ynformaasje oer lisinsje typen en ynstallaasje fan de gearstaller mei in lisinsje.
1.8. Ynstallaasje en aktivearring
Sjoch ek de seksjes Migraasjeproblemen en beheiningen foar wichtige ynformaasje oer de lêste lisinsjebehearder opnommen mei dizze kompilator.
As jo MPLAB IDE brûke, wês dan wis dat jo de lêste MPLAB X IDE ferzje 5.0 of letter ynstallearje foardat jo dit ark ynstallearje. Stopje de IDE foardat jo de kompilator ynstallearje. Run de (Windows), (Linux) of (macOS) .exe .run .app kompilerynstallaasjeapplikaasje, bgl en folgje de oanwizings op it skerm. XC8-1.00.11403-windows.exe De standert ynstallaasjemap wurdt oanrikkemandearre. As jo Linux brûke, moatte jo de kompilator ynstallearje mei in terminal en fan in root-akkount. Ynstallearje mei in macOS-akkount mei beheardersrjochten.
Aktivearring wurdt no apart útfierd foar ynstallaasje. Sjoch it dokumint License Manager foar MPLAB® XC C Compilers (DS52059) foar mear ynformaasje.
As jo kieze om de gearstaller út te fieren ûnder de evaluaasjelisinsje, krije jo no in warskôging by kompilaasje as jo binnen 14 dagen binne nei it ein fan jo evaluaasjeperioade. Deselde warskôging wurdt útjûn as jo binnen 14 dagen binne nei it ein fan jo HPA-abonnemint.
De XC Network License Server is in aparte ynstallearder en is net opnommen yn 'e ien-brûkers kompilerynstallearder.
De XC License Manager stipet no roaming fan driuwende netwurklisinsjes. Rjochte op mobile brûkers, dizze funksje lit in driuwende lisinsje foar in koarte perioade fan it netwurk gean. Mei dizze funksje kinne jo de ferbining losmeitsje fan it netwurk en jo MPLAB XC-kompiler noch brûke. Sjoch de doc-map fan 'e XCLM-ynstallaasje foar mear oer dizze funksje.
MPLAB X IDE omfettet in lisinsjefinster (Tools > Lisinsjes) om roaming visueel te behearjen.
1.8.1. It oplossen fan ynstallaasjeproblemen
As jo swierrichheden ûnderfine by it ynstallearjen fan de kompilator ûnder ien fan 'e Windows-bestjoeringssystemen, besykje dan de folgjende suggestjes.
Laad de ynstallaasje as behearder.
Stel de tagongsrjochten fan 'e ynstallearderapplikaasje yn op 'Folsleine kontrôle'. (Rjochtsklikke op it bestân, selektearje Eigenskippen, ljepper Feiligens, selektearje brûker, bewurkje.)
Stel de tagongsrjochten fan 'e tydlike map yn op 'Folsleine kontrôle'.
Om de lokaasje fan 'e temp-map te bepalen, typ %temp% yn it Run-kommando (Windows-logo-kaai + R).
Dit sil in dialoochfinster iepenje mei dy map en lit jo it paad fan dy map bepale.
1.9. Kompilator dokumintaasje
De brûkersgidsen fan 'e kompilator kinne wurde iepene fanút de HTML-side dy't iepenet yn jo blêder as jo op de blauwe helpknop yn it MPLAB X IDE-dashboard klikke, lykas oanjûn yn 'e skermôfbylding.
As jo bouwe foar 8-bit AVR-doelen, befettet de MPLAB® XC8 C Compiler User's Guide foar AVR® MCU ynformaasje oer dy kompilatoropsjes en funksjes dy't fan tapassing binne op dizze arsjitektuer.
1.10.Klant Support
Microchip ferwolkommet bugrapporten, suggestjes of opmerkings oangeande dizze kompilerferzje. Rjochtsje asjebleaft alle brekrapporten of funksjefersiken fia it Support System.
Dokumintaasje Updates
Foar online en aktuele ferzjes fan MPLAB XC8 dokumintaasje, besykje asjebleaft Microchip's Online Technical Documentation website. Nije as bywurke AVR-dokumintaasje yn dizze útjefte:
- MPLAB® XC8 C Compiler User's Guide foar AVR® MCU (ferzje G)
- AVR® GNU Toolchain nei MPLAB® XC8 Migraasjegids (ferzje A)
- Hexmate User's Guide (ferzje B)
De AVR® GNU Toolchain nei MPLAB® XC8 Migraasjegids beskriuwt de wizigingen oan boarnekoade en bouwopsjes dy't miskien nedich binne as jo beslute om in C-basearre projekt te migrearjen fan 'e AVR 8-bit GNU Toolchain nei de Microchip MPLAB XC8 C Compiler. De Microchip Unified Standert Bibleteek Reference Guide beskriuwt it gedrach fan en ynterface nei de funksjes definiearre troch de Microchip Unified Standert Bibleteek, likegoed as it bedoeld gebrûk fan de bibleteek typen en makro. Guon fan dizze ynformaasje waard earder befette yn 'e MPLAB® XC8 C Compiler User's Guide foar AVR® MCU. Apparaatspesifike biblioteekynformaasje is noch altyd befette yn dizze gearstallergids.
As jo gewoan begjinne mei 8-bit-apparaten en de MPLAB XC8 C-kompiler, hat de MPLAB® XC8-brûkersgids foar ynsletten yngenieurs - AVR® MCU's (DS50003108) ynformaasje oer it ynstellen fan projekten yn 'e MPLAB X IDE en it skriuwen fan koade foar jo earste MPLAB XC8 C projekt. Dizze gids is no ferspraat mei de kompilator.
De Hexmate User's Guide is bedoeld foar dyjingen dy't Hexmate brûke as in standalone applikaasje.
Wat is nij
De folgjende binne nije AVR-doelfunksjes dy't de kompilator no stipet. It ferzjenûmer yn 'e subkoppen jout de earste gearstallerferzje oan om de folgjende funksjes te stypjen.
3.1. Ferzje 2.41
Bootrow-stipe (XC8-3053) De kompilator sil de ynhâld fan alle seksjes pleatse mei in prefiks by.bootrow-adres 0x860000 yn it HEX-bestân. Dizze seksjes wurde brûkt foar BOOTROW-ûnthâld, dat is ûntworpen foar it opslaan fan kaaien en oare feilige ynformaasje dy't allinich tagonklik wêze moatte foar in bootloader.
Oerstallige return eliminering (XC8-3048) De gearstaller sil no elimineren oerstallige ynstruksjes yn ret funksjes mei in sturt sprong doe't oanpaste linker skripts wurde brûkt. Dit is in fergelykbere optimisaasje as earder útfierd, mar it wurdt no útfierd op alle weesseksjes, sels as in oanpaste linkerskript wurdt brûkt en it beste fit-allokaasjeskema is net yn spiel. Tiid type feroaring (XC8-2982, 2932) De C99 standert bibleteek type, is feroare fan in time_t nei in type, dat jout koade-grutte ferbetterings yn guon tiid-relatearre lange lange funksjes, lykas. net ûndertekene lange mktime()
Nije nop (XC8-2946, 2945) De makro is tafoege oan. Dizze makro foeget in no- NOP() yn nop operaasje ynstruksje yn de útfier.
Update nei XCLM (XC8-2944) De lisinsjebehearder brûkt mei de kompiler is bywurke en reageart no mear by it kontrolearjen fan de lisinsjedetails fan de kompilator.
Trampolined calls (XC8-2760) De gearstaller kin no útfiere ferfanging fan lange-foarm oprop ynstruksjes mei koartere relative oproppen doe't de relative foarmen fan de ynstruksjes soe normaal wêze bûten berik fan harren bestimming. Yn dizze situaasje sil de gearstaller besykje te ferfangen mei ynstruksjes om rcall in ynstruksje te neamen dy't sil 'trampoline 'útfiering nei it fereaske adres, bygelyksampwy: jmp
ryk tramp_foo; wie neame foo
…
ryk tramp_foo
…
tramp_foo:
jmp fjo
Dizze optimisaasje, tegearre mei ferlykbere programmaflow-optimisaasjes, wurdt regele troch de -mrelax-opsje.
3.2. Ferzje 2.40
Nije apparaatstipe Stipe is no beskikber foar de folgjende AVR-dielen: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32, AVR64EA48, AVRXNUMXEAXNUMX, AVRXNUMX en AVRXNUMX.
Ferbettere prosedurele abstraksje It optimalisearjen ark foar prosedurele abstraksje (PA) is ferbettere sadat koade mei in funksjeopropynstruksje (/ ) útlein wurde kin. Dit sil allinich plakfine oprop rcall as de stapel net brûkt wurdt om arguminten troch te jaan oan noch weromkommende wearde fan 'e funksje te krijen. De stack wurdt brûkt by it oanroppen fan in funksje mei in fariabele argumintlist of by it oanroppen fan in funksje dy't mear arguminten nimt as d'r registers binne oanwiisd foar dit doel. Dizze funksje kin útskeakele wurde mei de opsje, of prosedurele abstraksje kin folslein útskeakele wurde foar in objekttriem of funksje troch respektivelik de- en te brûken, of troch it attribút (spesifisearjen) selektyf te brûken mei funksjes.
mno-pa-outline-oproppen -mno-pa-on-file -mno-pa-on-function nopa Koadedekkingsmakro De kompilator definiearret no de makro as in jildige opsje __nopa __CODECOV -mcodecov spesifisearre is.
Opsje foar ûnthâldreservering De bestjoerder sil no de opsje xc8-cc -mreserve=space@start:end akseptearje by it bouwen foar AVR-doelen. Dizze opsje behâldt it spesifisearre ûnthâldberik yn 'e gegevens- as programma-ûnthâldromte, en foarkomt dat de linker koade of objekten yn dit gebiet befolke. Smarter smart IO Ferskate ferbetterings binne makke oan 'e Smart IO-funksjes, ynklusyf algemiene tweaks oan' e printf kearnkoade, behanneljen fan de %n konverzje spesifisearring as in ûnôfhinklike fariant, keppeljen yn vararg pop routines op fraach, gebrûk fan koartere gegevenstypen wêr mooglik foar ôfhanneling IO funksje arguminten, en factoring mienskiplike koade yn fjild breedte en presyzje ôfhanneling. Dit kin resultearje yn signifikante koade- en gegevensbesparring, lykas ek de útfieringssnelheid fan IO ferheegje.
3.3. Ferzje 2.39 (útjefte fan funksjonele feiligens)
Netwurkserverlisinsje Dizze útjefte fan 'e MPLAB XC8 Functional Safety Compiler stipet de Network Server License.
3.4. Ferzje 2.36
Gjin.
3.5. Ferzje 2.35
Nije apparaatstipe Stipe is beskikber foar de folgjende AVR-dielen: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28, en AVR64DD32.
Ferbettere kontekstwikseling De nije opsje -mcall-isr-prologues feroaret hoe't ûnderbrekkingsfunksjes registers opslaan by yngong en hoe't dy registers wersteld wurde as de ûnderbrekkingsroutine beëiniget. It wurket op in fergelykbere manier as de opsje -mcall-prologues, mar hat allinich ynfloed op ynterruptfunksjes (ISR's).
Noch mear ferbettere kontekstwikseling De nije opsje -mgas-isr-prologues kontrolearret de kontekstwikselkoade generearre foar routines foar lytse interrupttsjinsten. As dizze funksje ynskeakele is, sil de assembler de ISR scannen foar registergebrûk en allinich dizze brûkte registers opslaan as nedich.
Konfigurearbere flash mapping Guon apparaten yn de AVR DA en AVR DB famylje hawwe in SFR (bgl. FLMAP) dat spesifisearret hokker 32k seksje fan programma ûnthâld wurdt yn kaart brocht yn de gegevens ûnthâld. De nije - mconst-data-in-config-mapped-progmem-opsje kin brûkt wurde om de linker alle const-kwalifisearre gegevens yn ien 32k-seksje te pleatsen en automatysk it oanbelangjende SFR-register te initialisearjen om te soargjen dat dizze gegevens yn it dataûnthâld yn kaart brocht wurde romte, wêr't it effektiver tagonklik wurde sil.
Microchip Unified Standard Library Alle MPLAB XC-kompilers sille in Microchip Unified Standard Library diele, dy't no beskikber is mei dizze release fan MPLAB XC8. De MPLA # XC8 C Compiler User's Guide foar AVO MCU omfettet net langer de dokumintaasje foar dizze standertfunksjes. Dizze ynformaasje is no te finen yn 'e Microchip Unified Standard Library Reference Guide. Tink derom dat guon funksjonaliteit earder definieare troch avr-libc net mear beskikber is. (Sjoch Lila-funksjonaliteit.)
Smart I0 As ûnderdiel fan 'e nije ferienige bibleteken wurde I0-funksjes yn' e printf- en scanf-famyljes no oanpast oanmakke op elke build, basearre op hoe't dizze funksjes yn it programma wurde brûkt. Dit kin de boarnen brûkt troch in programma substansjeel ferminderje.
Smart ICI assistinsje opsje By it analysearjen fan oproppen nei smart I0 funksjes (lykas print f () of scanf ()), de gearstaller kin net altyd bepale út de opmaak tekenrige of ôfliede út de arguminten dy konverzje spesifisearrings nedich troch de oprop. Eartiids soe de kompilator altyd gjin oannames meitsje en soargje dat folslein funksjonele 10-funksjes keppele waarden oan it definitive programmaôfbylding. In nije - msmart-io-format=fmt-opsje is tafoege, sadat de kompilator ynstee kin wurde ynformeare troch de brûker fan 'e konverzje-spesifisearrings dy't brûkt wurde troch smart I0-funksjes wêrfan it gebrûk dûbelsinnich is, foarkomt dat te lange 10 routines wurde keppele. (Sjoch opsje smart-io-formaat foar mear details.)
Oanpaste seksjes pleatse Eartiids pleatste de opsje -W1, -section-start allinich de oantsjutte seksje op it frege adres as it linkerskript in útfierseksje mei deselde namme definieare. Doe't dat net it gefal wie, waard de seksje pleatst op in adres keazen troch de linker en waard de opsje yn wêzen negearre. No sil de opsje eare wurde foar alle oanpaste seksjes, sels as it linkerskript de seksje net definiearret. Tink derom dat foar standert seksjes, sokke. tekst, . bss of. gegevens, de bêste fit allocator sil noch hawwe folsleine kontrôle oer harren pleatsing, en de opsje sil hawwe gjin effekt. Brûk de opsje -ton, -Tsection=addr, lykas beskreaun yn 'e brûkershantlieding.
3.6. Ferzje 2.32
Stapelbegelieding Beskikber mei in PRO-kompilerlisinsje, de stackbegeliedingsfunksje fan 'e gearstaller kin brûkt wurde om de maksimale djipte te skatten fan elke stapel brûkt troch in programma. It konstruearret en analysearret de opropgrafyk fan in programma, bepaalt it stapelgebrûk fan elke funksje, en produsearret in rapport, wêrfan de djipte fan stacks brûkt troch it programma kin wurde ôflaat. Dizze funksje is ynskeakele fia de kommando-rigelopsje -mchp-stack-usage. In gearfetting fan stapelgebrûk wurdt printe nei útfiering. In detaillearre stapelrapport is beskikber yn 'e kaart file, dy't op 'e gewoane wize oanfrege wurde kin.
Nije apparaatstipe Stipe is beskikber foar de folgjende AVR-dielen: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32VR,28. Stipe foar ynlutsen apparaat Stipe is net mear beskikber foar de folgjende AVR-dielen: AVR64DA32, AVR32DA48 en, AVR16DA28.
3.7. Ferzje 2.31
Gjin.
3.8. Ferzje 2.30
Nije opsje om inisjalisaasje fan gegevens te foarkommen In nije -mno-data-init stjoerprogramma-opsje foarkomt de inisjalisaasje fan gegevens en it wiskjen fan bss-seksjes. It wurket troch it ûnderdrukken fan de útfier fan de do copy gegevens en do dúdlik bss symboalen yn gearkomste files, dat sil op syn beurt foarkomme it opnimmen fan dy routines troch de linker.
Ferbettere optimalisaasjes In oantal optimalisaasjeferbetterings binne makke, ynklusyf it fuortheljen fan oerstallige return-ynstruksjes, it fuortheljen fan guon sprongen nei in skip-as-bit-is ynstruksje, en ferbettere prosedurele abstraksje en de mooglikheid om dit proses te iterearjen. Oanfoljende opsjes binne no beskikber foar in kontrôle guon fan dizze optimalisaasjes, spesifyk -f seksje-ankers, wêrtroch tagong ta statyske objekten wurde útfierd relatyf oan ien symboal; -mpa-iterations=n, wêrtroch it oantal prosedurele abstraksje-iteraasjes feroare wurde kin fan de standert fan 2; en, -mpa-callcost-shortcall, dy't mear agressive prosedurele abstraksje útfiert, yn 'e hope dat de linker lange petearen kin ûntspanne. Dizze lêste opsje kin koadegrutte fergrutsje as de ûnderlizzende oannames net realisearre wurde.
Nije apparaatstipe Stipe is beskikber foar de folgjende AVR-dielen: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128 AVR28, AVR128, AVR32, AVR128, 48DB128, AVR64, AVR5272 5790db5790. Stipe foar ynlutsen apparaat is net mear beskikber foar de folgjende AVR-dielen: ATA5791, ATA5795, ATA6285N, ATA6286, ATA6612, ATA6613, ATA6614, ATA6616C, ATA6617C, ATA664251Q, ATAXNUMXC, ATAXNUMXC, ATAXNUMXC en XNUMXC
3.9. Ferzje 2.29 (útjefte fan funksjonele feiligens)
Koptekst file foar gearstaller ynboude Om derfoar te soargjen dat de gearstaller kin foldwaan oan taal spesifikaasjes lykas MISRA, de koptekst file, dat wurdt automatysk opnommen troch , is bywurke. Dizze koptekst befettet de prototypen foar alle ynboude funksjes, lykas builtin_avr_nop () en ynboude avr delay_cycles (). Guon ynboude binne miskien net MISRA-kompatibel; dizze kinne wurde weilitten troch it tafoegjen fan de defineXCSTRICT_MISRA oan de kompilator kommandorigel. De ynboude yns en har deklaraasjes binne bywurke om typen mei fêste breedte te brûken.
3.10. Ferzje 2.20
Nije apparaatstipe Stipe is beskikber foar de folgjende AVR-dielen: ATTINY1624, ATTINY1626, en ATTINY1627.
Better best fit allocator De best fit allocator (BFA) yn 'e kompilator is ferbettere sadat seksjes wurde tawiisd yn in folchoarder dy't bettere optimalisaasje mooglik makket. De BFA stipet no neamde adresromten en behannelet better gegevensinitialisaasje.
Ferbettere prosedurele abstraksje De prosedurele abstraksje-optimalisaasjes wurde no útfierd op mear koade-sekwinsjes. Foarige situaasjes dêr't dizze optimalisaasje koe hawwe ferhege koade grutte binne oanpakt troch it meitsjen fan de optimalisaasje koade bewust fan de linker syn garbage collection proses.
Absence of AVR Assembler De AVR Assembler is net mear opnommen yn dizze distribúsje.
3.11. Ferzje 2.19 (útjefte fan funksjonele feiligens)
Gjin.
3.12. Ferzje 2.10
Koadedekking Dizze útjefte omfettet in funksje foar dekking fan koade dy't analyses fasilitearret fan 'e mjitte wêryn't de boarnekoade fan in projekt is útfierd. Brûk de opsje -mcodecov=ram om it yn te skeakeljen. Nei it útfieren fan it programma op jo hardware sil koade dekking ynformaasje wurde sammele yn it apparaat, en dit kin wurde oerdroegen oan en werjûn troch de MPLAB X IDE fia in koade dekking plugin. Sjoch de IDE dokumintaasje foar ynformaasje oer dizze plugin kin wurde krigen. De #pragma nocodecov kin brûkt wurde om folgjende funksjes út te sluten fan 'e dekkingsanalyses. Ideal it pragma moat wurde tafoege oan it begjin fan 'e file om dat gehiel út te sluten file út de dekking analyzes. As alternatyf kin it _attribute_ ((nocodecov)) brûkt wurde om in spesifike funksje út te sluten fan 'e dekkingsanalyses.
Apparaat beskriuwing files In nij apparaat file neamd avr_chipinfo. html leit yn 'e docs-map fan' e kompilerferdieling. Dit file listet alle apparaten stipe troch de kompilator. Klikje op in apparaatnamme, en it sil in side iepenje dy't alle tastiene konfiguraasjebitynstellingen/weardepine foar dat apparaat toant, mei eks.amples. Proseduele abstraksje
Proseduele abstraksje-optimalisaasjes, dy't gewoane blokken fan assemblagekoade ferfange troch oproppen nei in ekstrahearre kopy fan dat blok, binne tafoege oan de kompilator. Dizze wurde útfierd troch in aparte applikaasje, dy't automatysk wurdt oproppen troch de kompilator by it selektearjen fan nivo 2, 3 of s-optimisaasjes. Dizze optimalisaasjes ferminderje koadegrutte, mar se kinne útfieringssnelheid en koade-debugabiliteit ferminderje. Proseduele abstraksje kin útskeakele wurde op hegere optimaliseringsnivaer mei help fan de opsje -mno-pa, of kin ynskeakele wurde op legere optimalisaasje nivo (ûnder foarbehâld fan jo lisinsje) troch it brûken fan -mpa. It kin wurde útskeakele foar in foarwerp file mei -mno-pa-on-file=filenamme, of útskeakele foar in funksje troch te brûken -mno-pa-on-function = function. Binnen jo boarnekoade kin prosedurele abstraksje foar in funksje útskeakele wurde troch attribút ( (nopa) ) te brûken mei de definysje fan 'e funksje, of troch nopa te brûken, dy't útwreidet nei attribút ( (nopa, noinline) ) en dus foarkomt dat funksje ynlining plakfynt en d'r is abstraksje fan ynline koade.
Beskoattelje bit-stipe yn pragma De #pragma-konfiguraasje kin no brûkt wurde om de AVR-slotbits en ek de oare konfiguraasjebits oan te jaan. Kontrolearje de avr_chipinfo. html file (hjirboppe neamd) foar de ynstelling/wearde-pearen om te brûken mei dit pragma. Nije apparaatstipe Stipe is beskikber foar de folgjende dielen: AVR28DAl28, AVR64DAl28, AVR32DA 128, en AVR48DA 128.
3.13. Ferzje 2.05
Mear bits foar jo jild De macOS-ferzje fan dizze kompilator en lisinsjebehearder is no in 64-bit applikaasje. Dit sil derfoar soargje dat de kompilator sil ynstallearje en útfiere sûnder warskôgings op resinte ferzjes fan macOS.
Const-objekten yn programma-ûnthâld De kompilator kin no const-kwalifisearre objekten pleatse yn it programma Flash-ûnthâld, ynstee fan dat dizze yn RAM lizze. De gearstaller is wizige sadat cons t-kwalifisearre globale gegevens wurde opslein yn programma flash ûnthâld en dizze gegevens kinne wurde direkt en yndirekt tagong mei help fan de passende programma-ûnthâld ynstruksjes. Dizze nije funksje is standert ynskeakele, mar kin útskeakele wurde mei de opsje -mno-const-data-in-progmem. Foar avrxmega3 en avrtiny arsjitektuer is dizze funksje net fereaske en is altyd útskeakele, sûnt programma ûnthâld wurdt yn kaart brocht yn de gegevens adres romte foar dizze apparaten.
Standert fergees Net lisinsearre (Fergees) ferzjes fan dizze gearstaller tastean no optimisaasjes ta oant en mei nivo 2. Dit sil in ferlykbere, hoewol net identyk, útfier tastean as wat earder mooglik wie mei in standert lisinsje.
Wolkom AVRASM2 De AVRASM2-assembler foar 8-bit-apparaten is no opnommen yn 'e XC8-kompilerynstallearder. Dizze assembler wurdt net brûkt troch de XC8-kompiler, mar is beskikber foar projekten basearre op mei de hân skreaune gearstallingsboarne.
Nije apparaatstipe Stipe is beskikber foar de folgjende dielen: ATMEGA1608, ATMEGA1609, ATMEGA808, en ATMEGA809.
3.14. Ferzje 2.00
Top-nivo-bestjoerder In nije bestjoerder, neamd xc8-cc, sit no boppe de foarige avr-gcc-bestjoerder en de xc8-bestjoerder, en it kin de passende kompiler neame op basis fan de seleksje fan it doelapparaat. Dizze stjoerprogramma akseptearret GCC-styl opsjes, dy't of oerset wurde foar of trochjûn nei de kompilator dy't wurdt útfierd. Dizze stjoerprogramma lit in ferlykbere set opsjes mei ferlykbere semantyk brûke mei elk AVR- of PIC-doel en is dus de oanrikkemandearre manier om de kompilator op te roppen. As it nedich is, kin de âlde avr-gcc-bestjoerder direkt oproppen wurde mei de âlde-styl-opsjes dy't it akseptearre yn eardere kompilatorferzjes.
Common C Interface Dizze kompilator kin no oerienkomme mei de MPLAB Common C Interface, wêrtroch boarnekoade makliker wurde kin oer alle MPLAB XC-kompilators. De opsje -mext=cci freget dizze funksje oan, wêrtroch alternatyf syntaksis foar in protte taalútwreidings mooglik is.
Nije bibletekaris bestjoerder In nije bibletekaris bestjoerder is gepositioneerd boppe de foarige PIC bibletekaris bibletekaris en de AVR avr-ar bibletekaris. Dizze stjoerprogramma akseptearret opsjes yn GCC-argyfstyl, dy't of oerset wurde foar of trochjûn nei de bibletekaris dy't útfierd wurdt. De nije bestjoerder lit in ferlykbere set opsjes mei ferlykbere semantyk brûkt wurde om elke PIC- as AVR-biblioteek te meitsjen of te manipulearjen file en is dus de oanrikkemandearre manier om de bibletekaris op te roppen. As nedich foar legacy-projekten, kin de foarige bibletekaris direkt oproppen wurde mei de âlde-styl-opsjes dy't it akseptearre yn eardere kompilatorferzjes.
Migraasje Issues
De folgjende binne funksjes dy't no oars wurde behannele troch de kompilator. Dizze wizigingen kinne modifikaasje fan jo boarnekoade fereaskje as jo koade portearje nei dizze kompilerferzje. It ferzjenûmer yn 'e subkoppen jout de earste gearstallerferzje oan om de wizigingen dy't folgje te stypjen.
4.1. Ferzje 2.41
Unkrekte fma-funksjes fuortsmiten (XC8-2913) De C99-standertbibleteek fma 0 -famyljefunksjes ( ) net berekkene in fermannichfâldigjen-tafoeging mei ûneinige krektens oan in inkele rounding, mar ynstee sammele rounding flaters mei eltse operaasje. Dizze funksjes binne fuorthelle út de levere bibleteek.
4.2. Ferzje 2.40
Gjin.
4.3. Ferzje 2.39 (útjefte fan funksjonele feiligens)
Gjin.
4.4. Ferzje 2.36 Gjin.
4.5. Ferzje 2.35
Behanneling fan string-to-bases (XC8-2420) Om konsistinsje te garandearjen mei oare XC-kompilators, sille de XC8-string-to-funksjes, lykas strtol () ensfh., net langer besykje in ynfierstring te konvertearjen as de opjûne basis grutter is as 36 en sil ynstee set errno nei EINVAL. De C-standert spesifisearret net it gedrach fan 'e funksjes as dizze basiswearde wurdt oerschreden.
Ûngepaste snelheid optimalisaasjes Proseduele abstraksje-optimisaasjes waarden ynskeakele by it selektearjen fan nivo 3-optimisaasjes (-03). Dizze optimalisaasjes ferminderje koadegrutte ten koste fan koadesnelheid, dus moatte net útfierd wurde. Projekten dy't dit optimalisaasjenivo brûke kinne ferskillen yn koadegrutte en útfieringssnelheid sjen as se boud binne mei dizze release.
Biblioteek funksjonaliteit De koade foar in protte fan 'e standert C-bibleteekfunksjes komt no fan Microchip's Unified Standard Library, dy't yn guon omstannichheden oars gedrach kin fertoane yn ferliking mei dat fersoarge troch de eardere avr-libc-bibleteek. Bygelyksample, it is net langer nedich om te keppeljen yn 'e 1printf flt-bibleteek (-1printf_flt-opsje) om opmaak yn te skeakeljen I0 stipe foar float-formaat spesifikaasjes. De smart I0 eigenskippen fan de Microchip Unified Standert Library makket dizze opsje oerstallich. Dêrneist is it brûken fan _P efterheaksel routines foar string en ûnthâld funksjes (bgl. strcpy_P () ensfh) dy't operearje op const snaren yn flash net mear nedich. De standert C-routines (bgl. strcpy ) sille goed wurkje mei sokke gegevens as de funksje const-data-in-program-memory ynskeakele is.
4.6. Ferzje 2.32
Gjin.
4.7. Ferzje 2.31
Gjin.
4.8. Ferzje 2.30
Gjin.
4.1. Ferzje 2.29 (útjefte fan funksjonele feiligens)
Gjin.
4.2. Ferzje 2.20
DFP-yndieling feroare De kompilator nimt no in oare yndieling oan dy't brûkt wurdt troch DFP's (Device Family Packs). Dit sil betsjutte dat in âldere DFP miskien net wurket mei dizze release, en âldere kompilatoren sille de lêste DFP's net kinne brûke.
4.3. Ferzje 2.19 (útjefte fan funksjonele feiligens)
Gjin.
4.4. Ferzje 2.10
Gjin
4.5. Ferzje 2.05
Const objekten yn programma ûnthâld Tink derom dat de standert, const-kwalifisearre objekten wurde pleatst en tagong ta programma ûnthâld (lykas beskreaun hue). Dit sil ynfloed hawwe op de grutte en útfieringssnelheid fan jo projekt, mar moat RAM-gebrûk ferminderje. Dizze funksje kin útskeakele wurde, as nedich, mei de opsje -mnoconst-data-in-progmem.
4.6. Ferzje 2.00
Konfiguraasje-fuses.
#pragma config WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
Absolute objekten en funksjes Objekten en funksjes kinne no wurde pleatst op spesifyk adres yn it ûnthâld mei help fan de CCI (adres) specifier, bygelyksample:
#ynklusyf
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
It argumint foar dizze specifier moat wêze in konstante dy't it adres stiet wêrop de earste byte of ynstruksje pleatst wurde sil. RAM-adressen wurde oanjûn mei in offset fan 0x800000. Aktivearje de CCI om dizze funksje te brûken.
Nije ûnderbrekkingsfunksje syntaksis De kompilator aksepteart no de CCI _interrupt (num) spesifisator om oan te jaan dat C-funksjes interrupt-handlers binne. De spesifisator nimt in ûnderbrekkingsnûmer, bygelyksample:
#ynklusyf
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Fêste problemen
De folgjende binne korreksjes dy't makke binne oan 'e kompilator. Dizze kinne bugs reparearje yn 'e oanmakke koade of feroarje de wurking fan' e kompilator nei wat wie bedoeld of spesifisearre troch de brûkershantlieding. It ferzjenûmer yn 'e subkoppen jout de earste gearstallerferzje oan dy't reparaasjes befetsje foar de problemen dy't folgje. De label(s) mei heakjes yn 'e titel binne de identifikaasje fan dat probleem yn 'e trackingdatabase. Dizze kinne nuttich wêze as jo kontakt opnimme moatte mei stipe.
Tink derom dat guon apparaatspesifike problemen wurde korrizjearre yn it Device Family Pack (DFP) ferbûn mei it apparaat. Sjoch de MPLAB Pack Manager foar ynformaasje oer feroarings makke oan DFP's en om de lêste pakketten te downloaden.
5.1. Ferzje 2.41
Dongle problemen op Ventura (XC8-3088) Dongles brûkt om de kompilator te lisensearjen is miskien net goed lêzen op macOS Ventura-hosts, wat resulteart yn lisinsjefouten. Feroarings oan de XCLM-lisinsjebehearder korrigearje dit probleem.
Ferkearde yndikaasje fan ûnthâld tawizing (XC8-2925) It besykjen om SIZE_MAX bytes (of in wearde tichtby dizze) fan ûnthâld te allocearjen mei de standert bibleteekûnthâldbehearfunksjes (malloc () et al) is ferkeard slagge. It hat gjin rekken hâlden mei dat ekstra bytes wiene nedich neist it blok frege by it brûken fan de ienfâldige dynamyske ûnthâld tawizing ymplemintaasje. In NULL-oanwizer sil no weromjûn wurde en errno ynsteld op ENOMEM yn sokke situaasjes.
Unkrekte fma-funksjes fuortsmiten (XC8-2913) De C99 standert bibleteek fma ( ) -famylje funksjes ( ) net berekkene in fermannichfâldigjen-tafoeging mei ûneinige krektens oan in inkele rounding, mar ynstee sammele rounding flaters mei eltse operaasje. Dizze funksjes binne fuorthelle út de levere bibleteek.
Slechte ôfhanneling fan tekenrige konverzje (XC8-2921, XC8-2652) Doe't in 'ûnderwerpsekwinsje' foar konverzje troch strtod Cr befette wat in driuwend-puntnûmer yn eksponinsjele opmaak like te wêzen en der in ûnferwacht karakter wie nei it e/E-karakter, dan wêr't endptr wie levere, waard it in adres tawiisd dat hie it ferwize nei it karakter nei de e/E, wylst it nei it e/E-karakter sels wêze moast, om't dat net omsetten wie. Bygelyksample, strtod ("100exx", &ep) moat 100.00 weromjaan en ep ynstelle om te wizen op it "exx" diel fan 'e tekenrige, wylst de funksje de juste wearde weromkaam, mar ep ynstelde om te wizen nei it "xx" diel fan 'e tekenrige .
5.2. Ferzje 2.40
Te ûntspannen (XCS-2876) By it brûken fan de -mrelax-opsje wie de kompilator guon seksjes net byinoar, wat resultearre yn minder optimale koadegrutte. Dit kin bard wêze mei koade dy't de nije MUSL-biblioteken brûkte of mei swakke symboalen.
Mappingfunksje net útskeakele lykas oanjûn yn warskôging (XC8-2875) De funksje const-data-in-config-mappedprogmem is ôfhinklik fan de funksje const-data-in-progmem dy't ynskeakele is. As de funksje const-data-inconfig-mapped-progmem eksplisyt ynskeakele wie mei de opsje en de funksje const-data-inprogmem wie útskeakele, mislearre de keppelingstap, nettsjinsteande in warskôgingsberjocht dat stelt dat de const-data-in-con fig- mapd-progmem-funksje wie automatysk útskeakele, wat net hielendal korrekt wie. De funksje const-data-in-config-mapped-progmem is no folslein útskeakele yn dizze situaasje.
DFP feroaret om korrekt tagong te krijen ta NVMCTRL (XC8-2848) De runtime opstartkoade brûkt troch AVR64EA-apparaten hat der gjin rekken mei hâlden dat it NVMCTRL-register ûnder Configuration Change Protection (CCP) wie en de I0 SFR net ynstelle koe op de side brûkt troch it const-data-in-configmapped-progmem gearstaller funksje. Feroarings makke yn AVR-Ex_DFP ferzje 2.2.55 sille tastean de runtime opstarten koade goed te skriuwen nei dit register.
DFP feroaret om te foarkommen flash mapping (XC8-2847) In work-around foar in probleem mei de flash-mapping apparaat funksje rapportearre yn de AVR128DA28/32/48/64 Silicon Errata (D580000882) is ymplementearre. De const-data-in-config-mapped-progmem-kompilerfunksje sil net standert tapast wurde foar troffen apparaten, en dizze feroaring sil ferskine yn AVR-Dx_DFP ferzje 2.2.160.
Bou flater mei sinhf of coshf (XC8-2834) Pogingen om de sinhf () of coshf () bibleteekfunksjes te brûken resultearre yn in keppelingflater, dy't in ûndefinieare referinsje beskriuwt. De ferwiisde ûntbrekkende funksje is no opnommen yn 'e kompilerferdieling.
Bou flaters mei nopa (XC,8-2833) It brûken fan de nopa attribút mei in funksje dy't hat hie syn assembler namme oantsjutte mei help fan asm () triggered flater berjochten út de assembler. Dizze kombinaasje is net mooglik.
Variadic funksje mislearring mei oanwizer arguminten (XC8-2755, XC8-2731) Funksjes mei in fariabel oantal arguminten ferwachtsje dat 24-bit (memx-type) oanwizers wurde trochjûn yn 'e fariabele argumintlist as de funksje const-data-in-progmem is ynskeakele. Arguminten dy't oanwizers wiene foar gegevensûnthâld waarden trochjûn as 16-bit objekten, wêrtroch koade mislearre doe't se úteinlik waarden lêzen. As de funksje constdata-in-progmem ynskeakele is, wurde alle 16-bit pointers arguminten no omboud ta 24-bit pointers.
strtoxxx bibleteekfunksjes mislearje (XC8-2620) Doe't const-data-in-progmem-funksje ynskeakele wie, waard de endptr-parameter yn 'e strtoxxx-bibleteekfunksjes net goed bywurke foar boarne-string-arguminten dy't net yn programma-ûnthâld binne.
Alerts foar ûnjildige casts (XC8-2612) De kompilator sil no in flater útjaan as de funksje const-in-progmem is ynskeakele en it adres fan in letterlike tekenrige wurdt eksplisyt cast nei gegevensadresromte (de const-kwalifikaasje ôfbrekke), bygelyksample, (uint 8_t *) "Hello World!". In warskôging is probleem as it adres miskien ûnjildich is as in const-gegevensoanwizer eksplisyt nei gegevensadresromte wurdt cast.
Pleatsing fan net inisjalisearre konstobjekten (XC8-2408) Uninitialisearre const en const flechtich objekten waarden net pleatst yn programma ûnthâld op apparaten dy't map al of in part fan harren programma ûnthâld yn de gegevens adres romte. Foar dizze apparaten wurde sokke objekten no yn it programma-ûnthâld pleatst, wat har wurking konsekwint makket mei oare apparaten.
5.3. Ferzje 2.39 (útjefte fan funksjonele feiligens)
Gjin.
5.4. Ferzje 2.36
Flater by fertraging (XC8-2774) Lytse feroarings yn de standert Free modus optimalisaasjes foarkaam konstante folding fan operand útdrukkings oan de fertraging ynboude funksjes, resultearret yn dat se wurde behannele as net-konstanten en trigger de flater: ynboude avr delay_cycles ferwachtet in compile tiid hiel getal konstante.
5.5. Ferzje 2.35
Trochrinnende tawizing mei _at (XC8-2653) Trochrinnende tawizing fan meardere objekten plakken yn in seksje mei deselde namme en it brûken fan _at ( ) wurke net goed. Bygelyksample:
const char arr1[] __attribute__((section(“.mysec”))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((section(“.mysec”))) = {0xEF, 0xFE};
moat arr2 fuort nei arr1 pleatst hawwe.
It opjaan fan seksje startadressen (XC8-2650) De -W1, -section-start-opsje wie stil mislearre om seksjes te pleatsen op it nominearre startadres. Dit probleem is reparearre foar alle oanpaste-neamde seksjes; lykwols, it sil net wurkje foar alle standert seksjes, lykas. tekst of. bss, dat moat wurde pleatst mei in -W1, -T opsje.
Linker crasht by it ûntspannen (XC8-2647) Doe't de -mrelax-optimalisaasje ynskeakele wie en d'r wiene koade- of gegevensseksjes dy't net passe yn it beskikbere ûnthâld, ferûngelokke de linker. No wurde yn sa'n omstannichheid ynstee flaterberjochten útjûn.
Gjin no-falling-back (XC8-2646) De -nofallback-opsje waard net korrekt ymplementearre, noch dokumintearre. Dit kin no selektearre wurde om te soargjen dat de kompilator net weromfalt nei in legere optimalisaasjeynstelling as de kompilator net lisinsearre is, en sil ynstee in flater útjaan.
Ûngepaste snelheid optimalisaasjes (X03-2637) Proseduele abstraksje-optimisaasjes waarden ynskeakele by it selektearjen fan nivo 3-optimisaasjes (-03). Dizze optimalisaasjes ferminderje koadegrutte ten koste fan koadesnelheid, dus moatte net útfierd wurde.
Slecht EEPROM tagong (XC8-2629) De eeprom_read_block routine wurke net goed op Xmega apparaten doe't de -mconst-data-in-progmem opsje wie ynskeakele (dat is de standert steat), resultearret yn EEPROM ûnthâld wurdt net lêzen goed.
Unjildige ûnthâld tawizing (XC8-2593, XC8-2651) Doe't de -Ttext of -Tdata linker opsje (bglample trochjûn mei in -vl stjoerprogramma opsje) wurdt oantsjutte, de oerienkommende tekst / gegevens regio oarsprong waard bywurke; lykwols, it ein adres waard net oanpast neffens, dat koe hawwe laat ta de regio boppe it doel apparaat syn ûnthâld berik.
Crash mei tefolle taskreaun funksje (XC8-2580) De gearstaller ferûngelokke as in funksje waard ferklearre mei help fan mear as ien fan de ûnderbrekking, sinjaal of nmi attributen, bygelyks, attribút (( sinjaal , ûnderbrekking ) ).
Unjildige ATtiny-ûnderbrekkingskoade (XC8-2465) By it bouwen foar ATtiny-apparaten en de optimisaasjes waarden útskeakele (-00), kinne ûnderbrekkingsfunksjes operand-berjochten fan assembler út it berik hawwe trigger.
Opsjes wurde net trochjûn (XC8-2452) By it brûken fan de opsje mei meardere, komma-skieden linkeropsjes, waarden net alle linkeropsjes trochjûn oan de linker.
Flater yndirekt lêzen fan programmaûnthâld (X03-2450) Yn guon gefallen produsearre de kompilator in ynterne flater (ûnherkenbere insn) by it lêzen fan in wearde fan twa byte fan in oanwizer nei programma-ûnthâld
5.6. Ferzje 2.32
Twadde tagong fan biblioteek mislearret (XC8-2381) De Windows-ferzje fan 'e xc8-ar oproppe. .exe biblioteek argyf in twadde kear om tagong te krijen ta in besteande biblioteek argyf kin mislearre mei in net mooglik omneame flater berjocht.
5.7. Ferzje 2.31
Unferklearre kompilator mislearrings (XC8-2367) By it rinnen op Windows-platfoarms dy't de tydlike systeemmap ynsteld hie op in paad dat in punt '.' befette. karakter, kin de kompilator net útfiere.
5.8. Ferzje 2.30
Globale etiketten ferkeard pleatst nei skets (XC8-2299) Mei de hân skreaune gearstallingskoade dy't globale labels pleatst binnen gearstallingssekwinsjes dy't troch prosedurele abstraksje faktuearre binne, is miskien net korrekt wersteld.
In ûntspannen crash (XC8-2287) It brûken fan de -mrelax opsje koe hawwe feroarsake de linker te crashe doe't tail jump relaxation optimizations besocht te fuortsmite ret ynstruksje dy't wiene net oan 'e ein fan in seksje.
Crash by it optimalisearjen fan labels as wearden (XC8-2282) Koade mei de "Labels as wearden" GNU C-taalútwreiding kin feroarsake hawwe dat de prosedurele abstraksje-optimalisaasjes crashen, mei in sketste VMA-berik omspant fixupflater.
Not so const (XC8-2271) De prototypen foar st rstr () en oare funksjes út net mear spesifisearje de net-standert const kwalifikaasjetoernoai op weromkearde tekenrige pointers as de -mconst-data-inprogmem funksje is útskeakele. Tink derom dat mei avrxmega3- en avrtiny-apparaten dizze funksje permanint ynskeakele is.
Ferlern initializers (XC8-2269) Wannear't mear as ien fariabele yn in oersetting ienheid waard pleatst yn in seksje (mei _section of _attribute_ ((seksje) )), en de earste sa'n fariabele wie nul inisjalisearre of hie gjin initializer, inisjalizers foar oare fariabelen yn deselde oersetting ienheid dy't waarden pleatst yn deselde seksje waarden ferlern gien.
5.1. Ferzje 2.29 (útjefte fan funksjonele feiligens)
Gjin.
5.2. Ferzje 2.20
Flater mei lange kommando's (XC8-1983) By it brûken fan in AVR-doel, kin de gearstaller hawwe stoppe mei in file net fûn flater, as de kommandorigel ekstreem grut wie en spesjale tekens befette, lykas quotes, backslashes, ensfh.
Net tawiisde rodata seksje (XC8-1920) De AVR-linker koe gjin ûnthâld tawize foar oanpaste rodata-seksjes by it bouwen foar avrxmega3- en avrtiny-arsjitektueren, wêrtroch mooglik ûnthâld-oerlapflaters produsearre
5.3. Ferzje 2.19 (Funksjonele feiligens release)
Gjin.
5.4. Ferzje 2.10
Ferhuzing mislearrings (XC8-1891) De beste fit allocator liet ûnthâld 'gaten' tusken seksjes nei linker ûntspanning. Njonken it fragmintearjen fan ûnthâld, fergrutte dit de mooglikheid dat d'r mislearrings foar linkerferpleatsing wiene yn ferbân mei pc-relatyf sprongen of oproppen dy't bûten berik wurde.
Ynstruksjes net omfoarme troch ûntspanning (XC8-1889) Linker ûntspanning kaam net foar foar sprong of oprop ynstruksjes waans doelen wurde berikber as ûntspande.
Missing funksjonaliteit (XC8E-388) Ferskate definysjes út , lykas clock_div_t en clock_prescale set () , waarden net definiearre foar apparaten, ynklusyf de ATmega324PB, ATmega328PB, ATtiny441 en ATtiny841.
Makro's ûntbrekke De preprocessor-makro's _XC8_MODE_, _XC8_VERS ION, _XC en _XC8 waarden net automatysk definieare troch de kompilator. Dizze binne no beskikber.
5.5. Ferzje 2.05
Ynterne kompilerflater (XC8-1822) By it bouwen ûnder Windows kin in ynterne kompilerflater makke wurde by it optimalisearjen fan koade.
RAM-oerlêst net ûntdutsen (XC8-1800, XC8-1796) Programma's dy't de beskikbere RAM hawwe oergien, waarden yn guon situaasjes net ûntdutsen troch de kompilator, wat resultearre yn in runtime-koadefout.
Welitten flash ûnthâld (XC8-1792) Foar avrxmega3- en avrtiny-apparaten kinne dielen fan it flash-ûnthâld net-programmearre wurde litten troch de MPLAB X IDE.
Mislearre om main út te fieren (XC8-1788) Yn guon situaasjes dêr't it programma hie gjin globale fariabelen definiearre, de runtime opstart koade net út en de wichtichste () funksje waard nea berikt.
Ferkearde ûnthâldynformaasje (XC8-1787) Foar avrxmega3- en avrtiny-apparaten melde it programma fan avr-grutte dat allinich-lêzen gegevens RAM konsumearje ynstee fan programmaûnthâld.
Unjildich programma ûnthâld lêzen (XC8-1783) Projekten gearstald foar apparaten mei programma ûnthâld yn kaart brocht yn de gegevens adres romte en dy't definiearje foarwerpen mei help fan de PROGMEM makro / attribút miskien hawwe lêzen dizze objekten út it ferkearde adres.
Ynterne flater mei attributen (XC8-1773) In ynterne flater barde as jo definiearre pointer foarwerpen mei de
_at () of attribút () tokens tusken de oanwizer namme en dereferenced type, bygelyksample, char*
_at (0x800150) cp; Der wurdt no in warskôging útjûn as sa'n koade tsjinkomt.
Net útfiere main (XC8-1780, XC8-1767, XC8-1754) It brûken fan EEPROM-fariabelen of it definiearjen fan fuses mei it konfiguraasje-pragma kin in ferkearde gegevensinitialisaasje feroarsake hawwe en/of programma-útfiering yn 'e runtime-opstartkoade beskoattele hawwe foardat de haad ( ) .
Fuse flater mei lytse apparaten (XC8-1778, XC8-1742) De attiny4/5/9/ 10/20/40-apparaten hiene in ferkearde fuse-lingte spesifisearre yn har koptekst files dy't liede ta linker flaters as jo besykje te bouwen koade dy't definiearre lont.
Segmentaasje fault (XC8-1777) In intermittent segmentation fout is korrizjearre.
Assembler crash (XC8-1761) De avr-as assembler koe ferûngelokke wêze doe't de kompilator ûnder Ubuntu 18 waard útfierd.
Objekten net wiske (XC8-1752) Net inisjalisearre objekten mei statyske opslachduur binne mooglik net wiske troch de startkoade foar runtime.
Konflikt apparaatspesifikaasje negearre (XC8-1749) De gearstaller genereart gjin flater doe't meardere apparaatspesifikaasjeopsjes waarden brûkt en ferskate apparaten oanjûn.
Unthâld korrupsje troch heap (XC8-1748) De _heap_start symboal waard ferkeard ynsteld, resultearret yn de mooglikheid fan gewoane fariabelen wurde beskeadige troch de heap.
Linker ferpleatse flater (XC8-1739) In linker-ferpleatsingsflater kin wêze útstjoerd as koade in rjmp of rcall befette mei in doel krekt 4k bytes fuort.
5.6. Ferzje 2.00
Gjin.
Bekende problemen
De folgjende binne beheiningen yn 'e operaasje fan' e kompilator. Dit kinne algemiene kodearringbeperkingen wêze, of ôfwikingen fan ynformaasje dy't yn 'e brûkershantlieding opnommen is. De label(s) mei heakjes yn 'e titel binne de identifikaasje fan dat probleem yn 'e trackingdatabase. Dit kin fan foardiel wêze as jo kontakt opnimme moatte mei stipe. Dy items dy't gjin labels hawwe binne beheiningen dy't modi operandi beskriuwe en dy't wierskynlik permanint yn wurking bliuwe.
6.1. MPLAB X IDE Yntegraasje
MPLAB IDE yntegraasje As Compiler moat wurde brûkt fan MPLAB IDE, dan moatte jo MPLAB IDE ynstallearje foardat jo Compiler ynstallearje.
6.2. Koade Generaasje
Segfault mei opsje foar seksje-ankers (XC8-3045) Programma dat funksjes definieare mei fariabele argumintlisten en dat de opsje -fsection-ankers brûke kin in ynterne kompilerflater útrûn hawwe: Segmentaasjefout.
Debug ynformaasje net syngronisearre (XC8-2948) As linker ûntspanningsoptimisaasjes ynstruksjes krimpt (bygelyksample call to rcall-ynstruksjes), boarne line om mappings te adressearjen kin net syngronisearje bliuwe as d'r mear dan ien krimpoperaasje yn in seksje foarkomt.
Yn ûndersteande example, der binne twa oproppen om foo dy't einigje ûntspannen oan relative oproppen.
PA ûnthâld tawizing flater (XC8-2881) By it brûken fan de prosedurele abstraksje-optimizers, kin de linker miskien melde flaters foar ûnthâldallokaasje as koadegrutte tichtby it bedrach fan beskikber programmaûnthâld op it apparaat is, ek al soe it programma de beskikbere romte kinne passe.
Net sa smart Smart-I0 (XC8-2872) De smart-io-funksje fan 'e gearstaller sil jildige, mar suboptimale koade generearje foar de snprint f-funksje as de funksje const-data-in-progmem is útskeakele of as it apparaat al syn flash yn kaart hat yn gegevensûnthâld.
Noch minder smart Smart-I0 (XC8-2869) De smart-io-funksje fan 'e kompilator sil jildige, mar suboptimale koade generearje as de -flto en -fno-ynboude opsjes beide wurde brûkt.
Suboptimale lês-allinnich gegevens pleatsing (XC8-2849) De linker is op it stuit net bewust fan de APPCODE- en APPDATA-ûnthâldseksjes, noch de [No-Read-While-Write-ôfdielingen yn 'e ûnthâldkaart. As gefolch is d'r in lytse kâns dat de linker allinich lêsgegevens tawize kin yn in net geskikt gebiet fan ûnthâld. De kâns op ferkeard pleatste gegevens nimt ta as de funksje const-data-in-progmem is ynskeakele, benammen as de funksje const-data-in-config-mapped-progmem ek ynskeakele is. Dizze funksjes kinne as nedich wurde útskeakele.
Objekt file oarder ferwurkjen (XC8-2863) De folchoarder wêryn objekten files wurde ferwurke troch de linker kin ferskille basearre op it brûken fan prosedurele abstraksje optimizations (-mpa opsje). Dit soe allinich ynfloed hawwe op koade dy't swakke funksjes definiearret oer meardere modules.
Linkerflater mei absolute (XC8-2777) As in objekt absolút makke is op in adres oan it begjin fan RAM en net-inisjalisearre objekten binne ek definieare, kin in linkerflater wurde trigger.
Koarte wekker-ID's (XC8-2775) Foar ATA5700/2-apparaten wurde de PHIDO/1-registers allinich definieare as 16 bits breed, ynstee fan 32 bits breed.
Linker crash by it roppen fan symboal (XC8-2758) De linker kin crashe as de -mrelax stjoerprogramma-opsje wurdt brûkt as de boarnekoade in symboal ropt dat is definiearre mei de -cc., -de f sym linker-opsje.
Ferkearde inisjalisaasje (XC8-2679) Dêr is in diskrepânsje tusken wêr't de begjinwearden foar guon globale / statyske bytegrutte objekten wurde pleatst yn gegevensûnthâld en wêr't de fariabelen tagong krije by runtime.
Ferkearde yndirekte funksje-oanroppen (XC8-2628) Yn guon gefallen kinne funksje-oanroppen makke fia in funksje-oanwizer opslein as ûnderdiel fan in struktuer miskien mislearje.
strtof jout nul foar heksadesimale floaten (XC8-2626) De bibleteek funksjes strtof et al en scanf () et al, sil altyd omsette in heksadesimale driuwende-point getal dat net oantsjutte in eksponint oan nul. Bygelyksample:
strtof ("Oxl", &endptr);
sil de wearde 0 werombringe, net I.
Unjildich stackadvisor-berjochten (XC8-2542, XC8-2541) Yn guon gefallen, de stack adviseur warskôging oangeande rekursion of ûnbepaalde stapel brûkt (mooglik troch it brûken fan alloca ()) wurdt net útstjoerd.
Mislearring mei dûbele ûnderbrekkingskoade (XC8-2421) Wêr't mear as ien ûnderbrekkingsfunksje itselde lichem hat, kin de kompilator de útfier hawwe foar ien ûnderbrekkingsfunksje de oare oproppe. Dit sil resultearje yn alle call-clobbered registers wurde bewarre ûnnedich, en de interrupts sille wurde ynskeakele noch foardat de epilooch fan de hjoeddeiske interrupt handler hat útfierd, wat kin liede ta koade flater.
Ferkearde útfier mei ûnjildich DFP-paad (XC8-2376) As de kompilator wurdt oproppen mei in ûnjildich DFP-paad en in 'spec' file bestiet foar it selekteare apparaat, de kompilator rapportearret it ûntbrekkende apparaatfamyljepakket net en selekteart ynstee de 'spec' file, wat dan liede kin ta in ûnjildige útfier. De 'spesifikaasje' files miskien net by de tiid mei de ferspraat DFPs en wiene bedoeld foar gebrûk mei ynterne gearstaller testen allinne.
Unthâldoerlap net ûntdutsen (XC8-1966) De gearstaller is net detect de ûnthâld oerlaap fan objekten makke absolút op in adres (fia _at ( )) en oare objekten mei help fan de seksje ( ) specifier en dy't keppele binne oan itselde adres.
Mislearring mei biblioteekfunksjes en _memx (XC8-1763) Neamde libgcc-floatfunksjes mei in argumint yn 'e memx-adresromte kinne miskien mislearje. Tink derom dat biblioteekroutines wurde neamd fan guon C-operators, dus bglample, de folgjende koade wurdt beynfloede:
werom regFloatVar > memxFloatVar;
Beheinde libgcc ymplemintaasje (AVRTC-731) Foar de ATTiny4/5/9/10/20/40-produkten is de standert C / Math-biblioteek-ymplemintaasje yn libgcc heul beheind as net oanwêzich.
Programma ûnthâld beheiningen (AVRTC-732) Programma ûnthâld ôfbyldings foarby 128 kb wurde stipe troch de toolchain; lykwols, der binne bekende eksimplaren fan linker ôfbrekke sûnder ûntspanning en sûnder in nuttich flater berjocht yn stee fan it generearjen fan de fereaske funksje stubs as de -mre lax opsje wurdt brûkt.
Beperkingen foar nammeromte (AVRTC-733) Neamde adresromten wurde stipe troch de toolchain, ûnder foarbehâld fan de beheiningen neamd yn 'e brûker syn gids seksje Special Type Qualifiers.
Tiidsônes De biblioteekfunksjes nimme GMT oan en stypje gjin lokale tiidsônes, dus lokale tiid ( ) sil deselde tiid weromkomme as gmtime ( ), bygelyksample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Dokuminten / Resources
![]() |
MICROCHIP MPLAB XC8 C Compiler Development Software [pdf] Hânlieding foar brûkers MPLAB XC8 C, MPLAB XC8 C Compiler Untwikkelingssoftware, Compiler Untwikkelingssoftware, Untwikkelingssoftware, Software |