MPLAB® XC8 C Compiler Verzia 2.41 Poznámky k vydaniu pre AVR® MCU
Návod na obsluhu
Vývojový softvér pre kompilátor MPLAB XC8 C
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 obsahuje niekoľko nových funkcií a opráv chýb.
1.2. Dátum zostavenia
Oficiálny dátum zostavenia tejto verzie kompilátora je 8. február 2023.
1.3. Predošlá verzia
Predchádzajúca verzia kompilátora MPLAB XC8 C bola 2.40 postavená 3. júla 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
Kompilátor MPLAB XC8 C pre nástroje AVR MCU je 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ý používa, sú dostupné pre rôzne operačné systémy vrátane 64-bitových verzií nasledujúcich: Profesionálne 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é. Sieťový licenčný server MPLAB XC je dostupný pre rôzne 64-bitové operačné systémy vrátane Microsoft Windows 10 a vyššie; Ubuntu 18.04 a vyššie; alebo macOS 10.15 a vyšší. Server môže bežať aj na rôznych iných operačných systémoch vrátane Windows Server, distribúcie Linuxu, ako je Oracle® Enterprise Linux® a Red Hate Enterprise Linux, ako aj na starších verziách podporovaných operačných systémov. Sieťový licenčný server MPLAB XC však nie je testovaný na týchto operačných systémoch. Sieťový licenčný server MPLAB XC je možné spustiť na virtuálnych počítačoch podporovaného operačného systému pomocou licencie virtuálneho počítača pre sieťové licencie (SW006021-VM). Všetky 32-bitové verzie MPLAB XC Network Server sú ukončené od verzie 3.00.
Podporované zariadenia
Tento kompilátor podporuje všetky dostupné 8-bitové AVR MCU zariadenia v čase vydania. Pozrite si (v adresári kompilátora) zoznam všetkých podporovaných zariadení. Tieto súbory tiež uvádzajú
avr_chipinfo.html nastavenia bitov konfigurácie dokumentu pre každé zariadenie.
1.7. 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 kompilátora funkčnej bezpečnosti MPLAB XC 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.8. 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.8.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 %temp% do príkazu Spustiť (kláves s logom Windows + R).
Otvorí sa 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.9. Dokumentácia kompilátora
Použí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, používateľská príručka kompilátora MPLAB® XC8 C pre MCU AVR® obsahuje informácie o možnostiach a funkciách kompilátora, ktoré sú použiteľné pre túto architektúru.

1.10. 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 online a aktuálne verzie dokumentácie MPLAB XC8 navštívte technickú dokumentáciu online spoločnosti Microchip webstránky. Nová alebo aktualizovaná dokumentácia AVR v tomto vydaní:
- Používateľská príručka kompilátora MPLAB® XC8 C pre AVR® MCU (revízia G)
- AVR® GNU Toolchain na MPLAB® XC8 Migration Guide (revízia A)
- Hexmate Užívateľská príručka (revízia B)
Sprievodca migráciou AVR® GNU Toolchain na MPLAB® XC8 popisuje zmeny zdrojového kódu a možnosti zostavenia, ktoré môžu byť potrebné, ak sa rozhodnete migrovať projekt založený na jazyku C z 8-bitového GNU Toolchainu AVR do kompilátora Microchip MPLAB XC8 C. 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 MPLAB® 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.
Ak práve začínate s 8-bitovými zariadeniami a kompilátorom MPLAB XC8 C, MPLAB® XC8 User's Guide for Embedded Engineers – AVR® MCUs (DS50003108) obsahuje informácie o nastavení projektov v MPLAB X IDE a písaní kódu pre váš prvý projekt MPLAB XC8 C. Táto príručka je teraz distribuovaná s kompilátorom.
Používateľská príručka Hexmate je určená pre tých, ktorí používajú Hexmate ako samostatnú aplikáciu.
Čo je nové
Nasledujú nové funkcie cieľa AVR, ktoré kompilátor teraz podporuje. Číslo verzie v podnadpisoch označuje prvú verziu kompilátora, ktorá podporuje nasledujúce funkcie.
3.1. Verzia 2.41
Podpora bootrow (XC8-3053) Kompilátor umiestni obsah všetkých sekcií s predponou at.bootrow adresou 0x860000 do HEX súboru. Tieto sekcie sa používajú pre pamäť BOOTROW, ktorá je určená na ukladanie kľúčov a iných zabezpečených informácií, ku ktorým má mať prístup iba bootloader.
Eliminácia redundantných návratov (XC8-3048) Kompilátor teraz odstráni nadbytočné inštrukcie vo funkciách ret pomocou skoku chvosta, keď sa použijú vlastné skripty linkera. Ide o podobnú optimalizáciu ako predtým, ale teraz sa vykonáva na všetkých osirotených sekciách, aj keď sa používa vlastný skript linkera a nie je v hre najvhodnejšia schéma prideľovania. Zmena typu času (XC8-2982, 2932) Typ štandardnej knižnice C99 bol zmenený z time_t na typ, ktorý poskytuje vylepšenia veľkosti kódu v niektorých časovo súvisiacich dlhých dlhých funkciách, ako napr. unsigned long mktime()
Nový nop (XC8-2946, 2945) Makro bolo pridané do. Toto makro vloží no-NOP() inštrukcia operácie nop do výstupu.
Aktualizácia na XCLM (XC8-2944) Licenčný manažér používaný s kompilátorom bol aktualizovaný a teraz lepšie reaguje pri kontrole podrobností o licencii kompilátora.
Trampolined volania (XC8-2760) Kompilátor môže teraz vykonať nahradenie dlhých inštrukcií volania kratšími relatívnymi volaniami, keď by relatívne formy inštrukcií boli za normálnych okolností mimo dosahu ich miesta určenia. V tejto situácii sa kompilátor pokúsi nahradiť inštrukciami, aby zavolal rcall inštrukciu, ktorá bude 'trampoline' vykonanie na požadovanú adresu, naprample: jmp
vyzvať tramp_foo ;bolo volanie foo
…
vyzvať tramp_foo
…
tramp_foo:
jmp foo
Táto optimalizácia spolu s podobnými optimalizáciami toku programu je riadená voľbou -mrelax.
3.2. Verzia 2.40
Podpora nových zariadení Podpora je teraz k dispozícii pre nasledujúce časti AVR: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32EA64, AVR
Vylepšená procedurálna abstrakcia Optimalizačný nástroj procedurálnej abstrakcie (PA) bol vylepšený, takže kód obsahujúci inštrukciu volania funkcie (/ ) môže byť načrtnutý. Toto sa uskutoční len vtedy, ak sa zásobník nepoužíva na odovzdávanie argumentov funkcii ani na získanie návratovej hodnoty z funkcie. Zásobník sa používa pri volaní funkcie so zoznamom premenných argumentov alebo pri volaní funkcie, ktorá má viac argumentov, ako je na tento účel určených registrov. Túto vlastnosť možno deaktivovať pomocou voľby alebo procedurálnu abstrakciu možno úplne zakázať pre objektový súbor alebo funkciu pomocou - a prípadne pomocou atribútu (špecifikátora) selektívne s funkciami.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa Makro pokrytia kódu Kompilátor teraz definuje makro, ak je zadaná platná voľba __nopa __CODECOV -mcodecov.
Možnosť rezervácie pamäte Ovládač teraz akceptuje možnosť xc8-cc -mreserve=space@start:end pri zostavovaní cieľov AVR. Táto možnosť rezervuje špecifikovaný rozsah pamäte v dátovom alebo programovom pamäťovom priestore, čím bráni linkeru naplniť kód alebo objekty v tejto oblasti. Inteligentnejšie inteligentné IO Vo funkciách inteligentného IO bolo vykonaných niekoľko vylepšení, vrátane všeobecných vylepšení kódu printf core, zaobchádzania so špecifikátorom konverzie %n ako s nezávislým variantom, prepojením v vararg pop rutinách na požiadanie, s použitím kratších dátových typov, kde je to možné. Argumenty IO funkcie a faktoring spoločného kódu v šírke poľa a presnosti spracovania. To môže viesť k významným úsporám kódu a dát, ako aj k zvýšeniu rýchlosti vykonávania IO.
3.3. 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.4. Verzia 2.36
žiadne.
3.5. 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 položke a ako sa tieto registre obnovia po ukončení rutiny prerušenia. Funguje podobne ako možnosť -mcall-prologues, ale ovplyvňuje iba funkcie prerušenia (ISR).
Ešte vylepšené prepínanie kontextu Nová voľba -mgas-isr-prologues riadi kód prepínania kontextu generovaný pre rutiny obsluhy malých prerušení. Keď 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 const-kvalifikované dáta do jednej 32k sekcie a automaticky inicializoval príslušný register SFR, aby sa zabezpečilo, že tieto dáta budú mapované do dátovej pamäte. priestor, kde bude efektívnejšie pristupovať.
Zjednotené štandardné knižnice Microchip Všetky kompilátory MPLAB XC budú zdieľať štandardnú knižnicu Microchip Unified Standard Library, ktorá je teraz k dispozícii v tomto vydaní MPLAB XC8. Používateľská príručka kompilátora MPLA# XC8 C pre AVO MCU už neobsahuje dokumentáciu pre tieto štandardné funkcie. Tieto informácie teraz nájdete v referenčnej príručke štandardnej knižnice Microchip. Všimnite si, že niektoré funkcie predtým definované avr-libc už nie sú dostupné. (Pozrite si funkciu Lila.)
Smart I0 Ako súčasť nových zjednotených knižníc sa teraz funkcie I0 v rodinách printf a scanf generujú 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ť inteligentnej asistencie ICI Pri analýze volaní funkcií smart I0 (ako je print f () 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ť – msmart-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. (Viac podrobností nájdete v časti Smart-io-format Option.)
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 voľbu -ton, -Tsection=addr, ako je popísané v používateľskej príručke.
3.6. 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á prostredníctvom voľby príkazového riadka -mchp-stack-usage. 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, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64VRDB, AVR28VRDB, AVR32VRDB,28D 64. Podpora stiahnutých zariadení Podpora už nie je k dispozícii pre nasledujúce časti AVR: AVR32DA32, AVR48DA16 a AVR28DA16.
3.7. Verzia 2.31
žiadne.
3.8. 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 to tak, že potláča výstup údajov kopírovania a robí jasné symboly 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 -f ukotvenie sekcií, ktoré umožňuje vykonávať prístup k statickým objektom vzhľadom na jeden symbol; -mpa-iterations=n, čo umožňuje zmeniť počet iterácií procedurálnej abstrakcie z predvolených 2; a -mpa-callcost-shortcall, 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.
Podpora nových zariadení Podpora je k dispozícii pre nasledujúce diely AVR: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64D128, AVR28DA128D32, AVR128DA48D128VR,64D a AVR5272DB5790. Podpora stiahnutých zariadení už nie je k dispozícii pre nasledujúce časti AVR: ATA5790, ATA5791, ATA5795N, ATA6285, ATA6286, ATA6612, ATA6613, ATA6614, ATA6616C, ATA6617C, ATA664251Q, ATAC, ATAXNUMX a XNUMXCATAXNUMX.
3.9. Verzia 2.29 (funkčné bezpečnostné vydanie)
Hlavička file pre vstavané kompilátory Aby sa zabezpečilo, že kompilátor môže vyhovovať špecifikáciám jazyka, ako je MISRA, the hlavička file, ktorý je automaticky zahrnutý do , bolo aktualizované. Táto hlavička obsahuje prototypy pre všetky vstavané funkcie, ako napríklad builtin_avr_nop ( ) a vstavané avr delay_cycles () . Niektoré vstavané moduly nemusia byť kompatibilné s MISRA; tieto možno vynechať pridanímdefinXCSTRICT_MISRA do príkazového riadku kompilátora. Vstavané moduly a ich deklarácie boli aktualizované, aby používali typy s pevnou šírkou.
3.10. Verzia 2.20
Podpora nových zariadení Podpora je dostupná pre nasledujúce časti AVR: ATTINY1624, ATTINY1626 a ATTINY1627.
Lepšia alokácia najvhodnejšej veľkosti Alokátor najlepšej zhody (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.11. Verzia 2.19 (funkčné bezpečnostné vydanie)
žiadne.
3.12. 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. Ak to chcete povoliť, 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ť atribút _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úcie 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 nastaveniami konfiguračných bitov/hodnotou 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 optimalizácie úrovne 2, 3 alebo s. 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-file=filename alebo deaktivované pre funkciu pomocou -mno-pa-on-function=function. Vo vašom zdrojovom kóde je možné zakázať procedurálnu abstrakciu pre funkciu pomocou atribútu ( (nopa) ) s definíciou funkcie alebo pomocou nopa, ktorý sa rozšíri na atribút ( (nopa, noinline) ) a tak zabráni vykonaniu vloženia funkcie a tam je abstrakcia vloženého kódu.
Podpora zamykacích bitov v pragme Konfiguráciu #pragma možno teraz použiť na špecifikáciu zamykací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. Podpora nových zariadení Podpora je k dispozícii pre nasledujúce časti: AVR28DAl28, AVR64DAl28, AVR32DA 128 a AVR48DA 128.
3.13. Verzia 2.05
Viac bitov 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.
Const objekty v pamäti programu Kompilátor teraz môže umiestniť const-kvalifikované objekty 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.
Štandardné bezplatné 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ý pri použití š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.
Podpora nových zariadení Podpora je k dispozícii pre nasledujúce časti: ATMEGA1608, ATMEGA1609, ATMEGA808 a ATMEGA809.
3.14. Verzia 2.00
Ovládač najvyššej úrovne Nový ovládač s názvom xc8-cc je teraz umiestnený 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.
Common C Interface 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ý ovládač knižnice 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, ktoré teraz kompilátor spracováva 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.41
Odstránené nepresné funkcie fma (XC8-2913) Štandardná knižnica C99 fma 0 -rodina funkcií ( ) nevypočítali násobné sčítanie s nekonečnou presnosťou na jedno zaokrúhľovanie, ale namiesto toho pri každej operácii nahromadili chyby zaokrúhľovania. Tieto funkcie boli odstránené z dodanej knižnice.
4.2. Verzia 2.40
žiadne.
4.3. Verzia 2.39 (funkčné bezpečnostné vydanie)
žiadne.
4.4. Verzia 2.36 Žiadna.
4.5. Verzia 2.35
Spracovanie báz reťazcov (XC8-2420) Aby sa zabezpečila konzistentnosť s inými kompilátormi XC, funkcie XC8 string-to, ako strtol () atď., sa už nebudú pokúšať konvertovať vstupný reťazec, ak je zadaný základ väčší ako 36 a namiesto toho nastaví errno na EINVAL. Štandard C nešpecifikuje správanie funkcií pri prekročení tejto základnej hodnoty.
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 (možnosť -1printf_flt) na zapnutie formátovania I0 podpora špecifikátorov plávajúceho formátu. Inteligentný I0 vďaka funkciám knižnice Microchip Unified Standard Library je táto možnosť zbytočná. 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 ) budú s takýmito údajmi pracovať správne, keď je povolená funkcia const-data-in-program-memory.
4.6. Verzia 2.32
žiadne.
4.7. Verzia 2.31
žiadne.
4.8. Verzia 2.30
žiadne.
4.1. Verzia 2.29 (funkčné bezpečnostné vydanie)
žiadne.
4.2. Verzia 2.20
Rozloženie služby DFP bolo zmenené Kompilátor teraz predpokladá iné rozloženie používané balíkmi 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
žiadne
4.5. Verzia 2.05
Objekty Const v pamäti programu Všimnite si, že v predvolenom nastavení budú objekty s kvalifikáciou Const umiestnené v pamäti programu a bude sa k nim pristupovať (ako je popísaný odtieň). 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 -mnoconst-data-in-progmem.
4.6. Verzia 2.00
Konfiguračné poistky Konfiguračné poistky zariadenia je teraz možné naprogramovať pomocou konfiguračnej pragmy nasledovanej pármi nastavenia a hodnoty 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 špecifickú adresu v pamäti pomocou špecifikátora CCI (adresa), naprample:
#include
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
Argument pre tento špecifikátor musí byť konštanta, ktorá predstavuje adresu, na ktorú bude umiestnený prvý bajt alebo inštrukcia. Adresy RAM sú označené pomocou offsetu 0x800000. Povoľte CCI používať túto funkciu.
Nová syntax funkcie prerušenia Kompilátor teraz akceptuje špecifikátor CCI _interrupt (num), ktorý označuje, že funkcie C sú obslužné nástroje prerušenia. Špecifikátor má číslo prerušenia, naprample:
#include
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
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 (DFP) priradenom k zariadeniu. Informácie o zmenách vykonaných v DFP a stiahnutí najnovších balíkov nájdete v Správcovi balíkov MPLAB.
5.1. Verzia 2.41
Problémy s dongle na Ventura (XC8-3088) dongle použité na licencovanie kompilátora možno nebolo správne načítané na hostiteľoch macOS Ventura, čo viedlo k zlyhaniam licencovania. Zmeny v správcovi licencií XCLM opravujú tento problém.
Nesprávna indikácia pridelenia pamäte (XC8-2925) Pokus o pridelenie SIZE_MAX bajtov (alebo hodnotu blízku tejto hodnote) pamäte pomocou štandardných funkcií správy pamäte knižnice (malloc () et al) bol nesprávne úspešný. Nebral do úvahy, že pri použití implementácie jednoduchej dynamickej alokácie pamäte boli potrebné ďalšie bajty navyše k požadovanému bloku. V takýchto situáciách sa teraz vráti ukazovateľ NULL a chyba sa nastaví na ENOMEM.
Boli odstránené nepresné funkcie fma (XC8-2913) Štandardná knižnica C99 fma ( ) -rodina funkcií ( ) nevypočítali násobné sčítanie s nekonečnou presnosťou na jedno zaokrúhľovanie, ale namiesto toho pri každej operácii nahromadili chyby zaokrúhľovania. Tieto funkcie boli odstránené z dodanej knižnice.
Zlé spracovanie konverzie reťazca (XC8-2921, XC8-2652) Keď „predmetová sekvencia“ na konverziu pomocou strtod Cr obsahovala to, čo vyzeralo ako číslo s pohyblivou rádovou čiarkou v exponenciálnom formáte a za znakom e/E bol neočakávaný znak, potom tam, kde bol zadaný endptr, bola priradená adresa, ktorá keby to ukazovalo na znak za e/E, zatiaľ čo by to malo ukazovať na samotný znak e/E, keďže ten nebol konvertovaný. Naprample, strtod („100exx“, &ep) by mal vrátiť 100.00 a nastaviť ep tak, aby ukazoval na časť reťazca „exx“, zatiaľ čo funkcia vracala správnu hodnotu, ale nastavila ep tak, aby ukazoval na časť reťazca „xx“ .
5.2. Verzia 2.40
Príliš uvoľnený (XCS-2876) Pri použití voľby -mrelax kompilátor nealokoval niektoré sekcie spolu, čo malo za následok menej optimálne veľkosti kódu. Mohlo k tomu dôjsť pri kóde, ktorý používal nové knižnice MUSL, alebo pri slabých symboloch.
Funkcia mapovania nie je zakázaná, ako je uvedené vo varovaní (XC8-2875) Funkcia const-data-in-config-mappedprogmem závisí od zapnutia funkcie const-data-in-progmem. Ak bola funkcia const-data-inconfig-mapped-progmem explicitne povolená pomocou tejto možnosti a funkcia const-data-inprogmem bola zakázaná, krok prepojenia zlyhal, napriek varovnému hláseniu, ktoré uvádza, že const-data-in-con obr. funkcia maped-progmem bola automaticky zakázaná, čo nebolo úplne správne. Funkcia const-data-in-config-mapped-progmem je teraz v tejto situácii úplne zakázaná.
DFP sa mení na správny prístup k NVMCTRL (XC8-2848) Runtime spúšťací kód používaný zariadeniami AVR64EA nebral do úvahy, že register NVMCTRL bol pod ochranou Configuration Change Protection (CCP) a nedokázal nastaviť I0 SFR na stránku používanú programom const-data-in-configmapped-progmem. funkcia kompilátora. Zmeny vykonané vo verzii AVR-Ex_DFP 2.2.55 umožnia správnemu zápisu spúšťacieho kódu runtime do tohto registra.
Zmeny v službe DFP, ktorým sa treba vyhnúť flash mapping (XC8-2847) Bolo implementované riešenie problému s funkciou flash-mapping device ohlásenou v AVR128DA28/32/48/64 Silicon Errata (D580000882). Funkcia kompilátora const-data-in-config-mapped-progmem sa štandardne nepoužije pre dotknuté zariadenia a táto zmena sa objaví vo verzii AVR-Dx_DFP 2.2.160.
Chyba zostavy s sinhf alebo coshf (XC8-2834) Pokusy o použitie funkcií knižnice sinhf () alebo coshf () viedli k chybe odkazu, ktorá popisovala nedefinovaný odkaz. Chýbajúca funkcia, na ktorú sa odkazuje, bola teraz zahrnutá do distribúcie kompilátora.
Chyby zostavy s nopa (XC,8-2833) Použitie atribútu nopa s funkciou, ktorá má názov assembleru špecifikovaný pomocou asm ( ), spustilo chybové správy z assemblera. Táto kombinácia nie je možná.
Zlyhanie variadickej funkcie s argumentmi ukazovateľa (XC8-2755, XC8-2731) Keď je povolená funkcia const-data-in-progmem, funkcie s premenlivým počtom argumentov očakávajú odovzdanie 24-bitových ukazovateľov (typ memx) v zozname argumentov premenných. Argumenty, ktoré boli ukazovateľmi na dátovú pamäť, sa odovzdávali ako 16-bitové objekty, čo spôsobilo zlyhanie kódu, keď boli nakoniec načítané. Keď je povolená funkcia constdata-in-progmem, všetky argumenty 16-bitových ukazovateľov sa teraz skonvertujú na 24-bitové ukazovatele.
Funkcie knižnice strtoxxx zlyhávajú (XC8-2620) Keď bola povolená funkcia const-data-in-progmem, parameter endptr vo funkciách knižnice strtoxxx nebol správne aktualizovaný pre argumenty zdrojového reťazca, ktoré nie sú v pamäti programu.
Upozornenia na neplatné obsadenie (XC8-2612) Kompilátor teraz vydá chybu, ak je povolená funkcia const-in-progmem a adresa reťazcového literálu je explicitne pretypovaná do priestoru adries údajov (vynechá kvalifikátor const), napr.ample, (uint 8_t *) „Ahoj Svet!“. Varovanie je problém, ak adresa môže byť neplatná, keď je ukazovateľ konštantných údajov explicitne pretypovaný do priestoru adries údajov.
Umiestnenie neinicializovaných konštantných objektov (XC8-2408) Neinicializované objekty const a const volatile neboli umiestnené v pamäti programu na zariadeniach, ktoré mapujú celú alebo časť ich programovej pamäte do priestoru adries údajov. Pre tieto zariadenia sú teraz takéto objekty umiestnené v pamäti programu, čím je ich činnosť konzistentná s inými zariadeniami.
5.3. Verzia 2.39 (funkčné bezpečnostné vydanie)
žiadne.
5.4. Verzia 2.36
Chyba pri oneskorení (XC8-2774) 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 viedlo k tomu, že sa s nimi zaobchádzalo ako s nekonštantnými a došlo k chybe: vstavaný avr delay_cycles očakáva celočíselnú konštantu času kompilácie.
5.5. Verzia 2.35
Súvislá alokácia pomocou _at (XC8-2653) Súvislé prideľovanie viacerých objektov v sekcii s rovnakým názvom a pomocou _at ( ) nefungovalo správne. Naprample:
const char arr1[] __atribút__((sekcia(.mysec“))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __atribút__((sekcia(.mysec”))) = {0xEF, 0xFE};
mal umiestniť arr2 hneď za arr1.
Určenie počiatočných adries sekcie (XC8-2650) The -W1, –voľba-začiatok sekcie potichu 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 voľby -W1, -T.
Linker zlyhá pri relaxácii (XC8-2647) Keď bola povolená optimalizácia -mrelax a existovali 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.
Žiadny pád späť (XC8-2646) The – 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 (X03-2637) 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á EEPROM prístup (XC8-2629) The 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 (XC8-2593, XC8-2651) Keď je -Ttext alebo -Tdata linker možnosť (naprampsúbor prešiel pomocou voľby ovládača -vl), 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.
Možnosti neprechádzajú (XC8-2452) Pri použití možnosti s viacerými možnosťami linkera oddelenými čiarkami, nie všetky možnosti linkera boli odovzdané linkeru.
Chyba nepriameho čítania pamäte programu (X03-2450) V niektorých prípadoch kompilátor vytvoril vnútornú chybu (nerozpoznateľné insn) pri čítaní dvojbajtovej hodnoty z ukazovateľa do pamäte programu
5.6. Verzia 2.32
Druhý prístup z knižnica zlyhá (XC8-2381) Vyvolanie verzie systému Windows xc8-ar. Archivátor knižnice .exe druhýkrát pri prístupe k existujúcemu archívu knižnice mohol zlyhať, pretože sa nepodarilo premenovať chybové hlásenie.
5.7. Verzia 2.31
Nevysvetlený kompilátor zlyhania (XC8-2367) Pri spustení na platformách Windows, ktoré mali systémový dočasný adresár nastavený na cestu, ktorá obsahovala bodku '.' kompilátor možno zlyhal pri spustení.
5.8. Verzia 2.30
Globálne štítky nesprávne umiestnené po obryse (XC8-2299) Ručne písaný kód zostavy, ktorý umiestňuje globálne štítky do sekvencií zostavy, ktoré sú zohľadnené procedurálnou abstrakciou, možno nebol správne premiestnený.
Relaxačný pád (XC8-2287) Použitie voľby -mrelax mohlo spôsobiť zlyhanie linkera, keď sa optimalizácia relaxácie skoku chvostom pokúsila odstrániť inštrukciu ret, ktorá nebola na konci sekcie.
Zlyhanie pri optimalizácii štítkov ako hodnôt (XC8-2282) Kód používajúci rozšírenie jazyka GNU C „Labels as values“ mohol spôsobiť zlyhanie optimalizácií procedurálnej abstrakcie s chybou opravy Outlined VMA ranges.
Nie tak konštantné (XC8-2271) Prototypy pre st rstr ( ) 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) Keď je viac ako jedna premenná v prekladovej jednotke bola umiestnená do sekcie (pomocou _section alebo _attribute_ ((section) )) 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 tej istej sekcii sa stratili.
5.1. Verzia 2.29 (funkčné bezpečnostné vydanie)
žiadne.
5.2. Verzia 2.20
Chyba pri dlhých príkazoch (XC8-1983) Pri použití cieľa AVR sa kompilátor mohol zastaviť s a file chyba nenájdená, 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) Linker AVR nedokázal 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é uvoľnenie)
žiadne.
5.4. Verzia 2.10
Poruchy premiestnenia (XC8-1891) Najvhodnejším alokátorom bolo zanechanie „dier“ v pamäti medzi sekciami po uvoľnení linkera. 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-388) Niekoľko definícií z , ako napríklad clock_div_t a clock_prescale set () , neboli definované pre zariadenia vrátane ATmega324PB, ATmega328PB, ATtiny441 a ATtiny841.
Chýbajúce makrá Makrá preprocesora _XC8_MODE_, _XC8_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á pamäť flash (XC8-1792) Pre zariadenia avrxmega3 a avrtiny mohli byť časti pamäte flash ponechané nenaprogramované v MPLAB X IDE.
Zlyhanie spustenia hlavného (XC8-1788) V niektorých situáciách, keď program nemal definované žiadne globálne premenné, sa spúšťací kód runtime neukončil a funkcia main ( ) nebola nikdy dosiahnutá.
Nesprávne informácie o pamäti (XC8-1787) Pre zariadenia avrxmega3 a avrtiny program avr-size hlásil, že údaje len na čítanie spotrebúvajú RAM namiesto pamäte programu.
Nesprávne načítanie programovej pamäte (XC8-1783) Projekty kompilované pre zariadenia s programovou pamäťou mapovanou do priestoru adries údajov a ktoré definujú 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 definovali objekty ukazovateľa pomocou
_at () alebo tokeny atribútu () medzi názvom ukazovateľa a dereferencovaným typom, naprample, znak *
_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 hlavného ( ) .
Chyba poistky pri malých zariadeniach (XC8-1778, XC8-1742) Zariadenia attiny4/5/9/ 10/20/40 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.
Segmentácia porucha (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 kolidujúceho zariadenia (XC8-1749) Kompilátor negeneroval chybu, keď sa použili viaceré možnosti špecifikácie zariadenia a označili 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 rjmp alebo rcall s cieľom presne 4 kB.
5.6. Verzia 2.00
žiadne.
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 názve predstavujú identifikáciu daného 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 IDE integrácia 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
Segfault s voľbou section-anchors (XC8-3045) Program, ktorý definoval funkcie s premennými zoznamami argumentov a ktorý používa voľbu -fsection-anchors, mohol spustiť internú chybu kompilátora: Segmentation error.
Informácie o ladení nie sú synchronizované (XC8-2948) Keď optimalizácia relaxácie linkera zmenšuje pokyny (naprample call to rcall inštrukcie), mapovanie zdrojového riadka na adresu nemusí zostať synchronizované, ak sa v sekcii vyskytuje viac ako jedna operácia zmenšenia.
V nižšie uvedenom example, existujú dva hovory na foo, ktoré skončia uvoľnene na relatívne hovory.
Zlyhanie prideľovania pamäte PA (XC8-2881) Pri použití optimalizátorov procedurálnej abstrakcie môže linker hlásiť chyby pri prideľovaní pamäte, keď je veľkosť kódu blízka množstvu dostupnej programovej pamäte v zariadení, aj keď by sa mal program zmestiť do dostupného priestoru.
Nie tak inteligentný Smart-I0 (XC8-2872) Funkcia smart-io kompilátora vygeneruje platný, ale nie optimálny kód pre funkciu snprint f, ak bola funkcia const-data-in-progmem zakázaná alebo ak má zariadenie všetku svoju pamäť flash namapovanú do dátovej pamäte.
Ešte menej inteligentný Smart-I0 (XC8-2869) Funkcia smart-io kompilátora vygeneruje platný, ale neoptimálny kód, keď sa použijú voľby -flto a -fno-builtin.
Suboptimálne umiestnenie údajov iba na čítanie (XC8-2849) Linker si momentálne nie je vedomý pamäťových sekcií APPCODE a APPDATA ani [No-Read-While-Write divízií v pamäťovej mape. V dôsledku toho existuje malá šanca, že linker môže alokovať údaje len na čítanie v nevhodnej oblasti pamäte. Pravdepodobnosť nesprávne umiestnených údajov sa zvyšuje, ak je povolená funkcia const-data-in-progmem, najmä ak je povolená aj funkcia const-data-in-config-mapped-progmem. Tieto funkcie je možné v prípade potreby deaktivovať.
Objekt file spracovanie objednávky (XC8-2863) Poradie objektov files budú spracované linkerom sa môžu líšiť v závislosti od použitia optimalizácií procedurálnej abstrakcie (možnosť -mpa). To by ovplyvnilo iba kód, ktorý definuje slabé funkcie vo viacerých moduloch.
Chyba spojovača s absolútnou hodnotou (XC8-2777) Keď bol objekt na adrese na začiatku pamäte RAM absolútny a neinicializované objekty boli tiež definované, môže sa spustiť chyba linkera.
ID krátkeho prebudenia (XC8-2775) Pre zariadenia ATA5700/2 sú registre PHIDO/1 definované len ako 16 bitové, nie 32 bitové.
Zlyhanie linkera pri volaní symbolu (XC8-2758) Linker môže zlyhať, ak sa použije voľba ovládača -mrelax, keď zdrojový kód volá symbol, ktorý bol definovaný pomocou voľby linkera -cc., –de f sym.
Nesprávna inicializácia (XC8-2679). je nezrovnalosť 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 budú premenné prístupné za behu.
Zlé nepriame volania funkcií (XC8-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 skonvertujú hexadecimálne číslo s pohyblivou rádovou čiarkou, ktoré nešpecifikuje exponent na nulu. Naprample:
strtof („Oxl“, &endptr) ;
vráti hodnotu 0, nie I.
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.
Zlý výstup s neplatnou cestou DFP (XC8-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 ( )) a iných objektov pomocou špecifikátora sekcie ( ), 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 knižnice libgcc (AVRTC-731) Pre produkty 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 -mre lax.
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 localtime ( ) vráti rovnaký čas ako gmtime ( ) , napr.ample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Dokumenty / zdroje
![]() |
Vývojový softvér pre kompilátor MICROCHIP MPLAB XC8 C [pdf] Používateľská príručka MPLAB XC8 C, MPLAB XC8 C vývojový softvér kompilátora, vývojový softvér kompilátora, vývojový softvér, softvér |




