MIKROKIIP-LOGO

MICROCHIP XC8 C kompilaatori versiooni 2.45 väljalaskemärkmed AVR MCU jaoks

MICROCHIP-XC8-C-Compiler-Version-2-45-Release-Notes-for-AVR-MCU-PRO

Tooteteave

MPLAB XC8 C Compiler on tarkvaratööriist, mida kasutatakse Microchip AVR-seadmete sihtimiseks. See on loodud C-koodi kompileerimiseks ja käivitatava faili genereerimiseks files nende seadmete jaoks. Selles kasutusjuhendis viidatud kompilaatori versioon on 2.45 ja ametlik ehituskuupäev on 18. august 2023. Eelmine versioon oli 2.41, ehitatud 8. veebruaril 2023. Kompilaatoriga on kaasas funktsionaalse ohutuse juhend, mis annab lisateavet ja juhised MPLAB XC kompilaatorite kasutamisel koos funktsionaalsete ohutusrakendustega. See juhend sisaldub funktsionaalohutuse litsentsi ostmisel dokumentatsioonipaketis. MPLAB XC8 C kompilaator toetab vabastamise ajal kõiki saadaolevaid 8-bitise AVR MCU seadmeid. Võite vaadata avr_chipinfo.html file kompilaatori dokumentide kataloogis, et näha kõigi toetatud seadmete ja nende konfiguratsioonibitisätete loendit. Saadaval on MPLAB XC8 kompilaatori erinevad väljaanded. Litsentsitud (PRO) väljaanne pakub tasuta väljaandega võrreldes kõrgemat optimeerimise taset. Kompilaatori aktiveerimiseks litsentsitud tootena peate ostma aktiveerimisvõtme. Litsentsimata versiooni saab aga ilma litsentsita kasutada lõputult. Funktsionaalse ohutuse rakenduste jaoks on saadaval MPLAB XC8 Functional Safety kompilaator. Selle aktiveerimiseks on vaja Microchipist ostetud funktsionaalohutuse litsentsi. Pärast aktiveerimist saab kasutada kõiki optimeerimistasemeid ja kompilaatori funktsioone. MPLAB XC Functional Safety Compiler toetab ka võrguserveri litsentsi. Üksikasjalikku teavet installimise, aktiveerimise, litsentsitüüpide ja migratsiooniprobleemide kohta leiate dokumendist MPLAB XC C kompilaatorite installimine ja litsentsimine (DS50002059).

Toote kasutusjuhised

  1. Enne MPLAB XC8 C Compileri tarkvara käivitamist lugege kasutusjuhendist olulist teavet ja juhiseid, mis on seotud Microchip AVR-seadmete sihtimisega.
  2. Kui kasutate kompilaatorit 8-bitiste PIC-seadmete jaoks, vaadake MPLAB XC8 C kompilaatori väljalaskemärkmeid PIC-dokumendi jaoks.
  3. Veenduge, et teie operatsioonisüsteem vastaks kompilaatori käitamise süsteeminõuetele. MacOS-i binaarfailid on koodallkirjaga ja notariaalselt kinnitatud. MPLAB XC võrgulitsentsi server on saadaval Microsoft Windows 10 ja uuemate versioonide, Ubuntu 18.04 ja uuemate ning macOS 10.15 ja uuemate versioonide jaoks. Pange tähele, et MPLAB XC võrgulitsentsiserverit nendes operatsioonisüsteemides ei testita.
  4. 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.
  5. MPLAB XC8 C kompilaatori aktiveerimiseks litsentsitud (PRO) tootena ostke aktiveerimisvõti. See tagab tasuta versiooniga võrreldes kõrgema optimeerimise taseme. Litsentsita kompilaatorit saab aga ilma litsentsita lõputult kasutada.
  6. Kui kasutate funktsionaalse ohutuse rakenduste jaoks MPLAB XC8 funktsionaalse turvalisuse kompilaatorit, tuleb see aktiveerida Microchipist ostetud funktsionaalse ohutuse litsentsiga. Ilma selle litsentsita kompilaator ei tööta. Pärast aktiveerimist saate valida mis tahes optimeerimistaseme ja kasutada kõiki kompilaatori funktsioone. Võrguserveri litsentsi toetab see MPLAB XC Functional Safety Compileri väljalase.
  7. Üksikasjalikud juhised MPLAB XC8 C kompilaatori installimise, aktiveerimise ja litsentsimise kohta leiate dokumendist MPLAB XC C kompilaatorite installimine ja litsentsimine (DS50002059).
  8. Kui kasutate kompilaatorit hindamislitsentsi alusel, saate 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.

Läbiview

Sissejuhatus
See Microchip MPLAB® XC8 C kompilaatori väljalase sisaldab mitmeid uusi funktsioone, veaparandusi ja tuge uutele seadmetele.

Ehitamise kuupäev
Selle kompilaatori versiooni ametlik valmimiskuupäev on 18. august 2023.

Eelmine versioon
Eelmine MPLAB XC8 C kompilaatori versioon oli 2.41, ehitatud 8. veebruaril 2023.

Funktsionaalne ohutusjuhend
Funktsionaalohutuse juhend MPLAB XC kompilaatorite jaoks on saadaval dokumentatsioonipaketis, kui ostate funktsionaalohutuse litsentsi.

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. GNU GPL-i saate lugeda jaotisest file nimega asub teie installikataloogi alamkataloogis. GPL-i aluseks olevate põhimõtete üldise arutelu leiate siit. Päise tugikood files, linkeri skriptid ja käitusaegsed teegid 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.

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, Ubuntu® 18.04, macOS® 13.2 (Ventura) ja Fedora 34. 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 erinevatel muudel operatsioonisüsteemidel, sealhulgas Windows Serveril, Linuxi distributsioonidel, nagu Oracle® Enterprise Linux® ja Red Hat® Enterprise Linux, 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. Kõigi toetatud seadmete loendi leiate saidilt avr_chipinfo.html (kompilaatori dokumentide kataloogis). Need failid loetlevad ka iga seadme konfiguratsioonibitisätted.

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).

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 .run (Linux) või .app (macOS) kompilaatori installirakendus, nt XC8-1.00.11403-windows.exe ja järgige ekraanil kuvatavaid juhiseid. 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).

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.

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.MICROCHIP-XC8-C-Compiler-Version-2-45-Release-Notes-for-AVR-MCU-1

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.

Klienditugi
XC8 foorumis saate küsimusi esitada selle toote teistele kasutajatele. 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:

Mitte ühtegi

  • 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 Reference Guide kirjeldab Microchip Unified Standard Library poolt määratletud funktsioonide käitumist ja liidest, samuti teegitüüpide ja makrode kasutusotstarvet. Osa sellest teabest sisaldus varem MPLAB® XC8 C kompilaatori kasutusjuhendis AVR® MCU jaoks. Selles kompilaatori juhendis sisaldub endiselt seadmespetsiifiline teegi teave.
  • Kui te alles alustate 8-bitiste seadmete ja MPLAB XC8 C kompilaatoriga, on MPLAB® XC8 kasutaja
  • Juhend sisseehitatud inseneridele – AVR® MCU-d (DS50003108) sisaldab teavet projektide seadistamise kohta MPLAB X IDE-s ja koodi kirjutamise kohta teie esimese MPLAB XC8 C projekti jaoks. 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.

Versioon 2.45
Universaalne litsentsihaldur (XC8-3175, XCLM-224) Kompilaatoriga kasutatav litsentsihalduri macOS-versioon on nüüd universaalne, pakkudes loomulikku tuge nii Inteli kui ka M1-põhistele masinatele. Litsentsihalduri Linuxi versioon nõuab nüüd vähemalt glibc versiooni 2.25. Maci universaalsed kahendfailid (XC8-3168, XC8-2951) MacOS-i kompilaatori binaarfailid on nüüd universaalsed, pakkudes loomulikku tuge nii Inteli- kui ka M1-põhistele masinatele. Ujukoma teegi vähendatud suurused (XC8-3112, XC8-3071) Täiustatud on ujukoma teegi funktsioone, sealhulgas sinf() pow(), sqrt(), expf(), log1fp() ja nextafterf() , mis näevad nende rutiinide koodi suuruse vähenemist. Uue seadme tugi Tugi on nüüd saadaval järgmistele AVR osadele: AVR16EA28, AVR16EA32, AVR16EA48, AVR32EA28, AVR32EA32, AVR32EA48, AVR16EB14, AVR16EB20, AVR16EB28 ja AVR16EB32.

Versioon 2.41

  • Bootrow tugi (XC8-3053) Kompilaator paigutab HEX-faili mis tahes .bootrow prefiksiga sektsioonide sisu aadressile 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 funktsioonide üleliigsed ret-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 muutmine (XC8-2982, 2932) C99 standardteegi tüüp time_t on muudetud pikast pikast märgita pikaks tüübiks, mis annab mõne ajaga seotud funktsiooni, näiteks mktime() koodi suuruse täiustused.
  • Uus nop (XC8-2946, 2945) Makro NOP() on lisatud . See makro lisab väljundisse käsu nop no-operation.
  • 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 proovib kompilaator asendada jmp-kõne juhistega rccal-juhistega, misampoline' täitmine nõutud aadressile, ntample:

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 koodi, mis sisaldab funktsiooni kutsumiskäsku (call/rcall), saab välja tuua. See toimub ainult siis, kui pinu ei kasutata funktsioonile 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 suvandiga – mno-pa-outline-calls või protseduurilise abstraktsiooni saab täielikult keelata objektifaili või funktsiooni puhul, kasutades käsku -mno-pa-on-file -mno-pa-on-function või kasutades nopa atribuuti (__nopa spetsifikaat) valikuliselt koos funktsioonidega.
  • Koodi katvuse makro Kompilaator defineerib nüüd makro __CODECOV, kui on määratud kehtiv suvand -mcodecov.
  • Mälu reserveerimise valik xc8-cc draiver aktsepteerib nüüd AVR-i sihtmärkide loomisel suvandit -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.

Versioon 2.39 (funktsionaalse ohutuse väljalase)
Võrguserveri litsents See MPLAB XC8 Functional Safety Compileri väljalase toetab võrguserveri litsentsi.

Versioon 2.36
Mitte ühtegi.

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õnedel AVR DA ja AVR DB perekonna seadmetel on SFR (nt FLMAP), mis määrab, milline programmimälu 32k osa andmemällu kaardistatakse. Uut suvandit mconst-data-in-config-mapped-progmem saab kasutada selleks, et linker asetaks kõik kvalifitseeritud andmed ühte 32k sektsiooni ja initsialiseeriks automaatselt vastava SFR-registri, et tagada nende andmete kaardistamine andmemälu ruumi. , kus sellele on tõhusam juurdepääs.
  • 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. MPLAB® XC8 C kompilaatori kasutusjuhend AVR® 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 poolt määratletud funktsioonid pole enam saadaval. (Vaadake raamatukogu funktsioone.)
  • Nutikas IO Uute ühtsete teekide osana genereeritakse nüüd iga järgu puhul printf- ja scanf-perekondade IO-funktsioonid vastavalt sellele, kuidas neid funktsioone programmis kasutatakse. See võib programmi kasutatavaid ressursse oluliselt vähendada.
  • Nutika IO-abi valik Nutikate IO-funktsioonide (nagu printf() või scanf() kõnede analüüsimisel ei saa kompilaator alati vormingustringi järgi kindlaks teha või argumentidest järeldada kõne jaoks vajalikke teisendusspetsifikte. Varem tegi kompilaator alati eeldusteta ja veenduge, et programmi lõplikule kujutisele olid lingitud täielikult funktsionaalsed IO-funktsioonid. Lisatud on uus valik -msmart-io-format=fmt, et kasutaja saaks kompilaatorit informeerida nutika IO poolt kasutatavatest konversioonispetsifikaatidest funktsioonid, mille kasutamine on mitmetähenduslik, vältides liiga pikkade IO-rutiinide linkimist. (Lisateavet leiate jaotisest smart-io-vormingu suvand.)
  • Kohandatud jaotiste paigutamine Varem paigutas suvand -Wl,–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 standardsete jaotiste (nt .text, .bss või .data ) puhul on kõige sobivamal jaoturil nende paigutuse üle täielik kontroll ja valikul pole mõju. Kasutage suvandit -Wl,-Tsection=addr, nagu on kirjeldatud kasutusjuhendis.

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 kaardifailis, mida saab tavapärasel viisil taotleda.
  • 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: AVR16DA28, AVR16DA32 ja AVR16DA48.

Versioon 2.31
Mitte ühtegi.

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 alla koostefailides sümbolite do_clear_bss väljundi, mis omakorda takistab nende rutiinide kaasamist linkeri poolt.
  • 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.
    Mõne sellise optimeerimise juhtimiseks on nüüd saadaval lisavalikud, täpsemalt -fsection-ankrud, mis võimaldavad 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.

Versioon 2.29 (funktsionaalse ohutuse väljalase)

  • Kompilaatori sisseehitatud päisefail Tagamaks, et kompilaator vastaks keele spetsifikatsioonidele nagu MISRA, , 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 define __XC_STRICT_MISRA. Sisseehitatud seadmeid ja nende deklaratsioone on värskendatud, et kasutada fikseeritud laiusega tüüpe.

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.

Versioon 2.19 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.

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 faili algusesse, et kogu fail katvuse analüüsist välja jätta. Alternatiivina võib konkreetse funktsiooni katvuse analüüsist väljajätmiseks kasutada atribuuti __attribute__((nocodecov)).
  • Seadme kirjelduse failid Uus seadme fail nimega avr_chipinfo.html asub kompilaatori distributsiooni kataloogis docs. Selles failis on loetletud kõik seadmed, mida kompilaator toetab. Klõpsake seadme nimel ja see avab lehe, mis näitab kõiki selle seadme lubatud konfiguratsioonibiti seadistuste/väärtuste paare, ntampvähem.
  • Protseduuriline abstraktsioon Protseduuride abstraktsiooni optimeerimised, mis asendavad komplekteerimiskoodi tavalised plokid kutsudega selle ploki ekstraktitud koopiale, on lisatud kompilaatorisse. 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 objektifaili puhul keelata, kasutades käsku -mno-pa-on-file=filenimi või funktsiooni jaoks keelatud funktsiooniga -mno-pa-on- function=function. Lähtekoodis saab funktsiooni jaoks protseduurilise abstraktsiooni keelata, kasutades funktsiooni definitsiooniga atribuuti __attribute__((nopa)) või kasutades atribuuti __nopa, mis laieneb väärtuseks __attribute__((nopa,noinline)) ja seega takistab funktsiooni lisamist. 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 failist avr_chipinfo.html (mainitud ülal), et leida sätte/väärtuste paare, mida selle pragma puhul kasutada.
  • Uue seadme tugi Tugi on saadaval järgmistele osadele: AVR28DA128, AVR64DA128, AVR32DA128 ja AVR48DA128.

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 konst-kvalifitseeritud objektid programmi välkmällu, mitte hoida neid RAM-is. Kompilaatorit on muudetud nii, et konst-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.

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-teegifailide loomiseks või nendega manipuleerimiseks kasutada sarnase semantikaga valikute komplekti 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.

Versioon 2.45
Mitte ühtegi.

Versioon 2.41
Ebatäpsed fma funktsioonid eemaldatud (XC8-2913) C99 standardne teek ( ) ei arvutanud ühele ümardamisele lõpmatu täpsusega korrutamist, vaid kogus iga toiminguga ümardamisvigu. Need funktsioonid on kaasasolevast teegist eemaldatud.

Versioon 2.40
Mitte ühtegi.

Versioon 2.39 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.

Versioon 2.36
Mitte ühtegi.

Versioon 2.35

  • String-aluste käsitlemine (XC8-2420) Et tagada kooskõla teiste XC-kompilaatoritega, 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 . C-standard ei täpsusta funktsioonide käitumist selle baasväärtuse ületamisel.
  • Sobimatud kiiruse optimeerimised 3. taseme optimeerimise (-O3) 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.
  • Teegi funktsionaalsus Paljude standardsete C teegi funktsioonide kood pärineb nüüd Microchipi ühtsest standardteegist, mis võib mõnel juhul käituda erinevalt võrreldes endise avr-libc teegiga. Näiteksampl, pole enam vaja lprintf_flt teegis linkida (suvand -lprintf_flt), et lülitada sisse vormindatud IO tugi ujukvormingu spetsifikatsioonidele. Microchip Unified Standard Library nutikad IO funktsioonid muudavad selle valiku üleliigseks. Lisaks pole _P järelliidetega rutiinide kasutamine stringi- ja mälufunktsioonide jaoks (nt strcpy_P() jne), mis töötavad välkmälu konststringidega, enam vajalik. Standardsed C rutiinid (nt strcpy() töötavad selliste andmetega õigesti, kui const-data-in-program-memory funktsioon on lubatud.

Versioon 2.32
Mitte ühtegi.

Versioon 2.31
Mitte ühtegi.

Versioon 2.30
Mitte ühtegi.

Versioon 2.29 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.

Versioon 2.2
Muudetud DFP paigutus 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.

Versioon 2.19 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.

Versioon 2.10
Mitte ühtegi

Versioon 2.05
Const-objektid programmimälus Pidage meeles, et vaikimisi konst-kvalifitseeritud objektid paigutatakse programmimällu ja neile pääseb juurde (nagu siin kirjeldatud). See mõjutab teie projekti suurust ja täitmiskiirust, kuid peaks vähendama RAM-i kasutamist. Selle funktsiooni saab vajadusel keelata, kasutades suvandit -mno-const-data-in-progmem.

Versioon 2.00

  • Konfiguratsioonikaitsmed Seadme konfiguratsioonikaitsmeid saab nüüd programmeerida, kasutades konfiguratsioonipragma, 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 __at(address) 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.
  • Uue katkestusfunktsiooni süntaks Kompilaator aktsepteerib nüüd CCI __interrupt(num) spetsifikaatorit, mis näitab, et C-funktsioonid on katkestuste töötlejad. Määraja võtab katkestuse numbri, ntample: #kaasa void __katkestus(SPI_STC_vect_num) spi_Isr(void) { … }

Parandatud probleemid

Järgnevalt on toodud koostajasse tehtud parandused. Need võivad parandada loodud koodis esinevaid vigu või muuta kompilaatori tööd vastavalt kasutusjuhendis ettenähtud või määratletule. 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.

Versioon 2.45

  • Rändluslitsentsi tõrge (XCLM-235) Rändluslitsentsid ei töötanud õigesti Linuxi platvormidel, mis kasutavad glibc-versioone, mis on hilisemad kui 2.28.
  • Sisemine viga struktuurimassiivides (XC8-3069) Kui töödeldi struktuuri mitmemõõtmelisi massiivi liikmeid, ei edastatud aadressiruumi kvalifikaatorit massiivi õigesti. See põhjustas aadressiruumi kvalifitseeri teabe mittevastavuse ja kompilaatori sisemise vea. See olukord on parandatud.
  • Initsialiseerimata voogudesse kirjutamine on halb (ML-353, XC8-3100) Kui standardseid väljund-/tõrkevooge ei seadistatud FDEV_SETUP_STREAM või _init_stdout/_init_stderr abil, põhjustas neile kirjutamise katse määratlemata käitumist. See mõjutas ka kirjutamist stdlib-funktsioonidest, näiteks perror(). Kõiki, mis nendesse voogudesse kirjutatakse enne nende lähtestamist, ignoreeritakse.
  • Toetamata modifikaator (XC8-2505) Avr-libc teek ei toetanud printf-stiilis teisendusspetsifikaatides * modifikaatorit, näiteksample "%.*f". Seda toetab nüüd Microchip Unified Standard Library kasutuselevõtt.
  • Mitu initsialiseerimata hoiatust (XC8-2409) Kompilaator väljastas mitu identset hoiatusteadet, kui puutus kokku konst-massiiviga, mis ei olnud lähtestatud. Sõnum oleks tulnud väljastada ainult üks kord, mis on nüüd nii, kui see olukord tekib.

Versioon 2.41

  • Ventura dongliprobleemid (XC8-3088) Kompilaatori litsentsimiseks kasutatud dongleid ei pruugitud macOS Ventura hostides korralikult lugeda, mille tulemuseks on litsentsimise tõrkeid. XCLMi litsentsihalduri muudatused parandavad selle probleemi.
  • Mälu eraldamise vale märge (XC8-2925) Proovitakse eraldada SIZE_MAX baiti (või sellele lähedast väärtust), kasutades standardseid teegi mäluhaldusfunktsioone (malloc() jt), mida nõutakse lihtsa dünaamilise mälujaotuse rakendamisel. 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äsitsemine (XC8-2921, XC8-2652) Kui strtod() teisendamise 'subjekti jada' sisaldas eksponentsiaalses vormingus ujukoma numbrit ja e/E järel oli ootamatu märk märk, siis kui endptr oli ette nähtud, määrati sellele aadress, mis viitas märgile pärast , 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 määras stringi osa “xx”.

Versioon 2.40

  • Liiga pingevaba (XC8-2876) Suvandi -mrelax kasutamisel ei jaganud 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-mapped- progmem sõltub konst-data-in-progmem funktsiooni lubamisest. Kui funktsioon const-data-in-config-mapped-progmem oli suvandi abil selgesõnaliselt lubatud ja funktsioon const-data-in-progmem oli keelatud, nurjus linkimine vaatamata hoiatusteatele, mis teatas, et const-data-in Funktsioon -config-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 muudatused, et õigesti pääseda juurde NVMCTRL-ile (XC8-2848) AVR64EA seadmete kasutatav käitusaegne käivituskood ei võtnud arvesse, et NVMCTRL-i register oli konfiguratsioonimuutuste kaitse (CCP) all ja ei saanud IO SFR-i kasutatavale lehele seadistada. kompilaatori const-data-in-config-mapped-progmem abil. AVR-Ex_DFP versioonis 2.2.55 tehtud muudatused võimaldavad käitusaegsel käivituskoodil sellesse registrisse õigesti kirjutada.
  • DFP muudatused välkmälukaardistamise vältimiseks (XC8-2847) Rakendatud on lahendus välklambi kaardistamise seadme funktsiooniga seotud probleemile, millest on teatatud dokumendis AVR128DA28/32/48/64 Silicon Errata (DS80000882). 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.
  • Koostamisviga sinhf või coshf abil (XC8-2834) Katsed kasutada sinhf() või coshf() teegi funktsioone põhjustasid lingivea, mis kirjeldab määratlemata viidet. Viidatud puuduv funktsioon on nüüd lisatud kompilaatori jaotusse.
  • Koostamisvead nopaga (XC8-2833) Atribuudi nopa kasutamine funktsiooniga, mille koostaja nimi on määratud __asm__() abil, käivitas assemblerilt veateateid. See kombinatsioon pole võimalik.
  • Muutuva funktsiooni tõrge osuti argumentidega (XC8-2755, XC8-2731) Muutuva arvu argumentidega funktsioonid eeldavad 24-bitiste (__memx tüüpi) osutite edastamist muutuja 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 const-data-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 ülekannete kohta (XC8-2612) Kompilaator väljastab nüüd veateate, kui funktsioon const-in-progmem on lubatud ja stringliteraali aadress kantakse selgesõnaliselt andmete aadressiruumi (konst-kvalifikaatori väljalangemine), näiteksample, (uint8_t *) "Tere maailm!" . Hoiatus on probleem, kui aadress võib olla kehtetu, kui konstandmekursor suunatakse selgesõnaliselt andmeaadressiruumi.
  • Initsialiseerimata const objektide paigutus (XC8-2408) Initsialiseerimata ja konst lenduvate objektide const
    neid 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.

Versioon 2.39 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.

Versioon 2.36
Viga viivitamisel (XC8-2774) Väiksed muudatused vaikimisi vaba režiimi optimeerimises takistasid operandiavaldiste pidevat voltimist viivitusega sisseehitatud funktsioonidesse, mille tulemusena käsitleti neid mittekonstantidena ja käivitas tõrke: __builtin_avr_delay_cycles eeldab kompileerimise aja täisarvu konstantne.

Versioon 2.35

  • Piirnev jaotamine, kasutades __at (XC8-2653) Mitme objekti kohtade külgnev eraldamine sama nimega jaotises ja kasutades __at() 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) Suvand -Wl,–section-start ei suutnud vaikselt sektsioone määratud algusaadressile paigutada. See probleem on kõigi kohandatud nimega jaotiste puhul parandatud; aga see ei tööta ühegi standardse jaotise puhul, nagu .text või .bss, mis tuleb paigutada võtmega -Wl,-T. 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.
  • No-falling-back (XC8-2646) Valik –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.
  • Sobimatud kiiruse optimeerimised (XC8-2637) 3. taseme optimeerimise (-O3) valimisel lubati protseduurilise abstraktsiooni optimeerimine. Need optimeerimised vähendavad koodi suurust koodi kiiruse arvelt, seega poleks tohtinud seda teha.
  • Halb EEPROM-i 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älueraldus (XC8-2593, XC8-2651) Kui suvand -Ttext või -Tdata linker (ntample edastatud kasutades -Wl 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 liiga omistatud funktsiooniga (XC8-2580) Kompilaator jooksis kokku, kui funktsioon deklareeriti, kasutades rohkem kui ühte katkestuse, signaali või nmi atribuuti, nt __attribute__((__signal__, __interrupt__)).
  • Vigane ATtiny katkestuskood (XC8-2465) ATtiny seadmete loomisel ja optimeerimised keelati (-O0), võisid katkestusfunktsioonid käivitada operandi vahemikust väljas.
  • Suvandeid ei edastata (XC8-2452) Kui kasutate suvandit -Wl koos mitme komadega eraldatud linkeri valikuga, ei edastatud linkerile kõiki linkeri valikuid.
  • Viga kaudselt programmimälu lugemisel (XC8-2450) Mõnel juhul tekitas kompilaator kahebaidise väärtuse lugemisel kursorilt programmimällu sisemise vea (unrecognizable insn ).

Versioon 2.32
Teine juurdepääs teegile ebaõnnestub (XC8-2381) xc8-ar.exe teegi arhiivi Windowsi versiooni teistkordne käivitamine olemasolevale teegiarhiivile juurdepääsuks võis ebaõnnestuda, kuna tõrketeadet ei saa ümber nimetada.

Versioon 2.31
Seletamatud kompilaatori 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.

Versioon 2.30

  • Üldised sildid on pärast kontuurimist valesti paigutatud (XC8-2299) Käsitsi kirjutatud koostekood, mis asetab globaalsed sildid protseduurilise abstraktsiooniga välja arvestatud koostejadadesse, ei pruugi olla õigesti ümber paigutatud.
  • Lõõgastav krahh (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, millega kaasnes parandusvea vahemiku ulatuses.
  • Not so const (XC8-2271) Strstr() ja muude funktsioonide prototüübid ei määra enam tagastatud stringi osutitel mittestandardset kvalifikaatorit, kui funktsioon const -mconst-data-in- progmem on keelatud. Pange tähele, et avrxmega3 ja avrtiny seadmete puhul on see funktsioon püsivalt lubatud.
  • Kadunud lähtestajad (XC8-2269) Kui tõlkeüksuses paigutati sektsiooni rohkem kui üks muutuja (kasutades __section või __attribute__((section)) ) ja esimene selline muutuja oli nullini lähtestatud või sellel ei olnud initsialiseerijat, teised samas tõlkeüksuses olevad muutujad, mis paigutati samasse sektsiooni, läksid kaotsi.

Versioon 2.29 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.

Versioon 2.20

  • Viga pikkade käskudega (XC8-1983) AVR-i sihtmärgi kasutamisel võis kompilaator seiskuda faili ei leitud veaga, kui käsurida oli äärmiselt suur ja sisaldas erimärke, nagu jutumärgid, kaldkriipsud jne.
  • Määramata rodata sektsioon (XC8-1920) AVR-i linker ei suutnud avrxmega3 ja avrtiny arhitektuuridele ehitamisel kohandatud rodata sektsioonidele mälu määrata, mis võib põhjustada mälu kattumise vigu

Versioon 2.19 (funktsionaalse ohutuse väljalase)
Mitte ühtegi.

Versioon 2.10

  • Ümberpaigutamise tõrked (XC8-1891) Kõige paremini sobituv 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, sealhulgas ATmega324PB, ATmega328PB, ATtiny441 ja ATtiny841 jaoks määratletud.
  • Puuduvad makrod Kompilaatori poolt automaatselt määratletud eelprotsessori makrod _XC8_MODE_, __XC8_VERSION, __XC ja __XC8. Need on nüüd saadaval.

Versioon 2.05

  • Sisemine kompilaatori viga (XC8-1822) Windowsi all ehitamisel võib koodi optimeerimisel tekkida sisemine kompilaatori viga.
  • RAM-i ülevoolu ei tuvastatud (XC8-1800, XC8-1796) Mõnes olukorras kompilaator ei tuvastanud programme, mis ületasid saadaoleva RAM-i, mistõttu tekkis käituskoodi tõrge.
  • Välkmälu on välja jäetud (XC8-1792) Avrxmega3 ja avrtiny seadmete puhul võis MPLAB X IDE jätta osa välkmälust programmeerimata.
  • Maini käivitamise ebaõnnestumine (XC8-1788) Mõnes olukorras, kus programmil ei olnud globaalseid muutujaid määratletud, ei väljunud käitusaja käivituskood ja funktsiooni main() 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 kompileeritud seadmetele, mille programmimälu on kaardistatud andmete aadressiruumi ja mis määratlevad objektid makro/atribuudi PROGMEM abil, võisid neid objekte valelt aadressilt lugeda.
  • Sisemine viga atribuutidega (XC8-1773) Sisemine viga ilmnes, kui määrasite kursoriobjektid __at() või atribuudi() märgiga kursori nime ja viitamise tühistamise tüübi vahele, näiteksample, char * __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 mainile jõudmist ( ).
  • Kaitsme viga väikeste seadmetega (XC8-1778, XC8-1742) Attiny4/5/9/10/20/40 seadmete päisefailides oli määratud vale kaitsme pikkus, mis põhjustab linkeri tõrkeid kaitsmeid määratleva koodi loomisel. .
  • Segmenteerimisviga (XC8-1777) Vahelduv segmenteerimise viga on parandatud.
  • Assembleri krahh (XC8-1761) Avr-as assembler võis kokku kukkuda, kui kompilaatorit käitati Ubuntu 18 all.
  • Objekte ei tühjendatud (XC8-1752) Käitusaja käivituskood ei pruukinud kustutada initsialiseerimata staatilise salvestuse kestusega objekte.
  • Konflikteerivat seadme spetsifikatsiooni ignoreeriti (XC8-1749) Kompilaator ei tekitanud tõrget, kui kasutati mitut seadme spetsifikatsiooni suvandit ja osutas erinevatele seadmetele.
  • Mälu rikkumine kuhjaga (XC8-1748) Sümbol __heap_start oli valesti seatud, mistõttu võib hunnik rikkuda tavalisi muutujaid.
  • Linkeri ümberpaigutamise tõrge (XC8-1739) Linkeri ümberpaigutamise tõrge võis ilmneda, kui kood sisaldas rjmp- või rckutset sihtmärgiga täpselt 4 XNUMX baiti kaugusel.

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.

MPLAB X IDE integreerimine

  • MPLAB IDE integreerimine Kui kompilaatorit kasutatakse MPLAB IDE-st, peate enne kompilaatori installimist installima MPLAB IDE.
  • Massiivi silumise teave (XC8-3157) Kompilaatori loodud silumimisteave ei anna täpselt edasi __memx aadressiruumi massiivide objektitüüpi. See takistab objekti jälgimist IDE-s.

Koodi genereerimine

  • Segfault koos sektsiooniankrute valikuga (XC8-3045) Programm, mis määratles muutuvate argumentide loenditega funktsioone 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. Allolevas eksample, 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ähedal seadmes saadaoleva programmimälu mahule, kuigi programm peaks suutma mahutada saadaoleva ruumi.
  • Mitte nii nutikas Smart-IO (XC8-2872) Kompilaatori smart-io funktsioon genereerib snprintf funktsiooni jaoks kehtiva, kuid mitteoptimaalse koodi, kui funktsioon const-data-in-progmem on keelatud või kui seadmel on kõik selle funktsioonid. andmemällu kaardistatud välklamp.
  • Veelgi vähem nutikas Smart-IO (XC8-2869) Kompilaatori smart-io funktsioon genereerib kehtiva, kuid mitteoptimaalse koodi, kui kasutatakse suvandeid -flto ja -fno-builtin.
  • Suboptimaalne 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.
  • Objektifailide töötlemise järjekord (XC8-2863) Objektifailide töötlemise järjekord linkeri poolt võib erineda sõltuvalt protseduurilise abstraktsiooni optimeerimise kasutamisest (-mpa valik). See mõjutab ainult koodi, mis määrab mitme mooduli nõrgad funktsioonid.
  • Absoluutse linkeri viga (XC8-2777) Kui objekt on muudetud RAM-i alguses oleval aadressil absoluutseks ja samuti on määratletud initsialiseerimata objektid, võib vallandada linkeri viga.
  • Lühikesed äratus-ID-d (XC8-2775) ATA5700/2 seadmete puhul on PHID0/1 registrid 16 biti asemel vaid 32 bitti laiused.
  • Linkeri kokkujooksmine sümboli kutsumisel (XC8-2758) Linker võib kokku jooksta, kui kasutatakse suvandit -mrelax draiver, kui lähtekood kutsub esile sümboli, mis on määratletud võtmega – Wl,–defsym linker.
  • Vale lähtestamine (XC8-2679) Mõne globaalse/staatilise baidisuuruse objekti algväärtuste andmemällu paigutamise ja muutujate käitamise ajal juurdepääsu vahel on lahknevus.
  • 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(“0x1”, &endptr); tagastab väärtuse 0, mitte 1.
  • Ebatäpne virnanõustaja sõnum (XC8-2542, XC8-2541) Mõnel juhul ei edastata virnanõustaja hoiatust kasutatud rekursiooni või määramatu virna kohta (võimalik, et alloca() kasutamise tõttu).
  • Duplikaatkatkestuskoodi tõrge (XC8-2421) Kui rohkem kui ühel katkestusfunktsioonil on sama keha, võib kompilaatoril ühe katkestusfunktsiooni väljund kutsuda teist. 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.
  • Kehtetu DFP teega vigane väljund (XC8-2376) Kui kompilaator käivitatakse kehtetu DFP teega ja valitud seadme jaoks on spetsifikatsioonifail olemas, ei teata kompilaator puuduvast seadmeperepaketist, vaid valib selle asemel spetsifikatsiooni. faili, mis võib viia vale väljundini. Spetsiifilised failid ei pruugi olla hajutatud DFP-dega ajakohased ja olid mõeldud kasutamiseks ainult kompilaatori sisemise testimise jaoks.
  • Mälu kattumine on tuvastamata (XC8-1966) Kompilaator ei tuvasta objektide mälu kattumist, mis on tehtud aadressil absoluutselt (läbi __at()) ja muud objektid, mis kasutavad __section() spetsifikaatorit ja mis on lingitud sama aadressiga.
  • Teegi funktsioonide ja __memx (XC8-1763) tõrge, mida kutsutakse libgcc flujukfunktsioonideks, mille argument on aadressiruumis __memx, võib ebaõnnestuda. Pange tähele, et teegirutiine kutsutakse mõnelt C-operaatorilt, nii et näiteksample, mõjutab see järgmist koodi: return regFloatVar > memxFloatVar;
  • Piiratud libgcc juurutamine (AVRTC-731) ATTiny4/5/9/10/20/40 toodete puhul on standardne C / Math teegi rakendamine libgcc-s väga piiratud või puudub.
  • Programmimälu piirangud (AVRTC-732) Tööriistaahel toetab programmimälu kujutisi, 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 käsku, kui kasutatakse suvandit -mrelax.
  • Nimeruumi piirangud (AVRTC-733) Tööriistaahel toetab nimega aadressiruume, võttes arvesse piiranguid, mis on mainitud kasutusjuhendi jaotises Eritüübi kvalifikatsioonid.
  • Ajavööndid The raamatukogu funktsioonid eeldavad GMT-d ja ei toeta kohalikke ajavööndeid, seega tagastab localtime() sama aja kui gmtime(), näiteksample.

Dokumendid / Ressursid

MICROCHIP XC8 C kompilaatori versiooni 2.45 väljalaskemärkmed AVR MCU jaoks [pdfJuhised
AVR MCU, XC8 C, XC8 C kompilaatori versiooni 2.45 väljalaskemärkmed AVR MCU jaoks, kompilaatori versiooni 2.45 väljalaskemärkmed AVR MCU jaoks, versiooni 2.45 väljalaskemärkmed AVR MCU jaoks, väljalaskemärkmed AVR MCU jaoks, märkused AVR MCU MCU jaoks

Viited

Jäta kommentaar

Teie e-posti aadressi ei avaldata. Kohustuslikud väljad on märgitud *