MICROCHIP - logoMPLAB XC8 C Compiler Verzia 2.39 Poznámky k vydaniu pre AVR MCU
Používateľská príručka

TENTO DOKUMENT OBSAHUJE DÔLEŽITÉ INFORMÁCIE TÝKAJÚCE SA KOMPILOVAČA MPLAB XC8 C PRI ZACIELENÍ NA ZARIADENIA MICROCHIP AVR. PREČÍTAJTE SI HO PRED SPUSTENÍM TOHTO SOFTVÉRU.
POZRITE SI POZNÁMKY K VYDANIU KOMPILOVAČA MPLAB XC8 C PRE OBRÁZKOVÝ DOKUMENT, AK POUŽÍVATE PREKLADAČ PRE 8-BITOVÉ ZARIADENIA OBRÁZKOV.

Koniecview

1.1. Úvod
Toto vydanie kompilátora Microchip MPLAB® XC8 C je kompilátor funkčnej bezpečnosti, založený na vydaní tohto kompilátora v2.36 a ktorý teraz podporuje licenciu sieťového servera.
1.2. Dátum vydania
Oficiálny dátum vydania tejto verzie kompilátora je 27. január 2022.
1.3. Predošlá verzia
Predchádzajúca verzia kompilátora MPLAB XC8 C bola 2.36, vydaná 25. januára 2022.
1.4. Príručka funkčnej bezpečnosti
Príručka funkčnej bezpečnosti pre kompilátory MPLAB XC je k dispozícii v balíku dokumentácie, keď si zakúpite licenciu na funkčnú bezpečnosť.
1.5. Licencie a verzie komponentov® MPLAB
XC8 C Compiler pre nástroje AVR MCU sú napísané a distribuované pod GNU General Public License (GPL), čo znamená, že jeho zdrojový kód je voľne distribuovaný a dostupný verejnosti.
Zdrojový kód nástrojov pod GNU GPL je možné stiahnuť oddelene od Microchip's webstránky. GNU GPL si môžete prečítať v súbore s názvom umiestnenom v podadresári vášho adresára install license.txt avr/doc. Všeobecnú diskusiu o princípoch, ktoré sú základom GPL, nájdete tu.
Podporný kód poskytovaný pre hlavičkové súbory, linker skripty a runtime knižnice sú proprietárnym kódom a nevzťahuje sa na ne GPL.
Tento kompilátor je implementáciou GCC verzie 5.4.0, binutils verzie 2.26 a používa avr-libc verziu 2.0.0.
1.6. Systémové požiadavky
Kompilátor MPLAB XC8 C a licenčný softvér, ktorý využíva, sú k dispozícii pre rôzne operačné systémy vrátane 64-bitových verzií nasledujúcich: Professional edície Microsoft Windows 10; Ubuntu 18.04; a macOS 10.15.5. Binárne súbory pre Windows boli podpísané kódom. Binárne súbory pre macOS boli podpísané kódom a notársky overené.
Ak používate sieťový licenčný server, ako hostiteľ licenčného servera možno použiť iba počítače s operačnými systémami podporovanými kompilátormi. Od verzie xclm 2.0 je možné sieťový licenčný server nainštalovať na platformu Microsoft Windows Server, ale licenčný server nemusí bežať na serverovej verzii operačného systému.
1.7. Podporované zariadenia
Tento kompilátor podporuje všetky 8-bitové AVR MCU zariadenia známe v čase vydania. Pozri (v kompilátore avr_chipinfo.html adresár), kde nájdete zoznam všetkých podporovaných zariadení. V týchto súboroch sú uvedené aj nastavenia bitových dokumentov konfigurácie pre každé zariadenie.
1.8. Edície a aktualizácie licencií
Kompilátor MPLAB XC8 môže byť aktivovaný ako licencovaný (PRO) alebo nelicencovaný (Free) produkt. Ak chcete licencovať váš kompilátor, musíte si zakúpiť aktivačný kľúč. Licencia umožňuje vyššiu úroveň optimalizácie v porovnaní s bezplatným produktom. Nelicencovaný kompilátor možno prevádzkovať neobmedzene dlho bez licencie.
Kompilátor funkčnej bezpečnosti MPLAB XC8 musí byť aktivovaný licenciou funkčnej bezpečnosti zakúpenou od spoločnosti Microchip. Kompilátor nebude fungovať bez tejto licencie. Po aktivácii si môžete vybrať ľubovoľnú úroveň optimalizácie a použiť všetky funkcie kompilátora. Toto vydanie funkčnej bezpečnosti MPLAB XC
Kompilátor podporuje licenciu sieťového servera.
Informácie o typoch licencií a inštalácii kompilátora s licenciou nájdete v dokumente Inštalácia a licencovanie kompilátorov MPLAB XC C (DS50002059).
1.9. Inštalácia a aktivácia
Pozrite si tiež sekcie Problémy a obmedzenia migrácie, kde nájdete dôležité informácie o najnovšom správcovi licencií, ktorý je súčasťou tohto kompilátora.
Ak používate MPLAB IDE, pred inštaláciou tohto nástroja nezabudnite nainštalovať najnovšiu verziu MPLAB X IDE 5.0 alebo novšiu. Pred inštaláciou kompilátora ukončite IDE. Spustite (Windows), (Linux) alebo (macOS) .exe .spustite inštalačný program kompilátora .app a postupujte podľa pokynov na obrazovke.
XC8-1.00.11403-windows.exe
Odporúča sa predvolený inštalačný adresár. Ak používate Linux, musíte nainštalovať kompilátor pomocou terminálu a z účtu root. Nainštalujte pomocou účtu macOS s oprávneniami správcu.
Aktivácia sa teraz vykonáva oddelene od inštalácie. Viac informácií nájdete v dokumente License Manager for MPLAB® XC C Compilers (DS52059).
Ak sa rozhodnete spustiť kompilátor pod skúšobnou licenciou, teraz dostanete počas kompilácie varovanie, keď ste do 14 dní od konca skúšobného obdobia. Rovnaké varovanie sa zobrazí, ak ste do 14 dní od konca vášho predplatného HPA.
XC Network License Server je samostatný inštalačný program a nie je súčasťou inštalačného programu kompilátora pre jedného používateľa.
XC License Manager teraz podporuje roaming plávajúcich sieťových licencií. Táto funkcia, zameraná na mobilných používateľov, umožňuje, aby sa pohyblivá licencia na krátky čas odpojila od siete. Pomocou tejto funkcie sa môžete odpojiť od siete a naďalej používať kompilátor MPLAB XC. Viac o tejto funkcii nájdete v priečinku doc ​​inštalácie XCLM.
MPLAB X IDE obsahuje okno Licencie (Nástroje > Licencie) na vizuálnu správu roamingu.

1.9.1. Riešenie problémov s inštaláciou
Ak máte problémy s inštaláciou kompilátora pod ktorýmkoľvek operačným systémom Windows, vyskúšajte nasledujúce návrhy.

  • Spustite inštaláciu ako správca.
  • Nastavte povolenia inštalačnej aplikácie na „Úplná kontrola“. (Kliknite pravým tlačidlom myši na súbor, vyberte Vlastnosti, karta Zabezpečenie, vyberte používateľa, upravte.)
  • Nastavte povolenia dočasného priečinka na „Úplná kontrola!.
  • Ak chcete určiť umiestnenie dočasného priečinka, zadajte príkaz Spustiť (kláves s logom Windows + R). %temp% Toto otvorí dialógové okno prieskumníka súborov s daným adresárom a umožní vám určiť cestu k tomuto priečinku.

1.10. Dokumentácia kompilátora

MICROCHIP MPLAB XC8 C Compiler Verzia 2.39 Poznámky k vydaniu pre AVR MCU - dokumentPoužívateľské príručky kompilátora je možné otvoriť zo stránky HTML, ktorá sa otvorí vo vašom prehliadači po kliknutí na modré tlačidlo pomocníka na ovládacom paneli MPLAB X IDE, ako je uvedené na snímke obrazovky.
Ak vytvárate pre 8-bitové ciele AVR, MPLAB® XC8 C Compiler User's Guide for AVR
MCU obsahuje informácie o možnostiach a funkciách kompilátora, ktoré sú použiteľné pre túto architektúru.

1.11. Zákaznícka podpora
Microchip víta hlásenia chýb, návrhy alebo komentáre týkajúce sa tejto verzie kompilátora. Akékoľvek hlásenia chýb alebo požiadavky na funkcie smerujte prostredníctvom systému podpory.

Aktualizácie dokumentácie

Pre on-line a aktuálne verzie dokumentácie MPLAB XC8 navštívte prosím Microchip's Online
Technická dokumentácia webstránky.
Nová alebo aktualizovaná dokumentácia AVR v tomto vydaní:
Inštalácia a licencovanie MPLAB® XC C kompilátorov (DS50002059) revízia L
Referenčná príručka štandardnej knižnice Microchip Unified Standard Library popisuje správanie a rozhranie funkcií definovaných štandardnou knižnicou Microchip Unified Standard Library, ako aj zamýšľané použitie typov knižníc a makier. Niektoré z týchto informácií boli predtým obsiahnuté v MPLA® XC8 C Compiler User!s Guide® for AVR
MCU. Informácie o knižnici špecifické pre zariadenie sú stále obsiahnuté v tejto príručke kompilátora.
Používateľská príručka Hexmate bola zahrnutá do adresára v tomto vydaní. Táto príručka je určená pre dokumenty, ktoré používajú Hexmate ako samostatnú aplikáciu.
Nasledujúce časti poskytujú opravy a dodatočné informácie k tým, ktoré nájdete v používateľských príručkách dodávaných s kompilátorom.

2.1. Smart-io-format Option
Voľba-msmart-io-format=fmt fmt, kde je reťazec obsahujúci formátované špecifikácie konverzie IO, upozorní kompilátor, že uvedené špecifikácie používajú funkcie smart IO.
Aby sa zmenšila veľkosť kódu, kompilátor prispôsobuje kód knižnice spojený s rodinami tlače a skenovania inteligentných IO funkcií na základe špecifikácií konverzie prítomných vo formátovacích reťazcoch zoradených vo všetkých volaniach týchto funkcií. Táto funkcia je plne automatická a nemožno ju vypnúť.
V niektorých situáciách kompilátor nedokáže určiť informácie o použití z naformátovaného volania funkcie IO. Ak bola voľba použitá, požadované konverzné špecifikácie pre tieto funkcie sa získajú z reťazca; v opačnom prípade kompilátor nerobí žiadne predpoklady o tom, ako sa používajú funkcie -msmart-io-format=fmt fmt a zaisťuje, že plne funkčné formátované IO funkcie sú prepojené s konečným obrazom programu.
Napríkladample, zvážte nasledujúce volania funkcií smart IO.

vscanf(“%d:%li”, va_list1);
vprintf(“%-s%d”, va_zoznam2);
vprintf(fmt1, va_list3);// nejednoznačné použitie
vscanf(fmt2, va_list4);// nejednoznačné použitie

Pri spracovaní posledných dvoch volaní nemôže kompilátor odvodiť žiadne informácie o použití ani z formátovacích reťazcov, ani z argumentov. V týchto prípadoch možno použiť voľbu -msmart-io-format a potenciálne umožní vygenerovať optimálnejšie formátované funkcie I0, čím sa zníži veľkosť kódu programu. Napríkladample, ak formátovacie reťazce, na ktoré odkazujú fmtl a fmt2, spoločne používajú iba špecifikátory konverzie „%d“, „%i“ a „% s“, -msmart-io-format=fmt=”%d%i%s “, mala by byť vydaná možnosť.

Reťazec odtieňa môže obsahovať akúkoľvek platnú špecifikáciu konverzie vrátane príznakov a modifikátorov (naprample "%-13. 91s”) a mali by presne odrážať tie, ktoré používajú funkcie, ktorých použitie je nejednoznačné. Nezahrnutie špecifikácie do bit argument tam, kde ho použili formátované funkcie I0, môže viesť k zlyhaniu kódu.
Ak je fmt prázdny reťazec alebo neobsahuje žiadne rozoznateľné špecifikácie konverzie, vydá sa varovanie a plne funkčné naformátované funkcie sa prepoja s konečným obrazom programu.
Táto možnosť môže byť použitá viackrát na príkazovom riadku. Špecifikácie konverzie použité pri každej možnosti sa zhromažďujú.

2.2. možnosť vynechať-snímka-ukazovateľ
Voľba – f omit- frame-pointer inštruuje kompilátor, aby priamo použil ukazovateľ zásobníka na prístup k objektom v zásobníku a ak je to možné, vynechal kód, ktorý ukladá, inicializuje a obnovuje register rámcov. Aktivuje sa automaticky na všetkých nenulových úrovniach optimalizácie.
Negovanie voľby pomocou -fno-omit- frame-pointer môže pomôcť pri ladení optimalizovaného kódu; táto možnosť však nezaručuje, že ukazovateľ snímky bude vždy použitý.

2.3. Unroll-loops Options
Voľby – funrol I-slučky a -(unroll-all-loops) riadia optimalizácie orientované na rýchlosť, ktoré sa pokúšajú odstrániť oneskorenia vetvenia v slučkách.Rozvinuté slučky zvyčajne zvyšujú rýchlosť vykonávania generovaného kódu na úkor väčšej veľkosti kódu.
Možnosť – funrol I-loops rozvinie slučky, kde je možné určiť počet iterácií v čase kompilácie alebo keď kód vstúpi do slučky. Voľba -funroll-all-loops je agresívnejšia a rozvinie všetky cykly, aj keď nie je známy počet iterácií. Zvyčajne je menej efektívne pri zlepšovaní rýchlosti vykonávania ako možnosť – funrol 1-loops.

2.4. fat-Ito-objekty Možnosť
Možnosť – f fat-1 to-obj ects požaduje, aby kompilátor vygeneroval tučný objekt files, ktoré obsahujú oboje
objektový kód a GIMPLE (jedna z interných reprezentácií GCC), zapísané do jedinečných sekcií ELF. Takéto predmety files sú užitočné pre kód knižnice, ktorý by mohol byť prepojený s projektmi, ktoré používajú a nepoužívajú štandardný optimalizátor času prepojenia, riadený voľbou -flto.
Forma – fno-fat-lto-objects tejto možnosti, ktorá je predvolená, ak nie je zadaná žiadna možnosť, potláča zahrnutie kódu objektu do objektu files, výsledkom čoho sú rýchlejšie zostavy. Avšak, takýto objekt files musia byť vždy prepojené pomocou štandardného optimalizátora doby prepojenia.

2.5. Možnosť Ito-partition
– flto-partiti on=a Igo ri thm voľba riadi algoritmus použitý na rozdelenie objektu files pri spustení optimalizátora času prepojenia. Argument none úplne deaktivuje rozdelenie a vykoná krok optimalizácie času pripojenia priamo z fázy analýzy celého programu (WPA). Tento režim prevádzky prinesie najoptimálnejšie výsledky na úkor väčších požiadaviek na pamäť kompilátora a dlhších časov zostavovania, aj keď je nepravdepodobné, že by to bol problém s malými programami. Rozdelenie objektu files môže zlepšiť výkon zostavy. Argument jedna určuje, že by sa mal použiť práve jeden oddiel, a argument lto1 špecifikuje rozdelenie, ktoré zrkadlí to, čo diktoval pôvodný zdroj files. Predvolený argument je vyvážený, ktorý určuje rozdelenie na rovnako veľké časti, ak je to možné.

2.6. Dodatok k časti 3.6.11 Možnosti mapovaného linkera
-wl, –oddiel-začiatok = sek tion=addr chýba v tabuľke bežne používaných možností linkera, ktoré sú dostupné pomocou voľby ovládača kompilátora -wl. Táto možnosť umožňuje umiestnenie vlastných pomenovaných sekcií na zadanú adresu. Nemožno ho použiť na umiestnenie štandardných sekcií, ako sú ( . údaje, . bss, . text), ktorý musí byť umiestnený pomocou voľby -wl, -'r.

2.7. Dodatok k časti 4.14.2 Zmena a prepojenie pridelenej časti
Všimnite si, že na rozdiel od informácií obsiahnutých v tejto časti používateľskej príručky, zmeny vykonané v kompilátore v tomto vydaní teraz znamenajú, že vlastné sekcie je možné prepojiť pomocou -w1, -sekta ión- start=section=acicir možnosť a bez toho, aby ste museli upravovať linker skript.

Čo je nové

Nasledujú nové cieľové funkcie AVR, ktoré kompilátor teraz podporuje. Číslo verzie v podnadpisoch označuje prvú verziu kompilátora, ktorá podporuje funkcie, ktoré nasledujú.

3.1. Verzia 2.39 (funkčné bezpečnostné vydanie)
Licencia pre sieťový server Toto vydanie kompilátora funkčnej bezpečnosti MPLAB XC8 podporuje licenciu sieťového servera.

3.2. Verzia 2.36 
žiadne.
3.3. Verzia 2.35 
Podpora nových zariadení Podpora je dostupná pre nasledujúce časti AVR: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 a AVR64DD32.
Vylepšené prepínanie kontextu Nová voľba -mcall-isr-prologues mení spôsob, akým funkcie prerušenia ukladajú registre pri vstupe a ako sa tieto registre obnovia po ukončení rutiny prerušenia. Funguje to podobne ako možnosť -mcall-prologues, ale ovplyvňuje iba funkcie prerušenia (ISR).
Ešte vylepšené prepínanie kontextu Nové -mgas-isr-prológy voľba riadi kód prepínania kontextu generovaný pre servisné rutiny malých prerušení. Ak je táto funkcia povolená, bude assembler kontrolovať použitie registrov v ISR a uložiť tieto použité registre iba v prípade potreby.
Konfigurovateľné flash mapovanie Niektoré zariadenia z rodiny AVR DA a AVR DB majú SFR (napr. FLMAP), ktorý určuje, ktorá 32k sekcia programovej pamäte bude mapovaná do dátovej pamäte. Nová možnosť – mconst-data-in-config-mapped-progmem môže byť použitá na to, aby linker umiestnil všetky cons t-kvalifikované údaje do jednej 32k sekcie a automaticky inicializoval príslušný register SFR, aby sa zabezpečilo, že tieto údaje budú mapované do údajov. pamäťový priestor, kde sa k nemu bude pristupovať efektívnejšie.

Microchip Unified Standard Libraries Všetky MPLAB Kompilátory XC budú zdieľať štandardnú knižnicu Microchip Unified Standard Library, ktorá je teraz k dispozícii v tomto vydaní MPLAB XC8. The MPLAB® Kompilátor XC8 C
Používateľská príručka pre AVR® MCU už neobsahuje dokumentáciu pre tieto štandardné funkcie. Tieto informácie teraz nájdete v Referenčná príručka zjednotenej štandardnej knižnice Microchip. Všimnite si, že niektoré funkcie predtým definované avr-libc už nie sú dostupné. (Pozri Funkcia knižnice.)
Smart I0 Ako súčasť nových zjednotených knižníc sú teraz funkcie JO v rodinách printf a scanf generované na mieru pre každú zostavu na základe toho, ako sa tieto funkcie používajú v programe. To môže výrazne znížiť zdroje využívané programom.
Možnosť asistencie inteligentného I0 Pri analýze volaní funkcií inteligentného I0 (ako je printf () alebo scanf ()) kompilátor nemôže vždy určiť z formátovacieho reťazca alebo odvodiť z argumentov tie konverzné špecifikátory požadované volaním. Predtým kompilátor vždy nerobil žiadne predpoklady a zabezpečil, že plne funkčných 10 funkcií bolo prepojených do konečného obrazu programu. Bola pridaná nová možnosť – msma rt-io- format=fmt, takže kompilátor môže byť namiesto toho informovaný používateľom o špecifikátoroch konverzie používaných funkciami smart I0, ktorých použitie je nejednoznačné, čo zabraňuje prepojeniu príliš dlhých 10 rutín. (Pozri smart-io-formát Možnosť pre ďalšie podrobnosti.)
Umiestnenie vlastných sekcií Predtým možnosť -W1, –section-start umiestnila špecifikovanú sekciu na požadovanú adresu iba vtedy, keď skript linkera definoval výstupnú sekciu s rovnakým názvom. Keď to tak nebolo, sekcia bola umiestnená na adresu zvolenú linkerom a možnosť bola v podstate ignorovaná. Teraz sa táto možnosť použije pre všetky vlastné sekcie, aj keď skript linkera sekciu nedefinuje. Upozorňujeme však, že pre štandardné sekcie, ako je . text, . bss alebo . údaje, najvhodnejší alokátor bude mať stále úplnú kontrolu nad ich umiestnením a táto možnosť nebude mať žiadny vplyv. Použite -wl, -Tsection=addr možnosť, ako je popísané v používateľskej príručke.

3.4. Verzia 2.32
Stack Guidance Funkcia kompilátora stack Guidance, ktorá je k dispozícii s licenciou kompilátora PRO, sa dá použiť na odhadnutie maximálnej hĺbky akéhokoľvek stacku používaného programom. Konštruuje a analyzuje volací graf programu, určuje využitie zásobníka každej funkcie a vytvára správu, z ktorej možno odvodiť hĺbku zásobníkov používaných programom.
Táto funkcia je povolená pomocou voľby príkazového riadka -mchp-stack- use. Po vykonaní sa vytlačí súhrn využitia zásobníka. Podrobný prehľad zásobníka je k dispozícii na mape file, o ktorú je možné požiadať bežným spôsobom.
Podpora nových zariadení Podpora je k dispozícii pre nasledujúce časti AVR: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTNY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB, AVR28DB, 64DVR 32.
Podpora stiahnutých zariadení Podpora už nie je k dispozícii pre nasledujúce časti AVR: AVR 16DA28, AVR16DA32 a AVR16DA48.

3.5. Verzia 2.31 Žiadna.
3.6. Verzia 2.30
Nová možnosť zabrániť inicializácii údajov Nová možnosť ovládača -mno-data-init zabraňuje inicializácii údajov a vymazaniu sekcií bss. Funguje tak, že potláča výstup symbolov do_copy_data a do_clear_bss v zostave files, čo zase zabráni zahrnutiu týchto rutín linkerom.
Vylepšené optimalizácie Vykonalo sa množstvo optimalizačných vylepšení, vrátane odstránenia nadbytočných návratových inštrukcií, odstránenia niektorých skokov po inštrukcii skip-if-bit-is a vylepšenej procedurálnej abstrakcie a schopnosti opakovať tento proces.
Teraz sú k dispozícii ďalšie možnosti na ovládanie niektorých z týchto optimalizácií, konkrétne -fsection-anchors, ktorá umožňuje vykonávať prístup k statickým objektom vzhľadom na jeden symbol; -mpa-iterácie =n, čo umožňuje zmeniť počet iterácií procedurálnej abstrakcie z predvolených 2; a -mpa-callcost-shortcal 1, ktorý vykonáva agresívnejšiu procedurálnu abstrakciu v nádeji, že linker dokáže uvoľniť dlhé hovory. Táto posledná možnosť môže zväčšiť veľkosť kódu, ak nie sú splnené základné predpoklady.
Nové podpora zariadenia Podpora je k dispozícii pre nasledujúce diely AVR: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128B28VRB128 a AVR32DB128.
Podpora zasunutého zariadenia Podpora už nie je k dispozícii pre nasledujúce časti AVR: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C, ATA664251, ATAXNUMX

3.7. Verzia 2.29 (funkčné bezpečnostné vydanie)
Hlavička file pre kompilátor bunt-ins Aby sa zabezpečilo, že kompilátor môže vyhovovať špecifikáciám jazyka, ako je MISRA, hlavička file, ktorý je automaticky zahrnutý do , bolo aktualizované. Táto hlavička obsahuje prototypy pre všetky vstavané funkcie, ako sú vstavané in_avr_nop ( ) a _builtin_avr_delay_cycles () . Niektoré vstavané moduly nemusia byť kompatibilné s MISRA; tieto možno vynechať pridaním definície XC_STRICT MISRA do príkazového riadku kompilátora. Vstavané moduly a ich deklarácie boli aktualizované, aby používali typy s pevnou šírkou.

3.8. Verzia 2.20
Nové podpora zariadenia Podpora je k dispozícii pre nasledujúce diely AVR: ATTINY 1624, ATTINY1626 a ATTINY 1 627.
Lepšie pridelenie najlepšieho prispôsobenia Najvhodnejší alokátor (BFA) v kompilátore bol vylepšený, takže sekcie sú prideľované v poradí umožňujúcom lepšiu optimalizáciu. BFA teraz podporuje pomenované adresné priestory a lepšie zvláda inicializáciu údajov.
Vylepšená procedurálna abstrakcia Optimalizácie procedurálnej abstrakcie sa teraz vykonávajú na viacerých kódových sekvenciách. Predchádzajúce situácie, keď táto optimalizácia mohla zvýšiť veľkosť kódu, boli vyriešené tým, že optimalizačný kód bol informovaný o procese zberu odpadu linkera.
Absencia AVR Assembler AVR Assembler už nie je súčasťou tejto distribúcie. 3.9. Verzia 2.19 (Funkčná bezpečnosť vydanie)
žiadne.
3.10. Verzia 2.10
Pokrytie kódu Toto vydanie obsahuje funkciu pokrytia kódu, ktorá uľahčuje analýzu rozsahu, v akom bol spustený zdrojový kód projektu. Na aktiváciu použite voľbu -mcodecov=ram. Po spustení programu na vašom hardvéri sa v zariadení zhromaždia informácie o pokrytí kódu, ktoré je možné preniesť a zobraziť v MPLAB X IDE prostredníctvom doplnku pokrytia kódu. Informácie o tomto doplnku nájdete v dokumentácii k IDE.
#pragma nocodecov možno použiť na vylúčenie následných funkcií z analýzy pokrytia. Ideálne by mala byť pragma pridaná na začiatku file vylúčiť to celé file z analýzy pokrytia. Alternatívne možno použiť _attribute_ ( (nocodecov)) na vylúčenie špecifickej funkcie z analýzy pokrytia.
Popis zariadenia files Nové zariadenie file s názvom avr_chipinfo.html sa nachádza v adresári docs

distribúciu kompilátora. Toto file zoznam všetkých zariadení podporovaných kompilátorom. Kliknite na názov zariadenia a otvorí sa stránka so všetkými povolenými pármi nastavenia/hodnoty konfiguračného bitu pre toto zariadenie, napr.amples.

Procedurálna abstrakcia Do kompilátora boli pridané optimalizácie procedurálnej abstrakcie, ktoré nahrádzajú bežné bloky kódu zostavy volaniami extrahovanej kópie tohto bloku. Tie vykonáva samostatná aplikácia, ktorú kompilátor automaticky vyvolá pri výbere úrovne 2, 3 resp. s optimalizácie. Tieto optimalizácie znižujú veľkosť kódu, ale môžu znížiť rýchlosť vykonávania a laditeľnosť kódu.
Procedurálnu abstrakciu možno zakázať na vyšších úrovniach optimalizácie pomocou voľby -mno-pa, alebo ju povoliť na nižších úrovniach optimalizácie (v závislosti od vašej licencie) pomocou -mpa. Dá sa deaktivovať pre objekt file pomocou -mno-pa-on-f ile=filename alebo deaktivované pre funkciu pomocou -mno-pa-onfunotion=f pomazanie.
Vo vašom zdrojovom kóde je možné deaktivovať procedurálnu abstrakciu pre funkciu použitím atribútu_ ( (nopa) ) s definíciou funkcie alebo použitím nopa, ktoré sa rozšíri na _attribute_ ( (nopa, noinline) ) a tak zabráni vykonaniu vloženia funkcie a tam je abstrakcia vloženého kódu.
Podpora uzamykacieho bitu v pragme Konfiguráciu #pragma možno teraz použiť na špecifikáciu blokovacích bitov AVR, ako aj ostatných konfiguračných bitov. Skontrolujte avr_chipinfo.html file (spomenuté vyššie) pre páry nastavenie/hodnota na použitie s touto pragmou.
Nové podpora zariadenia Podpora je dostupná pre nasledujúce časti: AVR28DAl28, AVR64DAl28, AVR32DAl28 a AVR48DAl28.

3.11. Verzia 2.05
Viac kúskov za vaše peniaze Verzia tohto kompilátora a správcu licencií pre macOS je teraz 64-bitová aplikácia. Tým sa zabezpečí, že sa kompilátor nainštaluje a spustí bez upozornení v najnovších verziách systému macOS.
Konštantné objekty v pamäti programu Kompilátor teraz môže umiestniť objekty s kvalifikáciou const do pamäte Flash programu namiesto toho, aby ich mal umiestnené v RAM. Kompilátor bol upravený tak, že globálne dáta s kvalifikáciou cons t sú uložené v programovej flash pamäti a k ​​týmto dátam je možné priamo a nepriamo pristupovať pomocou príslušných inštrukcií programovej pamäte. Táto nová funkcia je predvolene povolená, ale dá sa vypnúť pomocou voľby -mno-const-data-in-progmem. Pre architektúry avrxmega3 a avrtiny sa táto funkcia nevyžaduje a je vždy zakázaná, pretože pamäť programu je mapovaná do priestoru adries údajov pre tieto zariadenia.
Štandardne zadarmo Nelicencované (bezplatné) verzie tohto kompilátora teraz umožňujú optimalizáciu až po úroveň 2 vrátane. To umožní podobný, aj keď nie identický výstup, aký bol predtým možný pomocou štandardnej licencie.
Vitajte AVRASM2 Assembler AVRASM2 pre 8-bitové zariadenia je teraz súčasťou inštalačného programu kompilátora XC8. Tento assembler nepoužíva kompilátor XC8, ale je dostupný pre projekty založené na ručne písaných zdrojoch zostavy.
Nové podpora zariadenia Podpora je k dispozícii pre nasledujúce časti: ATMEGA1608, ATMEGA 1609, ATMEGA808 a ATMEGA809.

3.12. Verzia 2.00
Vodič najvyššej úrovne Nový ovládač s názvom xc8 -cc sa teraz nachádza nad predchádzajúcim ovládačom avr-gcc a ovládačom xc8 a môže volať príslušný kompilátor na základe výberu cieľového zariadenia. Tento ovládač akceptuje voľby v štýle GCC, ktoré sú buď preložené alebo odovzdané vykonávanému kompilátoru. Tento ovládač umožňuje použiť podobnú sadu možností s podobnou sémantikou s akýmkoľvek cieľom AVR alebo PIC, a preto je odporúčaným spôsobom vyvolania kompilátora. V prípade potreby je možné starý ovládač avr-gcc volať priamo pomocou možností starého štýlu, ktoré akceptoval v starších verziách kompilátora.
Spoločné rozhranie C Tento kompilátor sa teraz môže prispôsobiť MPLAB Common C Interface, čo umožňuje jednoduchší prenos zdrojového kódu do všetkých MPLAB XC kompilátorov. Voľba -mext=cci vyžaduje túto funkciu, čím umožňuje alternatívnu syntax pre mnohé jazykové rozšírenia.
Nový vodič knižnice A nový ovládač knižnice je umiestnený nad predchádzajúcim knihovníkom knižnice PIC a knihovníkom AVR avr-ar. Tento ovládač akceptuje voľby v štýle archívu GCC, ktoré sú buď preložené alebo odovzdané vykonávanému knihovníkovi. Nový ovládač umožňuje použiť podobnú sadu možností s podobnou sémantikou na vytvorenie alebo manipuláciu s ľubovoľnou knižnicou PIC alebo AVR file a je teda odporúčaným spôsobom privolávania knihovníka. Ak je to potrebné pre staršie projekty, predchádzajúci knihovník môže byť zavolaný priamo pomocou možností starého štýlu, ktoré akceptoval v starších verziách kompilátora.

Problémy migrácie

Nasledujú funkcie, s ktorými teraz kompilátor zaobchádza inak. Tieto zmeny môžu vyžadovať úpravu vášho zdrojového kódu, ak prenesiete kód do tejto verzie kompilátora. Číslo verzie v podnadpisoch označuje prvú verziu kompilátora, ktorá podporuje nasledujúce zmeny.

4.1. Verzia 2.39 (funkčné bezpečnostné vydanie)
žiadne.
4.2. Verzia 2.36 žiadne.
4.3. Verzia 2.35
Manipulácia so základňami string-to (XC8-2420) Na zabezpečenie konzistentnosti s inými kompilátormi XC, XC8 string-to funkcie ako strtol () atď. sa už nebudú pokúšať konvertovať vstupný reťazec, ak je zadaný základ väčší ako 36 a namiesto toho nastavia errno na EINVAL. Štandard C nešpecifikuje správanie funkcie, keď je táto základná hodnota prekročená.
Nevhodná optimalizácia rýchlosti Procedurálne optimalizácie abstrakcie boli povolené pri výbere optimalizácie úrovne 3 (-03). Tieto optimalizácie znižujú veľkosť kódu na úkor rýchlosti kódu, takže by sa nemali vykonávať. Projekty používajúce túto úroveň optimalizácie môžu zaznamenať rozdiely vo veľkosti kódu a rýchlosti vykonávania pri zostavovaní s týmto vydaním.
Funkcionalita knižnice Kód pre mnohé funkcie štandardnej knižnice C teraz pochádza z Unifikovanej štandardnej knižnice Microchip, ktorá môže za určitých okolností vykazovať odlišné správanie v porovnaní s tým, ktoré poskytuje bývalá knižnica avr-libc. Naprample, už nie je potrebné prepojiť knižnicu 1printf flt (voľba -1printf_flt), aby ste zapli podporu formátovania I0 pre špecifikátory plávajúceho formátu. Inteligentných 10 funkcií knižnice Microchip Unified Standard Library robí túto možnosť nadbytočnou. Okrem toho už nie je potrebné používať rutiny s príponou _P pre funkcie reťazcov a pamäte (napr. strcpy_P ( ) atď.), ktoré pracujú s reťazcami const vo flashi. Štandardné rutiny C (napr. strcpy 0 ) budú s takýmito údajmi pracovať správne, keď je povolená funkcia const-data-in-program-memory.

4.4. Verzia 2.32
žiadne.
4.5. Verzia 2.31
žiadne.
4.6. Verzia 2.30
žiadne.
4.1. Verzia 2.29 (funkčné bezpečnostné vydanie)
žiadne.
4.2. Verzia 2.20
Zmenené rozloženie DFP Kompilátor teraz predpokladá iné rozloženie, ktoré používajú DFP (device Family Pack). Znamená to, že staršia služba DFP nemusí s týmto vydaním fungovať a staršie kompilátory nebudú môcť používať najnovšie služby DFP.

4.3. Verzia 2.19 (funkčné bezpečnostné vydanie)
žiadne.
4.4. Verzia 2.10 Žiadna
4.5. Verzia 2.05
Const objekty v pamäti programu Všimnite si, že štandardne, const-kvalifikované objekty budú umiestnené a prístupné v pamäti programu (ako je popísané u nej). To ovplyvní veľkosť a rýchlosť vykonávania vášho projektu, ale malo by to znížiť využitie pamäte RAM. Túto funkciu je možné v prípade potreby deaktivovať pomocou voľby -mnocons t-data-in-progmem.

4.6. Verzia 2.00
Konfiguračné poistky Konfiguračné poistky zariadenia je teraz možné naprogramovať pomocou konfigurácie pragma, po ktorej nasledujú páry nastavenie-hodnota na špecifikáciu stavu poistky, napr. #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3
Absolútne objekty a funkcie Objekty a funkcie je teraz možné umiestniť na konkrétnu adresu v pamäti pomocou CCI_at (adresa) špecifikátor, naprample:
ifinclude
int foobar na (0)0300100);
char at(0x250) getID(int offset) ( Argument tohto špecifikátora musí byť konštanta, ktorá predstavuje adresu, na ktorú bude umiestnený prvý bajt alebo inštrukcia. Adresy RAM sú označené pomocou offsetu Ox800000. Povoľte CCI na použite túto funkciu.
Nová syntax funkcie prerušenia Kompilátor teraz akceptuje prerušenie CCI (č) špecifikátor na označenie, že funkcie C sú obslužné programy prerušení. Špecifikátor má číslo prerušenia, naprample:

Opravené problémy

Nasledujú opravy, ktoré boli vykonané v kompilátore. Tieto môžu opraviť chyby vo vygenerovanom kóde alebo zmeniť činnosť kompilátora na to, čo bolo zamýšľané alebo špecifikované v používateľskej príručke. Číslo verzie v podnadpisoch označuje prvú verziu kompilátora, ktorá obsahuje opravy pre nasledujúce problémy. Štítky v zátvorkách v názve predstavujú identifikáciu daného problému v databáze sledovania. Tieto môžu byť užitočné, ak potrebujete kontaktovať podporu.
Upozorňujeme, že niektoré problémy špecifické pre zariadenie sú opravené v balíku Device Family Pack (DR)) spojené so zariadením. Informácie o zmenách vykonaných v DFP a o stiahnutí najnovších balíkov nájdete v Správcovi balíkov MPLAB.

5.1. Verzia 2.39 (funkčné bezpečnostné vydanie)
žiadne.
5.2. Verzia 2.36
Chyba pri oneskorení (XCS2774) Menšie zmeny v predvolených optimalizáciách voľného režimu zabránili neustálemu skladaniu výrazov operandov do vstavaných funkcií oneskorenia, čo malo za následok, že sa s nimi zaobchádzalo ako s nekonštantnými a došlo k chybe. vstavaný in_avr_delay_cycles očakáva celočíselnú konštantu času kompilácie.

5.3. Verzia 2.35
Súvislý pridelenie pomocou _at (XCS2653) Súvislé prideľovanie viacerých objektov v sekcii s rovnakým názvom a pomocou _at () nefungovalo správne. Napríkladample:
const char arrl[ ] atribút (section(.mysec”) at (0x500) = (OxAB, OxCD);
const char arr2[ ] atribút (sectionr.mysec”)= (OxEF, OxFE);
mal umiestniť arr2 ihneď po arri.
Zadanie počiatočných adries sekcií (XCS2650) Voľba -wl, –section-start ticho zlyhala pri umiestnení sekcií na nominovanú počiatočnú adresu. Tento problém bol vyriešený pre ľubovoľné sekcie s vlastným názvom; nebude to však fungovať pre žiadne štandardné sekcie, ako napríklad . text alebo . bss, ktorý musí byť umiestnený pomocou a -wl, -T možnosť.
Linker zlyhá pri relaxácii (XCS2647) Kedy optimalizácia -mrelax bola povolená a boli to sekcie kódu alebo údajov, ktoré sa nezmestili do dostupnej pamäte, linker sa zrútil. Teraz sa za takýchto okolností namiesto toho vydávajú chybové hlásenia.
Nie niepadajúcespäť (XCS2646) – možnosť nofallback nebola správne implementovaná ani zdokumentovaná. Toto je teraz možné vybrať, aby sa zabezpečilo, že kompilátor neklesne späť na nižšie nastavenie optimalizácie, ak kompilátor nemá licenciu, a namiesto toho vydá chybu.
Nevhodná optimalizácia rýchlosti (XCS2637) Procedurálne optimalizácie abstrakcie boli povolené pri výbere optimalizácie úrovne 3 (-03). Tieto optimalizácie znižujú veľkosť kódu na úkor rýchlosti kódu, takže by sa nemali vykonávať.
Zlý prístup k EEPROM (XCS2629) Rutina eeprom_read_block nefungovala správne na zariadeniach Xmega, keď bola povolená možnosť -mconst-data-in-progmem (čo je predvolený stav), čo malo za následok nesprávne načítanie pamäte EEPROM.
Neplatné pridelenie pamäte (X03-2593, XC8-2651) Kedy možnosť -Ttext alebo -Tdata linker (naprampsúbor prešiel pomocou voľby ovládača -wl), bol aktualizovaný zodpovedajúci pôvod oblasti textu/údajov; koncová adresa však nebola zodpovedajúcim spôsobom upravená, čo mohlo viesť k tomu, že oblasť prekročila rozsah pamäte cieľového zariadenia.
Zlyhanie s nadmerne priradenou funkciou (XC8-2580) Kompilátor zlyhal, ak bola funkcia deklarovaná pomocou viac ako jedného z atribútov prerušenia, signálu alebo nmi, napr. _atribút_ ( ( signál , prerušenie ) ).
Neplatný kód prerušenia ATtiny (XC8-2465) Pri vytváraní pre zariadenia ATtiny a optimalizácie boli deaktivované (-00), funkcie prerušenia mohli spustiť správy assembleru mimo rozsahu.
Voľby neprechádzajú cez (XC8-2452) Pri použití -wl s viacerými možnosťami linkera oddelenými čiarkami, nie všetky možnosti linkera boli odovzdané linkeru.
Chyba nepriameho čítania programovej pamäte (X03-2450) V niektorých prípadoch kompilátor vytvoril interná chyba (nerozpoznateľná insn) pri čítaní dvojbajtovej hodnoty z ukazovateľa do pamäte programu

5.4. Verzia 2.32
Druhý prístup ku knižnici zlyhá (X03-2381) Druhé vyvolanie verzie archívu knižnice xc8-ar.exe pre systém Windows na prístup k existujúcemu archívu knižnice mohlo zlyhať, pretože sa nepodarilo premenovať chybové hlásenie.

5.5. Verzia 2.31
Nevysvetlené zlyhania kompilátora (XC8-2367) Pri behu ďalej Windows platformy, ktoré mali systémový dočasný adresár nastavený na cestu, ktorá obsahovala bodku '.' kompilátor možno zlyhal pri spustení.

5.6. Verzia 2.30
Globálne štítky nesprávne umiestnené po načrtnutí (XC8-2299) Ručne písaný kód zostavy, ktorý umiestňuje globálne štítky v rámci montážnych sekvencií, ktoré sú zohľadnené procedurálnou abstrakciou, možno neboli správne premiestnené.
Relaxačný pád (XC8-2287) Pomocou - relaxovať možnosť mohla spôsobiť zlyhanie linkera, keď optimalizácie relaxácie skoku chvosta sa pokúsili odstrániť inštrukcie ret, ktoré neboli na konci a oddiele.
Zlyhanie pri optimalizácii štítkov ako hodnôt (XC8-2282) Kód pomocou GNU C „Štítky ako hodnoty“ jazykové rozšírenie mohlo spôsobiť zlyhanie optimalizácií procedurálnej abstrakcie s chybou opravy rozsahu Outlined VMA.
Nie tak const (XC8-2271) Prototypy pre strstr () a ďalšie funkcie z už neuvádzajte neštandardný kvalifikátor const na vrátených ukazovateľoch reťazca, keď je funkcia -mconst-data- inprogmem zakázaná. Upozorňujeme, že pri zariadeniach avrxmega3 a avrtiny je táto funkcia trvalo povolená.
Stratené inicializátory (XC8-2269) Pri preklade viacerých premenných jednotka bola umiestnená v sekcii (pomocou oddiele or atribút ( (sekcia) )) a prvá takáto premenná bola inicializovaná nulou alebo nemala inicializátor, inicializátory pre iné premenné v tej istej prekladovej jednotke, ktoré boli umiestnené v rovnakej sekcii, sa stratili.

5.1. Verzia 2.2 9 (Funkčné bezpečnostné vydanie) Žiadne. 
5.2. Verzia 2.20
Chyba s dlhými príkazmi (XC8-1983) Pri použití cieľa AVR sa kompilátor mohol zastaviť s chybou lilt not found, ak bol príkazový riadok extrémne veľký a obsahoval špeciálne znaky ako úvodzovky, spätné lomky atď.
Nepriradená sekcia rodata (XC8-1920) Linkeru AVR sa nepodarilo priradiť pamäť pre vlastné sekcie rodata pri vytváraní pre architektúry avrxmega3 a avrtiny, čo môže spôsobiť chyby prekrývania pamäte

5.3. Verzia 2.19 (funkčné bezpečnostné vydanie)
žiadne.
5.4. Verzia 2.10
Zlyhania premiestnenia (XC8-1891) Najvhodnejším alokátorom bolo, že po uvoľnení linkera zostali medzi sekciami „diery“ v pamäti. Okrem fragmentácie pamäte to zvýšilo možnosť zlyhania premiestnenia linkera v súvislosti s počítačovými skokmi alebo volaniami, ktoré sa dostali mimo dosah.
Inštrukcie netransformované relaxáciou (XC8-1889) Uvoľnenie linkera nenastalo pre skokové alebo volacie inštrukcie, ktorých ciele sa stanú dosiahnuteľné, ak sa uvoľnia.
Chýba funkčnosť (XC8E-3 ) Niekoľko definícií z , ako napríklad clock_div_t a clock_presc ale_s et () , neboli definované pre zariadenia vrátane ATmega324PB, ATmega328PB, ATtiny441 a ATtiny841.
Chýbajúce makrá Makrá preprocesora _XC 8_MODE_, XC 8 VERS ION, XC a xc8 neboli automaticky definované kompilátorom. Tieto sú teraz k dispozícii.

5.5. Verzia 2.05
Interná chyba kompilátora (XC8-1822) Pri zostavovaní pod Windowsom sa pri optimalizácii kódu mohla vyskytnúť interná chyba kompilátora.
Nebolo zistené pretečenie pamäte RAM (XC8-1800, XC8-1796) Programy, ktoré prekročili dostupnú pamäť RAM, kompilátor v niektorých situáciách nezistil, čo viedlo k zlyhaniu kódu runtime.
Vynechaná flash pamäť (XC8-1792) Pre avrxmega3 a avrtiny zariadenia môžu byť časti flash pamäte ponechané nenaprogramované MPLAB X IDE.
Zlyhanie pri spustení main (XC8-1788) V niektorých situáciách, keď program nemal definované žiadne globálne premenné, sa spúšťací kód neukončil a funkcia main () nebola nikdy dosiahnutá.
Nesprávne informácie o pamäti (XC8-1787) V prípade zariadení avrxmega3 a avrtiny program avr-size hlásil, že iba dáta spotrebovávali RAM namiesto programovej pamäte.
Nesprávne čítanie programovej pamäte (XC8-1783) Projekty kompilované pre zariadenia s programovou pamäťou mapovanou do priestoru adries údajov a definujúce objekty pomocou makra/atribútu PROGMEM mohli tieto objekty načítať z nesprávnej adresy.
Interná chyba s atribútmi (XC8-1773) Vyskytla sa interná chyba, ak ste zadefinovali objekty ukazovateľa s tokenmi _at 0 alebo atribút() medzi názvom ukazovateľa a dereferencovaným typom, napr.ample, char * _at (0x800150) cp; V prípade zistenia takéhoto kódu sa teraz zobrazí varovanie.

Zlyhanie spustenia hlavného (XC8-1780, XC8-1767, XC8-1754) Použitie premenných EEPROM alebo definovanie poistiek pomocou config pragma mohlo spôsobiť nesprávnu inicializáciu dát a/alebo zablokovanie vykonávania programu v spúšťacom kóde runtime pred dosiahnutím hlavnej 0 .

Chyba poistky pri malých zariadeniach (XC8-1778, XC8-1742) Zariadenia attiny4/5/9/10120140 mali v hlavičke špecifikovanú nesprávnu dĺžku poistky files, ktoré vedú k chybám linkera pri pokuse o vytvorenie kódu, ktorý definoval poistky.

Chyba segmentácie (XC8-1777) Prerušovaná chyba segmentácie bola opravená.

Zlyhanie assemblera (XC8-1761) Assembler avr -as mohol zlyhať, keď bol kompilátor spustený pod Ubuntu 18.

Objekty nie sú vyčistené (XC8-1752) Neinicializované objekty trvania statického úložného priestoru možno neboli vymazané spúšťacím kódom runtime.

Ignorovaná špecifikácia konfliktného zariadenia (XC8-1749) The kompilátor negeneroval chybu, keď sa použili viaceré možnosti špecifikácie zariadenia a indikovali rôzne zariadenia.

Poškodenie pamäte haldou (XC8-1748) The Symbol _heap_start bol nastavený nesprávne, čo malo za následok možnosť poškodenia bežných premenných haldou.

Chyba premiestnenia linkera (XC8-1739) Chyba premiestnenia linkera sa mohla vyslať, keď kód obsahoval rjmn alebo rcall s cieľom vzdialeným presne 4 kB.

5.6. Verzia 2.00 Žiadna.

Známe problémy

Nasledujú obmedzenia v činnosti kompilátora. Môžu to byť všeobecné obmedzenia kódovania alebo odchýlky od informácií obsiahnutých v používateľskej príručke. Štítky v zátvorkách v prílive sú identifikáciou tohto problému v databáze sledovania. Môže to byť užitočné, ak potrebujete kontaktovať podporu. Položky, ktoré nemajú štítky, sú obmedzeniami, ktoré opisujú modi operandi a ktoré pravdepodobne zostanú v platnosti natrvalo.
6.1. MPLAB X IDE integrácia
MPLAB Integrácia IDE Ak sa má kompilátor používať z MPLAB IDE, musíte pred inštaláciou kompilátora nainštalovať MPLAB IDE.
6.2. Generovanie kódu
Nesprávne inicializácia (XC8-2679) Existuje nesúlad medzi tým, kde sú počiatočné hodnoty pre niektoré globálne/statické objekty s veľkosťou bajtov umiestnené v dátovej pamäti a kde sa bude pristupovať k premenným za behu.
strtod nesprávne nastaví endptr (XC8-2652) V prípadoch, keď reťazec predmetu na konverziu pomocou strtod () obsahuje to, čo sa javí ako číslo s pohyblivou rádovou čiarkou v exponenciálnom formáte a za znakom e je neočakávaný znak, potom adresa endptr, ak je zadaná, bude ukazovať na znak za e a nie samotné e. Napríkladample: strtod („100exy“, endptr) ;

výsledkom bude endptr smerujúci na znak x.

Zlé nepriame volania funkcií (X03-2628) V niektorých prípadoch môžu zlyhať volania funkcií uskutočnené prostredníctvom ukazovateľa funkcie uloženého ako súčasť štruktúry.

strtof vracia nulu pre hexadecimálne pohyblivé čísla (XC8-2626) Knižničné funkcie strtof () et al a scanf () et al vždy konvertujú hexadecimálne číslo s pohyblivou rádovou čiarkou, ktoré nešpecifikuje exponent na nulu. Napríkladample: strtof („Oxl“, &endptr) ; vráti hodnotu 0, nie 1.
Nepresné správy poradcu zásobníka (XC8-2542, XC8-2541) V niektorých prípadoch sa varovanie poradcu zásobníka týkajúce sa rekurzie alebo neurčitého zásobníka (pravdepodobne prostredníctvom použitia alloca()) nevydá.
Zlyhanie s duplicitným kódom prerušenia (XC8-2421) Ak má viac ako jedna funkcia prerušenia rovnaké telo, kompilátor môže mať výstup pre jednu funkciu prerušenia volať druhú. To povedie k zbytočnému ukladaniu všetkých registrov zablokovaných hovormi a prerušenia sa povolia ešte pred spustením epilógu aktuálnej obsluhy prerušení, čo môže viesť k zlyhaniu kódu.
const objekty, ktoré nie sú v pamäti programu (XC8-2408) Pre projekty avrxmega3 a avrtiny sa do dátovej pamäte umiestňujú unitializované objekty const, aj keď varovanie naznačuje, že boli umiestnené v pamäti programu. Toto neovplyvní zariadenia, ktoré nemajú programovú pamäť namapovanú do priestoru dátovej pamäte, ani to neovplyvní žiadny objekt, ktorý je inicializovaný.
Zlý výstup s neplatnou cestou DFP (XCS-2376) Ak je kompilátor vyvolaný s neplatnou cestou DFP a špecifikáciou file existuje pre vybraté zariadenie, kompilátor nenahlási chýbajúci balík rodiny zariadení a namiesto toho vyberie „špecifikáciu“ file, čo by potom mohlo viesť k neplatnému výstupu. „špecifikácia“ files nemusia byť aktuálne s distribuovanými službami DFP a boli určené len na použitie s interným testovaním kompilátora.
Nezistené prekrytie pamäte (XC8-1966) Kompilátor nezisťuje prekrytie pamäte objektov, ktoré sú absolútne na adrese (cez _at 0 ) a iných objektov pomocou _sektaion () a ktoré sú spojené s rovnakou adresou.
Zlyhanie funkcií knižnice a _memx (XC8-1763) Volané funkcie libgcc float s argumentom v adresnom priestore _memx môžu zlyhať. Všimnite si, že rutiny knižnice sa volajú z niektorých operátorov C, takže naprample, je ovplyvnený nasledujúci kód: return regFloatVar > memxFloatVar;
Obmedzená implementácia libgcc (AVRTC-731) Pre V produktoch ATTiny4/5/9/10/20/40 je štandardná implementácia knižnice C/Math v libgcc veľmi obmedzená alebo nie je prítomná.
Obmedzenia programovej pamäte (AVRTC-732) Toolchain podporuje obrázky programovej pamäte nad 128 kb; sú však známe prípady prerušenia linkera bez uvoľnenia a bez užitočného chybového hlásenia namiesto vygenerovania požadovaných stubov funkcií, keď sa použije voľba -mrelax.
Obmedzenia menného priestoru (AVRTC-733) Pomenované adresné priestory sú podporované reťazcom nástrojov, s výhradou obmedzení uvedených v používateľskej príručke v časti Kvalifikátory špeciálnych typov.
Časové pásma The funkcie knižnice predpokladajú GMT a nepodporujú miestne časové pásma, takže loca It ime 0 vráti rovnaký čas ako gmtime ( ), napr.ample.

Dokumenty / zdroje

Poznámky k vydaniu MICROCHIP MPLAB XC8 C Compiler Verzia 2.39 pre AVR MCU [pdf] Používateľská príručka
MPLAB XC8 C Compiler Version 2.39 Notes Release for AVR MCU, MPLAB XC8 C, Compiler Version 2.39 Release Notes for AVR MCU, Release Notes for AVR MCU
Poznámky k vydaniu MICROCHIP MPLAB XC8 C Compiler Verzia 2.39 pre AVR MCU [pdf] Používateľská príručka
MPLAB XC8 C Compiler Version 2.39 Release Notes pre AVR MCU, MPLAB XC8 C, Compiler Version 2.39 Release Notes for AVR MCU, Notes for AVR MCU
Kompilátor MICROCHIP MPLAB XC8 C [pdf] Používateľská príručka
MPLAB XC8 C kompilátor, MPLAB XC8 C, kompilátor

Referencie

Zanechajte komentár

Vaša emailová adresa nebude zverejnená. Povinné polia sú označené *