MPLAB® XC8 C kompilaatori versiooni 2.41 väljalaskemärkmed AVR® MCU jaoks
Kasutusjuhend
MPLAB XC8 C kompilaatori arendustarkvara
KÄESOLEV DOKUMENT SISALDAB MIKROKIIPIDE AVR-SEADMETE SIHTIMISELT OLULIST TEAVE KOHTA MPLAB XC8 C KOMPILERIGA.
PALUN LUGEGE SEDA ENNE SELLE TARKVARA KASUTAMIST. KUI KASUTATE KOMPILERIT 8-BITISTE PIC-SEADMETE PUHUL, VT MPLAB XC8 C KOMPILERI VÄLJAANNE MÄRKUSED.
Läbiview
1.1. Sissejuhatus
See Microchip MPLAB® XC8 C kompilaatori väljalase sisaldab mitmeid uusi funktsioone ja veaparandusi.
1.2. Ehitamise kuupäev
Selle kompilaatori versiooni ametlik ehituskuupäev on 8. veebruar 2023.
1.3. Eelmine versioon
Eelmine MPLAB XC8 C kompilaatori versioon oli 2.40, mis ehitati 3. juulil 2022.
1.4. Funktsionaalne ohutusjuhend
Funktsionaalohutuse juhend MPLAB XC kompilaatorite jaoks on saadaval dokumentatsioonipaketis, kui ostate funktsionaalohutuse litsentsi.
1.5. Komponentide litsentsid ja versioonid
AVR MCU tööriistade MPLAB XC8 C kompilaator on kirjutatud ja levitatud GNU üldise avaliku litsentsi (GPL) all, mis tähendab, et selle lähtekoodi levitatakse vabalt ja avalikkusele.
GNU GPL-i alla kuuluvate tööriistade lähtekoodi saab Microchipist eraldi alla laadida websaidile. Saate lugeda GNU GPL-i failist, mis asub teie installilitsentsi.txt avr/doc kataloogi alamkataloogis. GPL-i aluseks olevate põhimõtete üldise arutelu leiate siit.
Päisefailide, linkeri skriptide ja käitusaegsete teekide tugikood on patenteeritud kood ega kuulu GPL-i alla.
See kompilaator on GCC versiooni 5.4.0, binutils versiooni 2.26 ja kasutab avr-libc versiooni 2.0.0.
1.6. Süsteeminõuded
MPLAB XC8 C kompilaator ja selle kasutatav litsentsitarkvara on saadaval mitmesuguste operatsioonisüsteemide jaoks, sealhulgas järgmiste operatsioonisüsteemide 64-bitised versioonid: Microsoft® Windows® 10 professionaalsed väljaanded; Ubuntu® 18.04; ja macOS® 10.15.5. Windowsi binaarfailid on koodallkirjaga. MacOS-i binaarfailid on koodallkirjaga ja notariaalselt kinnitatud. MPLAB XC võrgulitsentsi server on saadaval mitmesuguste 64-bitiste operatsioonisüsteemide jaoks, sealhulgas Microsoft Windows 10 ja uuemate versioonide jaoks; Ubuntu 18.04 ja uuemad; või macOS 10.15 ja uuemad. Server võib töötada ka mitmesugustel muudel operatsioonisüsteemidel, sealhulgas Windows Serveril, Linuxi distributsioonidel, nagu Oracle® Enterprise Linux® ja Red Hate Enterprise Linuxil, samuti toetatud operatsioonisüsteemide vanematel versioonidel. MPLAB XC võrgulitsentsiserverit aga nendes operatsioonisüsteemides ei testita. Võrgulitsentsiserverit MPLAB XC saab käitada toetatud OS-i virtuaalmasinatel, kasutades võrgulitsentside jaoks virtuaalmasina litsentsi (SW006021-VM). Kõik MPLAB XC võrguserveri 32-bitised versioonid lõpetatakse alates versioonist 3.00.
Toetatavad seadmed
See kompilaator toetab kõiki vabastamise ajal saadaolevaid 8-bitise AVR MCU seadmeid. Vaadake (kompilaatori kataloogist) kõigi toetatud seadmete loendit. Need failid on samuti loetletud
avr_chipinfo.html doc konfiguratsioonibiti seaded iga seadme jaoks.
1.7. Väljaanded ja litsentsi täiendused
MPLAB XC8 kompilaatorit saab aktiveerida litsentsitud (PRO) või litsentsimata (tasuta) tootena. Kompilaatori litsentsimiseks peate ostma aktiveerimisvõtme. Litsents võimaldab tasuta tootega võrreldes kõrgemat optimeerimise taset. Litsentsita kompilaatorit saab ilma litsentsita töötada määramata aja. MPLAB XC8 Functional Safety kompilaator tuleb aktiveerida Microchipist ostetud funktsionaalohutuse litsentsiga. Ilma selle litsentsita kompilaator ei tööta. Pärast aktiveerimist saate valida mis tahes optimeerimistaseme ja kasutada kõiki kompilaatori funktsioone. See MPLAB XC Functional Safety Compileri väljalase toetab võrguserveri litsentsi.
Litsentsitüüpide ja litsentsiga kompilaatori installimise kohta leiate teavet dokumendist MPLAB XC C kompilaatorite installimine ja litsentsimine (DS50002059).
1.8. Paigaldamine ja aktiveerimine
Vt ka migratsiooniprobleemide ja piirangute jaotisi, et saada olulist teavet selle kompilaatoriga kaasas oleva uusima litsentsihalduri kohta.
Kui kasutate MPLAB IDE-d, installige enne selle tööriista installimist kindlasti uusim MPLAB X IDE versioon 5.0 või uuem. Enne kompilaatori installimist sulgege IDE. Käivitage (Windows), (Linux) või (macOS) .exe .run .app kompilaatori installirakendus ja järgige ekraanil kuvatavaid juhiseid. XC8-1.00.11403-windows.exe Soovitatav on installimise vaikekataloog. Kui kasutate Linuxit, peate installima kompilaatori terminali ja juurkonto kaudu. Installige administraatoriõigustega macOS-i kontoga.
Aktiveerimine toimub nüüd installimisest eraldi. Lisateabe saamiseks vaadake dokumenti MPLAB® XC C kompilaatorite litsentsihaldur (DS52059).
Kui otsustate käivitada kompilaatori hindamislitsentsi alusel, saate nüüd koostamise ajal hoiatuse, kui olete hindamisperioodi lõpust 14 päeva jooksul. Sama hoiatus antakse, kui olete oma HPA tellimuse lõppemisest 14 päeva jooksul.
XC võrgulitsentsi server on eraldi installer ja see ei sisaldu ühe kasutaja kompilaatori installiprogrammis.
XC License Manager toetab nüüd ujuva võrgulitsentside rändlust. See mobiilikasutajatele mõeldud funktsioon võimaldab ujuval litsentsil lühikeseks ajaks võrgust välja lülitada. Seda funktsiooni kasutades saate võrguühenduse katkestada ja siiski kasutada oma MPLAB XC kompilaatorit. Selle funktsiooni kohta lisateabe saamiseks vaadake XCLM-i installi kausta doc.
MPLAB X IDE sisaldab rändluse visuaalseks haldamiseks litsentside akent (Tööriistad > Litsentsid).
1.8.1. Installimisprobleemide lahendamine
Kui teil tekib kompilaatori installimisel mõne Windowsi operatsioonisüsteemi alla raskusi, proovige järgmisi soovitusi.
Käivitage installimine administraatorina.
Seadistage installirakenduse õigused valikule "Täielik kontroll". (Paremklõpsake failil, valige Atribuudid, vahekaart Turvalisus, valige kasutaja, redigeerige.)
Määrake ajutise kausta õigused valikule "Täielik kontroll".
Ajutise kausta asukoha määramiseks tippige käsku Käivita %temp% (Windowsi logoga klahv + R).
See avab failiuurija dialoogi, mis näitab seda kataloogi ja võimaldab teil määrata selle kausta tee.
1.9. Koostaja dokumentatsioon
Kompilaatori kasutusjuhendid saab avada HTML-lehelt, mis avaneb teie brauseris, kui klõpsate MPLAB X IDE armatuurlaual sinist abinuppu, nagu on näidatud ekraanipildil.
Kui ehitate 8-bitiste AVR-i sihtmärkide jaoks, sisaldab MPLAB® XC8 C kompilaatori kasutusjuhend AVR® MCU jaoks teavet kompilaatori valikute ja funktsioonide kohta, mis on selle arhitektuuri jaoks rakendatavad.

1.10. Klienditugi
Microchip tervitab veateateid, soovitusi või kommentaare selle kompilaatori versiooni kohta. Palun suunake kõik veateated või funktsioonipäringud tugisüsteemi kaudu.
Dokumentatsiooni värskendused
MPLAB XC8 dokumentatsiooni on-line ja ajakohastatud versioonide vaatamiseks külastage Microchipi veebipõhist tehnilist dokumentatsiooni websaidile. Uus või värskendatud AVR-i dokumentatsioon selles väljaandes:
- MPLAB® XC8 C kompilaatori kasutusjuhend AVR® MCU jaoks (versioon G)
- AVR® GNU tööriistaahel MPLAB® XC8 migratsioonijuhendile (redaktsioon A)
- Hexmate'i kasutusjuhend (redaktsioon B)
AVR® GNU Toolchain to MPLAB® XC8 migratsioonijuhend kirjeldab lähtekoodi ja ehitussuvandite muudatusi, mis võivad olla vajalikud juhul, kui otsustate migreerida C-põhise projekti AVR 8-bitisest GNU tööriistaahelast Microchip MPLAB XC8 C kompilaatorisse. Microchip Unified Standard Library viitejuhendis kirjeldatakse Microchip Unified Standard Library määratletud funktsioonide käitumist ja liidest, samuti teegitüüpide ja makrode kavandatud kasutust. Osa sellest teabest sisaldus varem MPLAB® XC8 C kompilaatori kasutusjuhendis AVR® MCU jaoks. Seadmespetsiifiline teegi teave sisaldub endiselt selles kompilaatori juhendis.
Kui te alles alustate 8-bitiste seadmete ja MPLAB XC8 C kompilaatoriga, sisaldab MPLAB® XC8 kasutusjuhend sisseehitatud inseneridele – AVR® MCU-dele (DS50003108) teavet projektide seadistamise kohta MPLAB X IDE-s ja koodi kirjutamise kohta. esimene MPLAB XC8 C projekt. Seda juhendit levitatakse nüüd koos kompilaatoriga.
Hexmate'i kasutusjuhend on mõeldud neile, kes kasutavad Hexmate'i eraldiseisva rakendusena.
Mis on uut
Järgmised on uued AVR-i sihtfunktsioonid, mida kompilaator nüüd toetab. Versiooninumber alampealkirjades näitab esimest kompilaatori versiooni, mis toetab järgmisi funktsioone.
3.1. Versioon 2.41
Bootrow tugi (XC8-3053) Kompilaator paigutab HEX-faili kõigi sektsioonide sisu, mille eesliide on at.bootrow aadress 0x860000. Neid jaotisi kasutatakse BOOTROW mälu jaoks, mis on mõeldud võtmete ja muu turvalise teabe salvestamiseks, mis peaks olema juurdepääsetav ainult alglaadurile.
Üleliigse tagastamise kõrvaldamine (XC8-3048) Kompilaator kõrvaldab nüüd ret-funktsioonide üleliigsed käsud sabahüppega, kui kasutatakse kohandatud linkeri skripte. See optimeerimine sarnaneb varem teostatuga, kuid nüüd tehakse seda kõigis orb jaotistes, isegi kui kasutatakse kohandatud linkeri skripti ja parimat jaotusskeemi ei kasutata. Ajatüübi muudatus (XC8-2982, 2932) C99 standardse teegi tüüp on muudetud tüübist time_t tüübiks, mis annab koodisuuruse täiustused mõnes ajaga seotud pikas funktsioonis, näiteks. allkirjastamata pikk mktime()
Uus nop (XC8-2946, 2945) Makro on lisatud. See makro lisab no-NOP() nop operatsioonijuhis väljundisse.
XCLM-i värskendus (XC8-2944) Kompilaatoriga kasutatavat litsentsihaldurit on värskendatud ja see reageerib nüüd kompilaatori litsentsi üksikasjade kontrollimisel paremini.
Trampolined calls (XC8-2760) Kompilaator saab nüüd asendada pikaajalised kõnejuhised lühemate suhtekõnedega, kui käskude suhtelised vormid on tavaliselt oma sihtkoha levialast väljas. Sellises olukorras üritab kompilaator asendada käskudega kutsuda rccal käsku, misampoline' täitmine nõutud aadressile, ntample: jmp
helista tramp_foo ; kutsus foo
…
helista tramp_foo
…
tramp_foo:
jmp foo
Seda optimeerimist koos sarnaste programmivoo optimeerimisega juhib suvand -mrelax.
3.2. Versioon 2.40
Uue seadme tugi Tugi on nüüd saadaval järgmistele AVR osadele: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, A64 ja AVR32EA64, A48.
Täiustatud protseduuriline abstraktsioon Protseduurilise abstraktsiooni (PA) optimeerimise tööriista on täiustatud, nii et funktsioonikutsingu käsku (/) sisaldavat koodi saab kirjeldada. See toimub ainult siis, kui pinu ei kasutata argumentide edastamiseks ega funktsioonilt tagastusväärtuse saamiseks. Pinu kasutatakse muutujate argumentide loendiga funktsiooni kutsumisel või funktsiooni kutsumisel, mis võtab rohkem argumente kui selleks otstarbeks määratud registrid. Selle funktsiooni saab keelata, kasutades suvandit või protseduurilise abstraktsiooni saab täielikult keelata objektifaili või funktsiooni jaoks, kasutades vastavalt - ja või kasutades atribuuti (spetsifikaatorit) valikuliselt koos funktsioonidega.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa Koodi katvuse makro Kompilaator defineerib nüüd makro, kui kehtiv suvand on määratud __nopa __CODECOV -mcodecov.
Mälu reserveerimise suvand Draiver aktsepteerib nüüd AVR-i sihtmärkide loomisel suvandit xc8-cc -mreserve=space@start:end. See suvand reserveerib määratud mäluvahemiku kas andme- või programmimälus, takistades linkeril selles piirkonnas koodi või objekte sisestamast. Nutikam nutikas IO Smart IO funktsioonides on tehtud mitmeid täiustusi, sealhulgas üldised muudatused printf-i põhikoodis, %n konversioonispetsifikaatori käsitlemine iseseisva variandina, vararg pop-rutiinide sidumine nõudmisel, võimaluse korral lühemate andmetüüpide kasutamine. Funktsiooni IO argumendid ja faktooringu üldine kood välja laiuse ja täpsuse käsitlemisel. See võib kaasa tuua märkimisväärse koodi ja andmete kokkuhoiu ning suurendada IO täitmiskiirust.
3.3. Versioon 2.39 (funktsionaalse ohutuse väljalase)
Võrguserveri litsents See MPLAB XC8 Functional Safety Compileri väljalase toetab võrguserveri litsentsi.
3.4. Versioon 2.36
Mitte ühtegi.
3.5. Versioon 2.35
Uue seadme tugi Tugi on saadaval järgmistele AVR-i osadele: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 ja AVR64DD32.
Täiustatud konteksti vahetamine Uus suvand -mcall-isr-prologues muudab seda, kuidas katkestusfunktsioonid registreid sisenemisel salvestavad ja kuidas need registrid katkestusrutiini lõppedes taastatakse. See töötab sarnaselt suvandiga -mcall-prologues, kuid mõjutab ainult katkestusfunktsioone (ISR).
Veelgi parem kontekstivahetus Uus suvand -mgas-isr-prologues juhib kontekstilüliti koodi, mis on loodud väikeste katkestusteenuste rutiinide jaoks. Kui see funktsioon on sisse lülitatud, laseb see monteerija ISR-i registrikasutuse osas skannida ja salvestab need kasutatud registrid ainult vajaduse korral.
Konfigureeritav välkmälukaardistamine Mõnel AVR DA ja AVR DB perekonna seadmel on SFR (nt FLMAP), mis määrab, milline 32k osa programmimälust kaardistatakse andmemällu. Uut suvandit mconst-data-in-config-mapped-progmem saab kasutada selleks, et linker paigutaks kõik const-kvalifitseeritud andmed ühte 32k sektsiooni ja initsialiseeriks automaatselt vastava SFR-registri, et tagada nende andmete kaardistamine andmemällu. ruumi, kus sellele tõhusamalt juurde pääseda.
Microchip Unified Standard Libraries Kõik MPLAB XC kompilaatorid jagavad Microchip Unified Standard Library, mis on nüüd saadaval koos selle MPLAB XC8 väljalaskega. MPLA# XC8 C kompilaatori kasutusjuhend AVO MCU jaoks ei sisalda enam nende standardfunktsioonide dokumentatsiooni. Selle teabe leiate nüüd Microchip Unified Standard Library viitejuhendist. Pange tähele, et mõned varem avr-libc defineeritud funktsioonid pole enam saadaval. (Vaata Lila funktsioone.)
Smart I0 Uute ühtsete teekide osana genereeritakse printf- ja scanf-perekondades olevad I0-funktsioonid nüüd iga järgu jaoks kohandatud viisil, lähtudes sellest, kuidas neid funktsioone programmis kasutatakse. See võib programmi kasutatavaid ressursse oluliselt vähendada.
Nutikas ICI abivalik Nutikate I0 funktsioonide (nt print f () või scanf ()) kõnede analüüsimisel ei saa kompilaator alati vormingustringi põhjal kindlaks teha ega järeldada argumentidest neid konversioonispetsifikaatoreid, mida kõne nõuab. Varem ei teinud kompilaator alati mingeid eeldusi ja tagas, et 10 täielikult funktsioneerivat funktsiooni seoti programmi lõpliku kujutisega. Lisatud on uus – msmart-io-format=fmt võimalus, et kasutaja saaks kompilaatorit hoopis informeerida nutikate I0 funktsioonide kasutatavatest konversioonispetsifikaatidest, mille kasutus on mitmetähenduslik, vältides liialt pikkade 10 rutiinide linkimist. (Lisateavet vaadake Smart-io-vormingu valikust.)
Kohandatud jaotiste paigutamine Varem paigutas suvand -W1, –section-start määratud jaotise soovitud aadressile ainult siis, kui linkeri skript määratles sama nimega väljundsektsiooni. Kui see nii ei olnud, paigutati jaotis linkeri valitud aadressile ja seda võimalust sisuliselt ignoreeriti. Nüüd kasutatakse seda valikut kõigi kohandatud jaotiste puhul, isegi kui linkeri skript seda jaotist ei määratle. Pange tähele, et standardsektsioonide puhul on näiteks . tekst,. bss või . andmetel on kõige sobivamal jaotajal endiselt täielik kontroll nende paigutuse üle ja valikul ei ole mingit mõju. Kasutage suvandit -ton, -Tsection=addr, nagu on kirjeldatud kasutusjuhendis.
3.6. Versioon 2.32
Viru juhtimine PRO-kompilaatori litsentsiga saadaval olevat kompilaatori virna juhtimise funktsiooni saab kasutada programmis kasutatava mis tahes virna maksimaalse sügavuse hindamiseks. See konstrueerib ja analüüsib programmi kutsegraafikut, määrab iga funktsiooni pinukasutuse ja koostab aruande, millest saab järeldada programmis kasutatavate virnade sügavust. See funktsioon on lubatud käsurea suvandi -mchp-stack-usage kaudu. Pärast täitmist prinditakse kokkuvõte virna kasutamisest. Üksikasjalik virna aruanne on saadaval kaardil file, mida saab taotleda tavapärasel viisil.
Uue seadme tugi Tugi on saadaval järgmistele AVR-i osadele: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, AVR32. Sissetõmmatud seadme tugi Tugi ei ole enam saadaval järgmistele AVR-i osadele: AVR48DA16, AVR28DA16 ja AVR32DA16.
3.7. Versioon 2.31
Mitte ühtegi.
3.8. Versioon 2.30
Uus suvand andmete initsialiseerimise takistamiseks Uus draiveri suvand -mno-data-init takistab andmete lähtestamist ja bss-i sektsioonide tühjendamist. See toimib, surudes maha do-kopeerimisandmete väljundi ja teeb koostamisel selged bss-sümbolid files, mis omakorda takistab linkeri poolt nende rutiinide kaasamist.
Täiustatud optimeerimised Tehtud on mitmeid optimeerimise täiustusi, sealhulgas eemaldatud üleliigsed tagastusjuhised, eemaldatud mõned hüpped pärast käsku vahelejätmine, kui bitt on, ning täiustatud protseduuriline abstraktsioon ja võime seda protsessi itereerida. Nüüd on saadaval lisavalikud, et juhtida mõnda neist optimeerimistest, täpsemalt -f sektsiooniankrud, mis võimaldab juurdepääsu staatilistele objektidele ühe sümboli suhtes; -mpa-iterations=n, mis võimaldab muuta protseduurilise abstraktsiooni iteratsioonide arvu vaikeväärtusest 2; ja -mpa-callcost-shortcall, mis teostab agressiivsemat protseduurilist abstraktsiooni, lootuses, et linker saab pikki kõnesid lõdvestada. See viimane valik võib koodi suurust suurendada, kui aluseks olevad eeldused ei realiseeru.
Uue seadme tugi Tugi on saadaval järgmistele AVR osadele: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DA28, AVR128, AVR32DA128, AVR48, VR128DB64. Sissetõmmatud seadme tugi tugi ei ole enam saadaval järgmistele AVR-i osadele: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616.
3.9. Versioon 2.29 (funktsionaalse ohutuse väljalase)
Päis file sisseehitatud kompilaatori jaoks Tagamaks, et kompilaator vastaks keele spetsifikatsioonidele nagu MISRA, päis file, mille lisab automaatselt , on värskendatud. See päis sisaldab kõigi sisseehitatud funktsioonide prototüüpe, nagu builtin_avr_nop ( ) ja builtin avr delay_cycles () . Mõned sisseehitatud seadmed ei pruugi MISRA-ga ühilduda; need saab ära jätta, lisades kompilaatori käsureale defineXCSTRICT_MISRA. Sisseehitatud seadmeid ja nende deklaratsioone on värskendatud, et kasutada fikseeritud laiusega tüüpe.
3.10. Versioon 2.20
Uue seadme tugi Tugi on saadaval järgmistele AVR-i osadele: ATTINY1624, ATTINY1626 ja ATTINY1627.
Parem kõige sobivam jaotus Kompilaatori parima sobivuse jaoturit (BFA) on täiustatud nii, et jaotised jaotatakse paremat optimeerimist võimaldavas järjekorras. BFA toetab nüüd nimega aadressiruume ja saab paremini hakkama andmete initsialiseerimisega.
Täiustatud protseduuriline abstraktsioon Protseduurilise abstraktsiooni optimeerimine toimub nüüd rohkemate koodijadade puhul. Varasemad olukorrad, kus see optimeerimine võis koodi suurust suurendada, on lahendatud, muutes optimeerimiskoodi linkeri prügikogumisprotsessist teadlikuks.
AVR Assembleri puudumine AVR Assembler ei ole enam selle distributsiooniga kaasas.
3.11. Versioon 2.19 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.
3.12. Versioon 2.10
Koodi katvus See väljalase sisaldab koodi katvuse funktsiooni, mis hõlbustab projekti lähtekoodi täitmise ulatuse analüüsi. Kasutage selle lubamiseks suvandit -mcodecov=ram. Pärast programmi käivitamist teie riistvaras koondatakse seadmesse koodi katvuse teave ning seda saab MPLAB X IDE-le edastada ja kuvada koodikatte pistikprogrammi kaudu. Selle pistikprogrammi kohta teabe saamiseks vaadake IDE dokumentatsiooni. Funktsiooni #pragma nocodecov saab kasutada järgmiste funktsioonide katvuse analüüsist väljajätmiseks. Ideaalis tuleks pragma lisada algusesse file kogu selle välistamiseks file katvuse analüüsist. Alternatiivina võib _attribute_ ( (nocodecov) ) kasutada konkreetse funktsiooni katvuse analüüsist väljajätmiseks.
Seadme kirjeldus files Uus seade file nimega avr_chipinfo . html asub kompilaatori distributsiooni kataloogis docs. See file loetleb kõik seadmed, mida kompilaator toetab. Klõpsake seadme nimel ja see avab lehe, mis näitab kõiki selle seadme lubatud konfiguratsioonibittide seadistusi/väärtusi koos nt.amples. Protseduuriline abstraktsioon
Kompilaatorisse on lisatud protseduurilised abstraktsiooni optimeerimised, mis asendavad komplekteerimiskoodi tavalised plokid kõnedega selle ploki ekstraktitud koopiale. Neid teostab eraldi rakendus, mille kompilaator 2., 3. või s taseme optimeerimise valimisel automaatselt välja kutsub. Need optimeerimised vähendavad koodi suurust, kuid võivad vähendada täitmise kiirust ja koodi silumist. Protseduurilise abstraktsiooni saab keelata kõrgematel optimeerimistasemetel, kasutades suvandit -mno-pa, või lubada madalamatel optimeerimistasemetel (olenevalt teie litsentsist), kasutades -mpa. Selle saab objekti puhul keelata file kasutades -mno-pa-on-file=filenimi või funktsiooni jaoks keelatud, kasutades -mno-pa-on-function=function. Lähtekoodis saab funktsiooni jaoks protseduurilise abstraktsiooni keelata, kasutades funktsiooni definitsiooniga atribuuti ( (nopa) ) või kasutades nopa, mis laieneb atribuudiks ( (nopa, noinline) ) ja seega takistab funktsiooni sisselülitamist. ja seal on sisse kirjutatud koodi abstraktsioon.
Pragma lukustusbittide tugi #pragma konfiguratsiooni saab nüüd kasutada nii AVR-i lukustusbittide kui ka muude konfiguratsioonibittide määramiseks. Kontrollige avr_chipinfo . html file (eespool mainitud) selle pragma jaoks kasutatavate seadistuste/väärtuste paaride jaoks. Uue seadme tugi Tugi on saadaval järgmistele osadele: AVR28DAl28, AVR64DAl28, AVR32DA 128 ja AVR48DA 128.
3.13. Versioon 2.05
Rohkem bitte teie raha eest Selle kompilaatori ja litsentsihalduri macOS-i versioon on nüüd 64-bitine rakendus. See tagab, et kompilaator installib ja töötab macOS-i viimastes versioonides ilma hoiatusteta.
Const-objektid programmimälus Kompilaator saab nüüd paigutada const-kvalifitseeritud objektid programmi välkmällu, mitte hoida neid RAM-is. Kompilaatorit on muudetud nii, et miinused t-kvalifitseeritud globaalsed andmed salvestatakse programmi välkmällu ja nendele andmetele saab otse ja kaudselt juurde pääseda, kasutades vastavaid programmimälu juhiseid. See uus funktsioon on vaikimisi lubatud, kuid selle saab keelata, kasutades suvandit -mno-const-data-in-progmem. Avrxmega3 ja avrtiny arhitektuuride puhul pole see funktsioon vajalik ja see on alati keelatud, kuna programmimälu on nende seadmete jaoks kaardistatud andmeaadressiruumi.
Standard tasuta selle kompilaatori litsentsimata (tasuta) versioonid võimaldavad nüüd optimeerimist kuni tasemeni 2 (kaasa arvatud). See võimaldab sarnast, kuigi mitte identset väljundit, mis oli varem võimalik standardlitsentsi kasutades.
Tere tulemast AVRASM2 2-bitiste seadmete AVRASM8 monteerija on nüüd XC8 kompilaatori installeris. Seda komplekteerijat XC8 kompilaator ei kasuta, kuid see on saadaval käsitsi kirjutatud koosteallikal põhinevate projektide jaoks.
Uue seadme tugi Tugi on saadaval järgmistele osadele: ATMEGA1608, ATMEGA1609, ATMEGA808 ja ATMEGA809.
3.14. Versioon 2.00
Tipptaseme draiver Uus draiver, nimega xc8-cc, asub nüüd eelmise avr-gcc draiveri ja xc8 draiveri kohal ning võib sihtseadme valiku alusel helistada sobivale kompilaatorile. See draiver aktsepteerib GCC-stiilis valikuid, mis tõlgitakse või edastatakse käivitatavale kompilaatorile. See draiver võimaldab sarnase semantikaga sarnaste valikute komplekti kasutada mis tahes AVR- või PIC-sihtmärgiga ja on seega soovitatav viis kompilaatori käivitamiseks. Vajadusel saab vana avr-gcc draiveri otse välja kutsuda, kasutades vana stiili suvandeid, mida see kompilaatori varasemates versioonides aktsepteeris.
Ühine C-liides See kompilaator ühildub nüüd MPLAB-i ühise C-liidesega, võimaldades lähtekoodi hõlpsamini teisaldada kõigis MPLAB XC-kompilaatorites. Valik -mext=cci nõuab seda funktsiooni, võimaldades paljude keelelaiendite jaoks alternatiivset süntaksit.
Uus raamatukoguhoidja juht Uus raamatukoguhoidja juht asub eelmise PIC-raamatukoguhoidja ja AVR-i raamatukoguhoidja kohal. See draiver aktsepteerib GCC-arhiivi stiilis valikuid, mis tõlgitakse või edastatakse täidetavale raamatukoguhoidjale. Uus draiver võimaldab PIC- või AVR-teegi loomiseks või manipuleerimiseks kasutada sarnase semantikaga sarnast valikute komplekti file ja on seega soovitatav viis raamatukoguhoidja kutsumiseks. Kui seda nõutakse pärandprojektide jaoks, saab eelmise raamatukoguhoidja otse välja kutsuda, kasutades vanas stiilis valikuid, mida see kompilaatori varasemates versioonides aktsepteeris.
Rändeprobleemid
Järgnevalt on toodud funktsioonid, mida kompilaator käsitleb nüüd erinevalt. Need muudatused võivad vajada lähtekoodi muutmist, kui teisaldate koodi sellesse kompilaatori versiooni. Versiooninumber alampealkirjades näitab esimest kompilaatori versiooni, mis toetab järgnevaid muudatusi.
4.1. Versioon 2.41
Ebatäpsed fma-funktsioonid on eemaldatud (XC8-2913) C99 standardteegi fma 0 -perekonna funktsioonid ( ) ei arvutanud ühele ümardamisele lõpmatu täpsusega korrutamist, vaid kogus iga toiminguga ümardamisvigu. Need funktsioonid on kaasasolevast teegist eemaldatud.
4.2. Versioon 2.40
Mitte ühtegi.
4.3. Versioon 2.39 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.
4.4. Versioon 2.36 Puudub.
4.5. Versioon 2.35
String-aluste käsitlemine (XC8-2420) Teiste XC-kompilaatoritega kooskõla tagamiseks ei püüa XC8 string-to-funktsioonid, nagu strtol () jne, enam sisendstringi teisendada, kui määratud alus on suurem kui 36 ja määrab selle asemel errno väärtuseks EINVAL. C-standard ei täpsusta funktsioonide käitumist selle baasväärtuse ületamisel.
Sobimatu kiiruse optimeerimine 3. taseme optimeerimise (-03) valimisel lubati protseduurilise abstraktsiooni optimeerimine. Need optimeerimised vähendavad koodi suurust koodi kiiruse arvelt, seega poleks tohtinud seda teha. Seda optimeerimistaset kasutavad projektid võivad selle versiooniga koostamisel koodi suuruses ja täitmiskiiruses näha erinevusi.
Raamatukogu funktsionaalsus Paljude standardsete C teegi funktsioonide kood pärineb nüüd Microchipi ühtsest standardteegist, mis võib teatud juhtudel käituda erinevalt võrreldes endise avr-libc teegiga. Näiteksample, pole vormingu sisselülitamiseks enam vaja linkida teegis 1printf flt (suvand -1printf_flt). I0 ujukvormingu spetsifikaatorite tugi. Targad I0 Microchip Unified Standard Library funktsioonid muudavad selle valiku üleliigseks. Lisaks pole _P-liitega rutiinide kasutamine stringi- ja mälufunktsioonide jaoks (nt strcpy_P ( ) jne), mis töötavad välkmälu konststringidel, enam vajalik. Standardsed C rutiinid (nt strcpy ) töötavad selliste andmetega õigesti, kui const-data-in-program-memory funktsioon on lubatud.
4.6. Versioon 2.32
Mitte ühtegi.
4.7. Versioon 2.31
Mitte ühtegi.
4.8. Versioon 2.30
Mitte ühtegi.
4.1. Versioon 2.29 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.
4.2. Versioon 2.20
Muudetud DFP paigutust Kompilaator eeldab nüüd teistsugust paigutust, mida kasutavad DFP-d (Device Family Packs). See tähendab, et vanem DFP ei pruugi selle versiooniga töötada ja vanemad kompilaatorid ei saa kasutada uusimaid DFP-sid.
4.3. Versioon 2.19 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.
4.4. Versioon 2.10
Mitte ühtegi
4.5. Versioon 2.05
Const-objektid programmimälus Pange tähele, et vaikimisi paigutatakse const-kvalifitseeritud objektid programmimällu ja neile pääseb juurde (nagu kirjeldatud toonis). See mõjutab teie projekti suurust ja täitmiskiirust, kuid peaks vähendama RAM-i kasutamist. Selle funktsiooni saab vajadusel keelata, kasutades suvandit -mnoconst-data-in-progmem.
4.6. Versioon 2.00
Konfiguratsioonikaitsmed Seadme konfiguratsioonikaitsmeid saab nüüd programmeerida, kasutades konfiguratsioonipragmat, millele järgneb seadistusväärtuste paar, et määrata kaitsme olek, nt.
#pragma config WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
Absoluutsed objektid ja funktsioonid Objekte ja funktsioone saab nüüd paigutada mällu kindlale aadressile, kasutades CCI (aadressi) spetsifikaatorit, näiteksample:
#kaasa
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
Selle täpsustaja argument peab olema konstant, mis tähistab aadressi, kuhu esimene bait või käsk paigutatakse. RAM-i aadressid näidatakse nihkega 0x800000. Selle funktsiooni kasutamiseks lubage CCI.
Uus katkestusfunktsiooni süntaks Kompilaator aktsepteerib nüüd CCI _interrupt (arv) spetsifikaatorit, mis näitab, et C-funktsioonid on katkestuste töötlejad. Täpsustaja võtab katkestuse numbri, näiteksample:
#kaasa
void __katkestus(SPI_STC_vect_num) spi_Isr(void) { … }
Parandatud probleemid
Järgnevalt on toodud koostajasse tehtud parandused. Need võivad parandada loodud koodi vigu või muuta kompilaatori tööd vastavalt kasutusjuhendis ette nähtud või täpsustatule. Versiooninumber alampealkirjades näitab esimest kompilaatori versiooni, mis sisaldab järgnevate probleemide parandusi. Pealkirjas olevad sulgudes olevad sildid on selle probleemi tunnus(ed) jälgimisandmebaasis. Need võivad olla kasulikud, kui peate toega ühendust võtma.
Pange tähele, et mõned seadmespetsiifilised probleemid on seadmega seotud Device Family Packis (DFP) parandatud. Vaadake MPLAB Pack Managerist teavet DFP-des tehtud muudatuste kohta ja uusimate pakettide allalaadimiseks.
5.1. Versioon 2.41
Ventura (XC8-3088) donglite probleemid Kompilaatori litsentsimiseks kasutatavat teavet ei pruugita macOS Ventura hostides korralikult lugeda, mille tulemuseks on litsentsimise tõrkeid. XCLMi litsentsihalduri muudatused parandavad selle probleemi.
Mälu eraldamise vale näit (XC8-2925) Katse eraldada SIZE_MAX baiti (või sellele lähedast väärtust) mälu, kasutades standardseid teegi mäluhaldusfunktsioone (malloc () jt), ebaõnnestus. See ei võtnud arvesse, et lihtsa dünaamilise mälujaotuse rakendamisel oli lisaks nõutud plokile vaja täiendavaid baite. Nüüd tagastatakse NULL osuti ja errno seatakse sellistes olukordades väärtusele ENOMEM.
Ebatäpsed fma-funktsioonid on eemaldatud (XC8-2913) C99 standardteegi fma ( ) -perekonna funktsioonid ( ) ei arvutanud ühele ümardamisele lõpmatu täpsusega korrutamist, vaid kogus iga toiminguga ümardamisvigu. Need funktsioonid on kaasasolevast teegist eemaldatud.
Stringi teisendamise halb käsitlemine (XC8-2921, XC8-2652) Kui strtod Cr teisendamise 'subjektijada' sisaldas eksponentsiaalses vormingus ujukomaarvu ja e/E märgi järel oli ootamatu märk, siis kui endptr oli esitatud, määrati sellele aadress, mis kas see oleks osutanud märgile pärast e/E, samas kui see oleks pidanud osutama e/E märgile endale, kuna seda ei olnud teisendatud. Näiteksample, strtod (“100exx”, &ep) peaks tagastama väärtuse 100.00 ja määrama ep, et osutada stringi osale “exx”, samas kui funktsioon tagastas õige väärtuse, kuid seadis ep näitama stringi “xx” osale. .
5.2. Versioon 2.40
Liiga lõdvestunud (XCS-2876) Suvandi -mrelax kasutamisel ei eraldanud kompilaator mõnda jaotist kokku, mille tulemuseks oli vähem optimaalne koodi suurus. See võis juhtuda koodiga, mis kasutas uusi MUSL-i teeke, või nõrkade sümbolitega.
Kaardistamisfunktsioon ei ole keelatud, nagu on öeldud hoiatuses (XC8-2875) Funktsioon const-data-in-config-mappedprogmem sõltub konst-data-in-progmem funktsiooni lubamisest. Kui funktsioon const-data-inconfig-mapped-progmem oli suvandi abil selgesõnaliselt lubatud ja funktsioon const-data-inprogmem oli keelatud, nurjus linkimine, hoolimata hoiatusteatest, mis teatas, et const-data-in-con fig- funktsioon mapped-progmem oli automaatselt keelatud, mis ei olnud täiesti õige. Funktsioon const-data-in-config-mapped-progmem on selles olukorras nüüd täielikult keelatud.
DFP muudab NVMCTRL-ile õigesti juurdepääsu (XC8-2848) AVR64EA seadmete kasutatav käitusaegne käivituskood ei võtnud arvesse seda, et NVMCTRL-i register oli konfiguratsioonimuutuste kaitse (CCP) all ja ei saanud seadistada I0 SFR-i lehele, mida kasutab const-data-in-configmapped-progmem. kompilaatori funktsioon. AVR-Ex_DFP versioonis 2.2.55 tehtud muudatused võimaldavad käitusaegsel käivituskoodil sellesse registrisse õigesti kirjutada.
DFP muudatused, mida vältida välklambi kaardistamine (XC8-2847) Rakendatud on lahendus välklambi kaardistamise seadme funktsiooniga seotud probleemile, millest teatati dokumendis AVR128DA28/32/48/64 Silicon Errata (D580000882). Kompilaatori const-data-in-config-mapped-progmem kompilaatorit ei rakendata mõjutatud seadmete puhul vaikimisi ja see muudatus ilmub AVR-Dx_DFP versioonis 2.2.160.
Järguviga sinhfi või coshfiga (XC8-2834) Katsed kasutada teegi funktsioone sinhf () või coshf () andsid tulemuseks lingivea, mis kirjeldas määratlemata viidet. Viidatud puuduv funktsioon on nüüd lisatud kompilaatori jaotusse.
Ehitamise vead nopaga (XC,8-2833) Atribuudi nopa kasutamine funktsiooniga, mille koostaja nimi on määratud asm ( ) abil, käivitas assemblerilt veateateid. See kombinatsioon pole võimalik.
Variadic funktsiooni tõrge kursori argumentidega (XC8-2755, XC8-2731) Muutuva arvu argumentidega funktsioonid eeldavad 24-bitiste (memx-tüüpi) osutite edastamist muutujate argumentide loendis, kui funktsioon const-data-in-progmem on lubatud. Argumendid, mis osutasid andmemällu, edastati 16-bitiste objektidena, mis põhjustas nende lugemisel kooditõrke. Kui funktsioon constdata-in-progmem on lubatud, teisendatakse nüüd kõik 16-bitiste osutite argumendid 24-bitisteks osutiteks.
strtoxxx teegi funktsioonid ebaõnnestuvad (XC8-2620) Kui funktsioon const-data-in-progmem oli lubatud, ei värskendatud strtoxxx teegi funktsioonide endptr parameetrit õigesti lähtestringi argumentide jaoks, mis ei olnud programmimälus.
Hoiatused kehtetute heidete kohta (XC8-2612) Kompilaator väljastab nüüd vea, kui const-in-progmem funktsioon on lubatud ja stringliteraali aadress on otse andme-aadressiruumi üle kantud (konst-kvalifikaatorist loobumine), näiteksample, (uint 8_t *) “Tere maailm!”. Hoiatus on probleem, kui aadress võib olla kehtetu, kui konstandmekursor suunatakse selgesõnaliselt andmeaadressiruumi.
Initsialiseerimata const-objektide paigutamine (XC8-2408) Initsialiseerimata const ja const lenduvaid objekte ei paigutatud programmimällu seadmetes, mis kaardistavad kogu oma programmimälu või osa sellest andmete aadressiruumi. Nende seadmete puhul paigutatakse sellised objektid nüüd programmimällu, muutes nende töö teiste seadmetega kooskõlas.
5.3. Versioon 2.39 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.
5.4. Versioon 2.36
Viga viivitamisel (XC8-2774) Väikesed muudatused vaikimisi vabarežiimi optimeerimises takistasid operandiavaldiste pidevat voltimist viivitusega sisseehitatud funktsioonidesse, mille tulemusena käsitleti neid mittekonstantidena ja käivitas tõrke: sisseehitatud avr-i delay_cycles eeldab kompileerimise aja täisarvu konstanti.
5.5. Versioon 2.35
Külgne jaotus _at (XC8-2653) abil Mitme objekti kohtade jaotamine sama nimega jaotises _at ( ) kasutades ei toiminud õigesti. Näiteksample:
const char arr1[] __atribuut__((section(.mysec”)))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __atribuut__((section(.mysec”)))) = {0xEF, 0xFE};
oleks pidanud asetama arr2 kohe pärast arr1.
Sektsiooni algusaadresside määramine (XC8-2650) -W1, –section-start suvand ei suutnud vaikselt sektsioone määratud algusaadressile paigutada. See probleem on kõigi kohandatud nimega jaotiste puhul parandatud; kuid see ei tööta ühegi standardse jaotise puhul, näiteks . tekst või . bss, mis tuleb paigutada suvandi -W1, -T abil.
Linker jookseb lõdvestades kokku (XC8-2647) Kui -mrelaxi optimeerimine oli lubatud ja seal oli koodi- või andmelõike, mis vabasse mällu ei mahtunud, jooksis linker kokku. Nüüd antakse sellisel juhul hoopis veateateid.
Ilma tagasilangemiseta (XC8-2646) – nofallback ei olnud õigesti rakendatud ega dokumenteeritud. Selle saab nüüd valida tagamaks, et kompilaator ei langeks tagasi madalamale optimeerimisseadele, kui kompilaator on litsentsimata, vaid annab selle asemel vea.
Sobimatu kiiruse optimeerimine (X03-2637) 3. taseme optimeerimise (-03) valimisel lubati protseduurilise abstraktsiooni optimeerimine. Need optimeerimised vähendavad koodi suurust koodi kiiruse arvelt, seega poleks tohtinud seda teha.
Halb EEPROM juurdepääs (XC8-2629) Rutiin eeprom_read_block ei töötanud Xmega seadmetes õigesti, kui suvand -mconst-data-in-progmem oli lubatud (mis on vaikeolek), mistõttu EEPROM-i mälu ei loetud õigesti.
Kehtetu mälujaotus (XC8-2593, XC8-2651) Kui -Ttext või -Tdata linker (ntample edastatud kasutades -vl draiveri suvandit) on määratud, värskendati vastavat teksti/andmepiirkonna päritolu; aga lõpp-aadressi ei kohandatud vastavalt, mis võis viia selleni, et piirkond ületas sihtseadme mäluvahemiku.
Krahh ülemääratud funktsiooniga (XC8-2580) Kompilaator jooksis kokku, kui funktsioon deklareeriti, kasutades rohkem kui ühte katkestuse, signaali või nmi atribuuti, nt atribuut ( ( signaal , katkestus ) ).
Vigane ATtiny katkestuskood (XC8-2465) ATtiny seadmete jaoks ehitamisel ja optimeerimised keelati (-00), võisid katkestusfunktsioonid käivitada operandi vahemikust väljas assembleri teated.
Valikuid ei edastata (XC8-2452) Kui kasutate valikut koos mitme komadega eraldatud linkeri valikuga, ei edastatud linkerile kõiki linkeri valikuid.
Viga programmi mälu kaudsel lugemisel (X03-2450) Mõnel juhul tekitas kompilaator kahebaidise väärtuse lugemisel kursorist programmimällu sisemise vea (tundmatu insn).
5.6. Versioon 2.32
Teine juurdepääs teek ebaõnnestub (XC8-2381) xc8-ar Windowsi versiooni kutsumine. .exe raamatukogu arhiveerija teist korda olemasolevale teegi arhiivile juurdepääsemiseks võis ebaõnnestuda, kuna tõrketeadet ei saa ümber nimetada.
5.7. Versioon 2.31
Seletamatu kompilaator tõrked (XC8-2367) Kui töötate Windowsi platvormidel, mille süsteemi ajutine kataloog oli seatud teele, mis sisaldas punkti "." tähemärki, võis kompilaatori täitmine ebaõnnestuda.
5.8. Versioon 2.30
Üldised sildid on pärast piirjooni valesti paigutatud (XC8-2299) Käsitsi kirjutatud montaažikood, mis asetab globaalsed sildid monteerimisjadadesse, mis arvestatakse välja protseduurilise abstraktsiooniga, ei pruugi olla õigesti ümber paigutatud.
Lõõgastav kokkupõrge (XC8-2287) Suvandi -mrelax kasutamine võis põhjustada linkeri kokkujooksmise, kui sabahüppe lõdvestamise optimeerimine üritas eemaldada ret-käske, mis ei olnud jaotise lõpus.
Krahh siltide optimeerimisel väärtustena (XC8-2282) Kood, mis kasutas GNU C keelelaiendit "Sildid väärtustena", võis põhjustada protseduurilise abstraktsiooni optimeerimise kokkujooksmise, mille tulemuseks oli parandusvea piiritletud VMA vahemiku ulatus.
Pole nii kindel (XC8-2271) St rstr ( ) ja muude funktsioonide prototüübid ei määra enam mittestandardset const-kvalifikaatorit tagastatud stringi osutitel, kui funktsioon -mconst-data-inprogmem on keelatud. Pange tähele, et avrxmega3 ja avrtiny seadmete puhul on see funktsioon püsivalt lubatud.
Kadunud lähtestajad (XC8-2269) Kui rohkem kui üks muutuja tõlkeüksuses paigutati sektsiooni (kasutades _section või _attribute_ ( (section) )) ja esimene selline muutuja oli nullinitsialiseeritud või sellel ei olnud initsialiseerijat, sama tõlkeüksuse muude muutujate lähtestajad, mis paigutati samas lõigus olid kadunud.
5.1. Versioon 2.29 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.
5.2. Versioon 2.20
Viga pikkade käskudega (XC8-1983) Kui kasutate AVR-i sihtmärki, võib kompilaator olla peatunud tähega a file viga ei leitud, kui käsurida oli äärmiselt suur ja sisaldas erimärke, näiteks jutumärke, kaldkriipsu jne.
Määramata rodata osa (XC8-1920) AVR-i linker ei suutnud avrxmega3 ja avrtiny arhitektuuride jaoks kohandatud rodata sektsioonide jaoks mälu määrata, mis võib põhjustada mälu kattumise vigu
5.3. Versioon 2.19 (Funktsionaalne ohutusväljaanne)
Mitte ühtegi.
5.4. Versioon 2.10
Ümberpaigutamise ebaõnnestumised (XC8-1891) Kõige sobivam jaotur jättis pärast linkeri lõdvestamist sektsioonide vahele mäluaugud. Lisaks mälu killustamisele suurendas see linkeri ümberpaigutamise tõrkeid, mis on seotud arvuti suhteliste hüpetega või kõnede levialast välja jäämisega.
Juhised, mida lõdvestusega ei muudetud (XC8-1889) Linkeri lõdvestumine ei toimunud hüppe- või helistamisjuhiste puhul, mille sihtmärgid muutuvad lõdvestatuna saavutatavaks.
Puudub funktsionaalsus (XC8E-388) Mitmed definitsioonid alates , nagu clock_div_t ja clock_prescale set () , ei olnud seadmete jaoks määratletud, sealhulgas ATmega324PB, ATmega328PB, ATtiny441 ja ATtiny841.
Puuduvad makrod Eelprotsessori makrosid _XC8_MODE_, _XC8_VERS ION, _XC ja _XC8 ei määratlenud kompilaator automaatselt. Need on nüüd saadaval.
5.5. Versioon 2.05
Sisemine kompilaatori viga (XC8-1822) Windowsi all ehitamisel võib koodi optimeerimisel tekkida sisemine kompilaatori viga.
RAM-i ületäitumist ei tuvastatud (XC8-1800, XC8-1796) Mõnes olukorras ei tuvastanud kompilaator programme, mis ületasid saadaoleva RAM-i, mistõttu tekkis käitusaja koodi tõrge.
Välkmälu on välja jäetud (XC8-1792) Avrxmega3 ja avrtiny seadmete puhul võis MPLAB X jätta osa välkmälust programmeerimata IDE.
Peamise käivitamise ebaõnnestumine (XC8-1788) Mõnes olukorras, kus programmis ei olnud globaalseid muutujaid määratletud, ei väljunud käitusaja käivituskood ja põhifunktsiooni ( ) ei jõutud kunagi kätte.
Vale mäluteave (XC8-1787) Avrxmega3 ja avrtiny seadmete puhul teatas avr-size programm, et kirjutuskaitstud andmed tarbivad programmimälu asemel RAM-i.
Vale programmimälu lugemine (XC8-1783) Projektid, mis on koostatud seadmetele, mille programmimälu on kaardistatud andmete aadressiruumi ja mis määratlevad objekte makro/atribuudi PROGMEM abil, võisid neid objekte valelt aadressilt lugeda.
Sisemine viga atribuutidega (XC8-1773) Ilmnes sisemine viga, kui määrasite kursoriobjektid
_at () või atribuut() märgid kursori nime ja viiteta tüübi vahel, ntample, sar*
_at (0x800150) cp; Sellise koodi ilmnemisel antakse nüüd hoiatus.
Peamise käivitamise ebaõnnestumine (XC8-1780, XC8-1767, XC8-1754) EEPROM-i muutujate kasutamine või kaitsmete defineerimine konfiguratsioonipragma abil võis põhjustada andmete vale initsialiseerimise ja/või lukustada programmi käitamise käitusaegses käivituskoodis enne põhipunkti ( ) jõudmist.
Kaitsme viga väikeste seadmetega (XC8-1778, XC8-1742) Attiny4/5/9/ 10/20/40 seadmetel oli päises määratud vale kaitsme pikkus files, mis viivad linkeri vigadeni, kui üritatakse luua kaitsmeid määratlevat koodi.
Segmenteerimine viga (XC8-1777) Vahepealse segmenteerimise viga on parandatud.
Assembleri krahh (XC8-1761) Avr-as assembler võis kokku kukkuda, kui kompilaatorit käitati Ubuntu 18 all.
Objekte ei kustutata (XC8-1752) Käitusaja käivituskood ei pruukinud kustutada initsialiseerimata staatilise salvestuse kestuse objekte.
Konfliktset seadme spetsifikatsiooni eirati (XC8-1749) Kompilaator ei tekitanud tõrget, kui kasutati mitut seadme spetsifikatsiooni valikut ja osutas erinevatele seadmetele.
Mälu rikkumine kuhjaga (XC8-1748) Sümbol _heap_start oli valesti seatud, mistõttu on võimalik, et hunnik rikub tavalisi muutujaid.
Linkeri ümberpaigutamise viga (XC8-1739) Linkeri ümberpaigutamise tõrge võis ilmneda siis, kui kood sisaldas rjmp- või rckutset, mille sihtmärk oli täpselt 4 XNUMX baiti kaugusel.
5.6. Versioon 2.00
Mitte ühtegi.
Teadaolevad probleemid
Järgmised on kompilaatori töö piirangud. Need võivad olla üldised kodeerimispiirangud või kõrvalekalded kasutusjuhendis sisalduvast teabest. Pealkirjas olevad sulgudes olevad sildid on selle probleemi tunnus(ed) jälgimisandmebaasis. Sellest võib kasu olla, kui peate toega ühendust võtma. Need üksused, millel pole silte, on piirangud, mis kirjeldavad tööviisi ja jäävad tõenäoliselt püsivalt kehtima.
6.1. MPLAB X IDE Integratsioon
MPLAB IDE integreerimine Kui kompilaatorit kasutatakse MPLAB IDE-st, peate enne kompilaatori installimist installima MPLAB IDE.
6.2. Koodi genereerimine
Segfault koos suvandiga sektsioon-ankrud (XC8-3045) Programm, mis määratles muutuvate argumentide loenditega funktsioonid ja kasutab suvandit -fsection-anchors, võis käivitada kompilaatori sisemise vea: Segmenteerimisviga.
Silumisinfo sünkroonist väljas (XC8-2948) Kui linkeri lõdvestamise optimeerimine kahandab juhiseid (ntample call to rccal juhiseid), lähterea ja aadressi vastendused ei pruugi jääda sünkroonis, kui jaotises toimub rohkem kui üks kahandamistoiming.
Allpool näitample, on kaks kõnet foo-le, mis lõpevad lõdvestunud sugulaste kõnedega.
PA-mälu eraldamise tõrge (XC8-2881) Protseduuriliste abstraktsioonide optimeerijate kasutamisel võib linker teatada mälu jaotamise vigadest, kui koodi suurus on lähedane seadmes saadaoleva programmimälu mahule, kuigi programm peaks mahtuma vaba ruumi.
Mitte nii nutikas Smart-I0 (XC8-2872) Kompilaatori smart-io funktsioon genereerib kehtiva, kuid mitteoptimaalse koodi funktsiooni snprint f jaoks, kui funktsioon const-data-in-progmem on keelatud või kui seadmel on kogu välkmälu kaardistatud andmemällu.
Veelgi vähem nutikas Smart-I0 (XC8-2869) Kompilaatori smart-io funktsioon genereerib kehtiva, kuid mitteoptimaalse koodi, kui kasutatakse suvandeid -flto ja -fno-builtin.
Mitteoptimaalne kirjutuskaitstud andmepaigutus (XC8-2849) Linker ei ole praegu teadlik APPCODE ja APPDATA mälusektsioonidest ega [No-Read-While-Write jaotustest mälukaardil. Selle tulemusena on väike võimalus, et linker võib eraldada kirjutuskaitstud andmed ebasobivas mälupiirkonnas. Valesti paigutatud andmete tõenäosus suureneb, kui funktsioon const-data-in-progmem on lubatud, eriti kui lubatud on ka funktsioon const-data-in-config-mapped-progmem. Neid funktsioone saab vajadusel keelata.
Objekt file tellimuse töötlemine (XC8-2863) Objektide järjekord fileLinker töötleb s-id, mis võib erineda sõltuvalt protseduurilise abstraktsiooni optimeerimise kasutamisest (-mpa valik). See mõjutaks ainult koodi, mis määratleb mitme mooduli nõrgad funktsioonid.
Linkeri viga absoluutsega (XC8-2777) Kui objekt on muudetud RAM-i alguses asuval aadressil absoluutseks ja määratletud on ka initsialiseerimata objektid, võib vallandada linkeri tõrge.
Lühikese äratuse ID-d (XC8-2775) ATA5700/2 seadmete puhul on PHIDO/1 registrid defineeritud ainult 16 bitti laiustena, mitte 32 bitti laiustena.
Linkeri krahh helistamisel sümbolile (XC8-2758) Linker võib kokku kukkuda, kui kasutatakse draiveri suvandit -mrelax, kui lähtekood kutsub esile sümboli, mis on määratletud võtmega -cc., –de f sym linker.
Vale lähtestamine (XC8-2679) Seal on lahknevus selle vahel, kus mõne globaalse/staatilise baidisuuruse objekti algväärtused on andmemällu paigutatud ja kus muutujatele käitusajal juurde pääsetakse.
Halvad kaudsed funktsioonikutsed (XC8-2628) Mõnel juhul võivad struktuuri osana salvestatud funktsiooniosuti kaudu tehtud funktsioonikutsed ebaõnnestuda.
strtof tagastab kuueteistkümnendsüsteemi ujukite jaoks nulli (XC8-2626) Teegi funktsioonid strtof et al ja scanf ( ) jt teisendavad alati kuueteistkümnendsüsteemi ujukomaarvu, mis ei määra eksponenti, nulliks. Näiteksample:
strtof ("Oxl", &endptr) ;
tagastab väärtuse 0, mitte I.
Ebatäpne virnanõustaja sõnumside (XC8-2542, XC8-2541) Mõnel juhul ei edastata pinunõustaja hoiatust kasutatud rekursiooni või määramatu virna kohta (võimalik, et alloca() kasutamise tõttu).
Tõrge dubleeritud katkestuskoodiga (XC8-2421) Kui rohkem kui ühel katkestusfunktsioonil on sama keha, võib kompilaatoril olla ühe katkestusfunktsiooni väljund teise jaoks. Selle tulemuseks on see, et kõik kõnedega blokeeritud registrid salvestatakse asjatult ja katkestused lubatakse isegi enne, kui praeguse katkestuse töötleja epiloog on käivitatud, mis võib põhjustada koodi tõrke.
Vale väljund vale DFP teega (XC8-2376) Kui kompilaatorit kutsutakse välja vale DFP tee ja spetsifikatsiooniga file on valitud seadme jaoks olemas, kompilaator ei teata puuduvast seadmeperepaketist ja valib selle asemel spetsifikatsiooni file, mis võib seejärel põhjustada kehtetu väljundi. 'spetsifikaat' files ei pruugi olla hajutatud DFP-dega ajakohased ja mõeldud kasutamiseks ainult kompilaatori sisemise testimisega.
Mälu kattumine on tuvastamata (XC8-1966) Kompilaator ei tuvasta ühel aadressil (_at ( ) kaudu) absoluutseks tehtud objektide ja muude objektide mälu kattuvust, kasutades jaotise ( ) spetsifikaatorit ja mis on lingitud sama aadressiga.
Teegi funktsioonide ja _memx (XC8-1763) tõrge Kutsutud libgcc float funktsioonid, mille argumendid on memx-aadressiruumis, võivad ebaõnnestuda. Pange tähele, et teegirutiine kutsutakse mõnelt C-operaatorilt, nii et näiteksample, mõjutab järgmine kood:
return regFloatVar > memxFloatVar;
Piiratud libgcc rakendamine (AVRTC-731) ATTiny4/5/9/10/20/40 toodete puhul on standardne C / Math teegi rakendamine libgcc-s väga piiratud või puudub.
Programmi mälu piirangud (AVRTC-732) Tööriistaahel toetab programmimälu pilte, mis on suuremad kui 128 kb; Siiski on teada juhtumeid, kus linker katkeb ilma lõõgastumiseta ja ilma abistava veateateta, selle asemel, et genereerida nõutud funktsioonide stubsid, kui kasutatakse suvandit -mre lax.
Nimeruumi piirangud (AVRTC-733) Nimetatud aadressiruume toetab tööriistaahel, võttes arvesse piiranguid, mis on mainitud kasutusjuhendi jaotises Eritüüpi kvalifikatsioonid.
Ajavööndid The raamatukogu funktsioonid eeldavad GMT-d ja ei toeta kohalikke ajavööndeid, seega tagastab kohalik aeg ( ) sama aja kui gmtime ( ), näiteksample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Dokumendid / Ressursid
![]() |
MICROCHIP MPLAB XC8 C kompilaatori arendustarkvara [pdfKasutusjuhend MPLAB XC8 C, MPLAB XC8 C kompilaatori arendustarkvara, kompilaatori arendustarkvara, arendustarkvara, tarkvara |




