Poznámky k vydaniu MICROCHIP XC8 C Compiler verzie 2.45 pre AVR MCU
Informácie o produkte
MPLAB XC8 C Compiler je softvérový nástroj používaný na zacielenie zariadení Microchip AVR. Je navrhnutý tak, aby kompiloval kód C a generoval spustiteľný súbor files pre tieto zariadenia. Verzia kompilátora, na ktorú sa odkazuje v tejto používateľskej príručke, je 2.45 s oficiálnym dátumom zostavenia 18. augusta 2023. Predchádzajúca verzia bola 2.41, zostavená 8. februára 2023. Kompilátor sa dodáva s Príručkou funkčnej bezpečnosti, ktorá poskytuje ďalšie informácie a pokyny pri používaní kompilátorov MPLAB XC s aplikáciami funkčnej bezpečnosti. Táto príručka je súčasťou balíka dokumentácie, keď si zakúpite licenciu na funkčnú bezpečnosť. Kompilátor MPLAB XC8 C podporuje všetky dostupné 8-bitové AVR MCU zariadenia v čase vydania. Môžete si pozrieť avr_chipinfo.html file v adresári doc kompilátora nájdete zoznam všetkých podporovaných zariadení a ich konfiguračných bitových nastavení. K dispozícii sú rôzne vydania kompilátora MPLAB XC8. Licencovaná (PRO) edícia poskytuje vyššiu úroveň optimalizácie v porovnaní s bezplatnou edíciou. Ak chcete aktivovať kompilátor ako licencovaný produkt, musíte si zakúpiť aktivačný kľúč. Nelicencovanú verziu je však možné používať neobmedzene bez licencie. Pre aplikácie funkčnej bezpečnosti je k dispozícii kompilátor funkčnej bezpečnosti MPLAB XC8. Na aktiváciu je potrebná licencia funkčnej bezpečnosti zakúpená od spoločnosti Microchip. Po aktivácii je možné využívať všetky úrovne optimalizácie a funkcie kompilátora. Kompilátor funkčnej bezpečnosti MPLAB XC podporuje aj licenciu sieťového servera. Podrobné informácie o inštalácii, aktivácii, typoch licencií a problémoch s migráciou nájdete v dokumente Inštalácia a licencovanie MPLAB XC C Compilers (DS50002059).
Návod na použitie produktu
- Pred spustením softvéru MPLAB XC8 C Compiler si prečítajte používateľskú príručku, kde nájdete dôležité informácie a pokyny špecifické pre zariadenia Microchip AVR.
- Ak používate kompilátor pre 8-bitové zariadenia PIC, pozrite si dokument MPLAB XC8 C Compiler Release Notes for PIC.
- Uistite sa, že váš operačný systém spĺňa systémové požiadavky na spustenie kompilátora. 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 Microsoft Windows 10 a novší, Ubuntu 18.04 a novší a macOS 10.15 a novší. Všimnite si, že MPLAB XC Network License Server 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.
- Ak chcete aktivovať kompilátor MPLAB XC8 C ako licencovaný (PRO) produkt, zakúpte si aktivačný kľúč. To poskytne vyššiu úroveň optimalizácie v porovnaní s bezplatnou verziou. Nelicencovaný kompilátor je však možné prevádzkovať neobmedzene dlho bez licencie.
- Ak používate kompilátor funkčnej bezpečnosti MPLAB XC8 pre aplikácie funkčnej bezpečnosti, musíte ho aktivovať pomocou licencie funkčnej bezpečnosti zakúpenej 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. Licencia pre sieťový server je podporovaná týmto vydaním kompilátora funkčnej bezpečnosti MPLAB XC.
- Podrobné pokyny na inštaláciu, aktiváciu a licencovanie kompilátora MPLAB XC8 C nájdete v dokumente Inštalácia a licencovanie kompilátorov MPLAB XC C (DS50002059).
- Ak používate kompilátor na základe skúšobnej licencie, dostanete počas kompilácie varovanie, keď budete 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.
Koniecview
Úvod
Toto vydanie kompilátora Microchip MPLAB® XC8 C obsahuje niekoľko nových funkcií, opráv chýb a podporu pre nové zariadenia.
Dátum zostavenia
Oficiálny dátum zostavenia tejto verzie kompilátora je 18. august 2023.
Predošlá verzia
Predchádzajúca verzia kompilátora MPLAB XC8 C bola 2.41, postavená 8. februára 2023.
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ť.
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 file name sa nachádza v podadresári vášho inštalačného adresára. Všeobecnú diskusiu o princípoch, ktoré sú základom GPL, nájdete tu. Podporný kód poskytnutý pre hlavičku files, linker skripty a runtime knižnice sú proprietárny kód a nevzťahujú 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.
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: Profesionálne vydania Microsoft® Windows® 10, Ubuntu® 18.04, macOS® 13.2 (Ventura) a Fedora 34. 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, Linuxových distribúcií, ako je Oracle® Enterprise Linux® a Red Hat® 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 avr_chipinfo.html (v adresári doc kompilátora) pre zoznam všetkých podporovaných zariadení. V týchto súboroch sú uvedené aj nastavenia bitov konfigurácie pre každé zariadenie.
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).
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 inštalačný program kompilátora .run (Linux) alebo .app (macOS), napr. XC8-1.00.11403-windows.exe a postupujte podľa pokynov na obrazovke. 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.
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.
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.
Zákaznícka podpora
Vo fóre XC8 môžete klásť otázky ostatným používateľom tohto produktu. 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í:
žiadne
- 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
- Sprievodca pre vstavaných inžinierov – AVR® MCU (DS50003108) obsahuje informácie o nastavení projektov v MPLAB X IDE a písaní kódu pre váš prvý MPLAB XC8 C projekt. 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.
Verzia 2.45
Univerzálny manažér licencií (XC8-3175, XCLM-224) Verzia manažéra licencií pre macOS používaná s kompilátorom je teraz univerzálna a ponúka natívnu podporu pre počítače s procesormi Intel aj M1. Verzia správcu licencií pre Linux teraz vyžaduje aspoň verziu 2.25 glibc. Univerzálne binárne súbory pre Mac (XC8-3168, XC8-2951) Binárne súbory kompilátora pre macOS sú teraz univerzálne a ponúkajú natívnu podporu pre počítače s procesormi Intel aj M1. Zmenšené veľkosti knižníc s pohyblivou rádovou čiarkou (XC8-3112, XC8-3071) Vykonali sa vylepšenia funkcií knižníc s pohyblivou rádovou čiarkou, vrátane sinf() pow(), sqrt(), expf(), log1fp() a nextafterf() , ktoré vidia zmenšenie veľkosti kódu pre tieto rutiny. Podpora nových zariadení Podpora je teraz k dispozícii pre nasledujúce časti AVR: AVR16EA28, AVR16EA32, AVR16EA48, AVR32EA28, AVR32EA32, AVR32EA48, AVR16EB14, AVR16EB20, AVR16EB28 a AVR16EB32.
Verzia 2.41
- Podpora bootrow (XC8-3053) Kompilátor umiestni obsah všetkých sekcií s predponou .bootrow na adresu 0x860000 v HEX súbore. 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 nadbytočných návratov (XC8-3048) Kompilátor teraz odstráni nadbytočné inštrukcie ret vo funkciách s chvostovým skokom, 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, time_t, bol zmenený z long long na typ unsigned long, čo poskytuje vylepšenia veľkosti kódu v niektorých funkciách súvisiacich s časom, ako je mktime().
- Nový nop (XC8-2946, 2945) Makro NOP() bolo pridané do . Toto makro vloží do výstupu inštrukciu nop no-operation.
- 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 rcall inštrukciou volania jmp, ktorá bude 'trampoline' vykonanie na požadovanú adresu, naprample:
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, aby bolo možné načrtnúť kód obsahujúci inštrukciu volania funkcie (call/rcall). Toto sa uskutoční iba vtedy, ak sa zásobník nepoužíva na odovzdávanie argumentov 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 funkciu možno deaktivovať pomocou voľby – mno-pa-outline-calls, alebo procedurálnu abstrakciu možno úplne zakázať pre súbor objektu alebo funkciu pomocou -mno-pa-on-file -mno-pa-on-function, alebo pomocou atribútu nopa (špecifikátor __nopa) selektívne s funkciami.
- Makro pokrytia kódu Kompilátor teraz definuje makro __CODECOV, ak je zadaná platná voľba -mcodecov.
- Možnosť rezervácie pamäte Ovládač xc8-cc bude teraz akceptovať voľbu -mreserve=space@start:end pri vytváraní pre ciele 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.
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.
Verzia 2.36
žiadne.
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 sa môže použiť na to, aby linker umiestnil všetky kvalifikované údaje do jednej 32k sekcie a automaticky inicializoval príslušný register SFR, aby sa zabezpečilo, že tieto údaje budú mapované do priestoru dátovej pamäte. , kde sa k nemu bude pristupovať efektívnejšie.
- Zjednotené štandardné knižnice Microchip Všetky kompilátory MPLAB XC budú zdieľať štandardnú knižnicu Microchip Unified Standard Library, ktorá je teraz dostupná s týmto vydaním MPLAB XC8. Používateľská príručka kompilátora MPLAB® XC8 C pre AVR® MCU už neobsahuje dokumentáciu pre tieto štandardné funkcie. Tieto informácie teraz možno nájsť v referenčnej príručke štandardnej knižnice Microchip Unified. Všimnite si, že niektoré funkcie predtým definované avr-libc už nie sú dostupné. (Pozrite si časť Funkcia knižnice.)
- Smart IO Ako súčasť nových jednotných knižníc sú teraz funkcie IO 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 IO Pri analýze volaní funkcií inteligentného IO (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 vyžadované volaním. Predtým kompilátor vždy žiadne predpoklady a zabezpečiť, aby boli plne funkčné IO funkcie prepojené s konečným obrazom 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áciách konverzie používaných smart IO funkcie, ktorých použitie je nejednoznačné, čo bráni prepojeniu príliš dlhých vstupno-výstupných rutín. (Viac podrobností nájdete vo voľbe smart-io-format.)
- Umiestnenie vlastných sekcií Predtým možnosť -Wl,–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 sú .text, .bss alebo .data , bude mať najvhodnejší alokátor stále úplnú kontrolu nad ich umiestnením a táto možnosť nebude mať žiadny vplyv. Použite voľbu -Wl,-Tsection=addr, ako je popísané v používateľskej príručke.
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. V mapovom súbore je k dispozícii podrobná správa o zásobníku, ktorú je možné vyž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: AVR16DA28, AVR16DA32 a AVR16DA48.
Verzia 2.31
žiadne.
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_clear_bss v súboroch zostavy, č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žňujú 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 AVRXNUMXDBXNUMX.
- Podpora stiahnutých zariadení už nie je k dispozícii pre nasledujúce časti AVR: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612, ATA6613C, ATA6614C, ATA6616Q, ATAC, ATA6617 a 664251CATAXNUMX.
Verzia 2.29 (funkčné bezpečnostné vydanie)
- Hlavičkový súbor pre vstavané kompilátory Aby sa zabezpečilo, že kompilátor môže vyhovovať jazykovým špecifikáciám, ako je MISRA, , bolo aktualizované. Táto hlavička obsahuje prototypy pre všetky vstavané funkcie, ako napríklad __builtin_avr_nop() a __builtin_avr_delay_cycles() . Niektoré vstavané moduly nemusia byť kompatibilné s MISRA; tieto môžu byť vynechané 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.
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.
Verzia 2.19 (funkčné bezpečnostné vydanie)
žiadne.
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. V ideálnom prípade by mala byť pragma pridaná na začiatok súboru, aby sa celý súbor vylúčil z analýzy pokrytia. Alternatívne sa môže použiť __attribute__((nocodecov)) na vylúčenie špecifickej funkcie z analýzy pokrytia. - Súbory popisu zariadenia Nový súbor zariadenia s názvom avr_chipinfo.html sa nachádza v adresári docs distribúcie kompilátora. Tento súbor obsahuje 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 konfigurácie 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 zakázať pre objektový súbor 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é deaktivovať procedurálnu abstrakciu pre funkciu použitím __attribute__((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 uzamykacích bitov v pragme Konfiguráciu #pragma možno teraz použiť na špecifikáciu uzamykacích bitov AVR, ako aj ostatných konfiguračných bitov. Skontrolujte súbor avr_chipinfo.html (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: AVR28DA128, AVR64DA128, AVR32DA128 a AVR48DA128.
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 programovej pamäti Kompilátor teraz môže umiestniť const-kvalifikované objekty do Flash pamäte programu, namiesto toho, aby ich mal umiestnené v RAM. Kompilátor bol upravený tak, že konštantné globálne dáta 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.
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ľným súborom knižnice PIC alebo AVR, a preto je odporúčaným spôsobom, ako vyvolať 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.
Verzia 2.45
žiadne.
Verzia 2.41
Odstránené nepresné funkcie fma (XC8-2913) Štandardná knižnica C99 ( ) nevypočítali násobné sčítanie s nekonečnou presnosťou k jedinému zaokrúhľovaniu, ale namiesto toho nahromadili chyby zaokrúhľovania pri každej operácii. Tieto funkcie boli odstránené z dodanej knižnice.
Verzia 2.40
žiadne.
Verzia 2.39 (funkčné bezpečnostné vydanie)
žiadne.
Verzia 2.36
žiadne.
Verzia 2.35
- Spracovanie reťazcov na bázy (XC8-2420) Aby sa zabezpečila konzistencia s inými XC kompilátormi, XC8 string-to funkcie, ako strtol() atď., sa už nebudú pokúšať konvertovať vstupný reťazec, ak je špecifikovaný základ väčší ako 36 a namiesto toho nastaví . Štandard C nešpecifikuje správanie funkcií pri prekročení tejto základnej hodnoty.
- Nevhodné optimalizácie rýchlosti Pri výbere optimalizácie úrovne 3 (-O3) boli povolené optimalizácie procesnej abstrakcie. 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 Unified Standard Library od 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. Napríkladample, už nie je potrebné prepojiť knižnicu lprintf_flt (možnosť -lprintf_flt), aby ste zapli podporu formátovania IO pre špecifikátory formátu float. Funkcie smart IO štandardnej knižnice Microchip Unified Standard Library robia túto možnosť nadbytočnou. Okrem toho už nie je potrebné používať rutiny s príponou _P pre reťazcové a pamäťové funkcie (napr. strcpy_P() atď.), ktoré fungujú na reťazcoch const vo formáte flash. Štandardné rutiny C (napr. strcpy() budú s takýmito údajmi pracovať správne, keď je povolená funkcia const-data-in-program-memory.
Verzia 2.32
žiadne.
Verzia 2.31
žiadne.
Verzia 2.30
žiadne.
Verzia 2.29 (funkčné bezpečnostné vydanie)
žiadne.
Verzia 2.2
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.
Verzia 2.19 (funkčné bezpečnostné vydanie)
žiadne.
Verzia 2.10
žiadne
Verzia 2.05
Const objekty v programovej pamäti Všimnite si, že štandardne, const-kvalifikované objekty budú umiestnené a prístupné v programovej pamäti (ako je tu popísané). 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 -mno-const-data-in-progmem.
Verzia 2.00
- Konfiguračné poistky Konfiguračné poistky zariadenia je teraz možné naprogramovať pomocou konfigurácie pragma 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 __at (adresa), napr.ample:
- #include
int foobar __at(0x800100);
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 0x800000. Povoľte CCI používať túto funkciu.
- #include
- Nová syntax funkcie prerušenia Kompilátor teraz akceptuje špecifikáciu CCI __interrupt(num) na označenie, že funkcie C sú obsluhy prerušení. Š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 tak, ako bola určená 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.
Verzia 2.45
- Zlyhanie roamingovej licencie (XCLM-235) Roamované licencie nefungovali správne na platformách Linux s použitím verzií glibc vyšších ako 2.28.
- Interná chyba s poľami štruktúr (XC8-3069) Keď boli spracované viacrozmerné členy poľa štruktúry, kvalifikátor adresného priestoru nebol správne prenesený do poľa. To viedlo k nesúladu v informáciách kvalifikátora adresného priestoru a internej chybe kompilátora. Táto situácia bola opravená.
- Chybné zápisy do neinicializovaných streamov (ML-353, XC8-3100) Ak štandardné výstupné/chybové streamy neboli explicitne nastavené pomocou FDEV_SETUP_STREAM alebo _init_stdout/_init_stderr , pokus o zápis do nich viedol k nedefinovanému správaniu. To ovplyvnilo aj zápisy z funkcií stdlib, ako napríklad perror(). Všetky zápisy do týchto streamov pred ich inicializáciou budú teraz ignorované.
- Nepodporovaný modifikátor (XC8-2505) Knižnica avr-libc nepodporovala * modifikátor v špecifikátoroch konverzie v štýle printf, napr.ample "%.*f". Toto je teraz podporované zavedením štandardnej knižnice Microchip Unified Standard Library.
- Viacnásobné neinicializované varovania (XC8-2409) Kompilátor vydával viaceré identické varovné správy, keď narazil na pole const, ktoré nebolo inicializované. Správa mala byť vydaná len raz, čo je teraz prípad, keď nastane táto situácia.
Verzia 2.41
- Problémy s dongle na Ventura (XC8-3088) Dongle použité na licencovanie kompilátora možno neboli 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() a kol.), ktoré sa vyžadujú pri použití implementácie jednoduchej dynamickej alokácie pamäte. V takýchto situáciách sa teraz vráti ukazovateľ NULL a chyba sa nastaví na ENOMEM.
- Odstránené nepresné funkcie fma (XC8-2913) Štandardná knižnica C99 fma()-family functions ( ) nevypočítali násobné sčítanie s nekonečnou presnosťou k jedinému zaokrúhľovaniu, ale namiesto toho nahromadili chyby zaokrúhľovania pri každej operácii. 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() obsahovala niečo, čo vyzeralo ako číslo s pohyblivou rádovou čiarkou v exponenciálnom formáte a po e/E bol neočakávaný znak a potom tam, kde bol zadaný endptr, mu bola priradená adresa, ktorá ukazovala na znak za znakom , zatiaľ čo mala smerovať na samotný znak e//E, pretože ten nebol konvertovaný. Napríkladample, strtod(“100exx”, &ep) by mal vrátiť 100.00 a nastaviť ep tak, aby ukazovalo na časť reťazca „exx“, zatiaľ čo funkcia vracala správnu hodnotu, ale nastavovala časť reťazca „xx“.
Verzia 2.40
- Príliš uvoľnené (XC8-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 deaktivovaná, ako je uvedené vo varovaní (XC8-2875) Funkcia const-data-in-config-mapped-progmem závisí od aktivácie funkcie const-data-in-progmem. Ak bola funkcia const-data-in-config-mapped-progmem explicitne povolená pomocou tejto možnosti a funkcia const-data-in-progmem bola zakázaná, krok prepojenia zlyhal, napriek tomu, že sa zobrazilo varovné hlásenie, že const-data-in funkcia -config-mapped-progmem bola automaticky vypnutá, č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 nezohľadnil, že register NVMCTRL bol pod ochranou Configuration Change Protection (CCP) a nedokázal nastaviť IO SFR na použitú stránku pomocou funkcie kompilátora const-data-in-config-mapped-progmem. 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 s cieľom vyhnúť sa mapovaniu flash (XC8-2847) Bolo implementované riešenie problému s funkciou zariadenia na mapovanie flash, ktoré je uvedené v AVR128DA28/32/48/64 Silicon Errata (DS80000882). 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 knižničných funkcií sinhf() alebo coshf() viedli k chybe prepojenia, ktorá popisovala nedefinovaný odkaz. Chýbajúca funkcia, na ktorú sa odkazuje, bola teraz zahrnutá do distribúcie kompilátora.
- Chyby zostavy s nopa (XC8-2833) Použitie atribútu nopa s funkciou, ktorej názov assembleru bol zadaný pomocou __asm__() spustilo chybové správy z assembleru. Táto kombinácia nie je možná.
- Zlyhanie premennej funkcie s argumentmi ukazovateľa (XC8-2755, XC8-2731) Funkcie s premenlivým počtom argumentov očakávajú, že 24-bitové ukazovatele (typ __memx) budú odovzdané v zozname argumentov premenných, keď je funkcia const-data-in-progmem povolené. 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 const-data-in-progmem, všetky argumenty 16-bitových ukazovateľov sa teraz skonvertujú na 24-bitové ukazovatele.
- Zlyhanie funkcií knižnice strtoxxx (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é pretypovanie (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áciu const), napr.ample, (uint8_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 const objektov (XC8-2408) Neinicializované a konštantné prchavé objekty const
neboli umiestnené do programovej pamäte na zariadeniach, ktoré mapujú celú alebo časť ich programovej pamäte do dátového adresného priestoru. Pre tieto zariadenia sú teraz takéto objekty umiestnené v pamäti programu, čím je ich činnosť konzistentná s inými zariadeniami.
Verzia 2.39 (funkčné bezpečnostné vydanie)
žiadne.
Verzia 2.36
Chyba pri oneskorení (XC8-2774) Drobné zmeny v predvolenom optimalizácii 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 spustila sa chyba: __builtin_avr_delay_cycles očakáva celé číslo v čase kompilácie konštantný.
Verzia 2.35
- Súvislá alokácia pomocou __at (XC8-2653) Súvislá alokácia viacerých objektov umiestnených v sekcii s rovnakým názvom a pomocou __at() nefungovala správne. Napríkladample:
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 - Zadanie počiatočných adries sekcie (XC8-2650) 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é musia byť umiestnené pomocou voľby -Wl,-T. Linker padá 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 zlyhal. Teraz sa za takýchto okolností namiesto toho vydávajú chybové hlásenia.
- No no-fallback-back (XC8-2646) 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 (XC8-2637) Pri výbere optimalizácie úrovne 3 (-O3) boli povolené optimalizácie procedurálnej abstrakcie. 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 (XC8-2629) Rutina eeprom_read_block nefungovala správne na zariadeniach Xmega, keď bola povolená možnosť – mconst-data-in-progmem (čo je predvolený stav), v dôsledku čoho sa pamäť EEPROM nečítala správne.
- Neplatná alokácia pamäte (XC8-2593, XC8-2651) Keď je možnosť linkera -Ttext alebo -Tdata (napr.ampsú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__((__signal__, __interrupt__)).
- Neplatný kód prerušenia ATtiny (XC8-2465) Pri vytváraní pre zariadenia ATtiny a optimalizácie boli zakázané (-O0), funkcie prerušenia mohli spustiť operand mimo rozsahu
- Voľby, ktoré sa neprenášajú (XC8-2452) Pri použití voľby -Wl s viacerými možnosťami linkera oddelených čiarkami, nie všetky možnosti linkera boli odovzdané linkeru.
- Chyba nepriameho čítania programovej pamäte (XC8-2450) V niektorých prípadoch kompilátor vytvoril vnútornú chybu (nerozpoznateľné insn ) pri čítaní dvojbajtovej hodnoty z ukazovateľa do programovej pamäte
Verzia 2.32
Druhý prístup ku knižnici zlyhá (XC8-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ť.
Verzia 2.31
Nevysvetliteľné zlyhania kompilátora (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í.
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 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 „Štítky ako hodnoty“ mohol spôsobiť zlyhanie optimalizácie procedurálnej abstrakcie s chybou opravy rozsahu rozsahu.
- Nie tak const (XC8-2271) Prototypy pre strstr() a ďalšie funkcie z už nešpecifikujte neštandardný kvalifikátor na vrátených reťazcoch, keď je funkcia const -mconst-data-in-progmem zakázaná. Upozorňujeme, že pri zariadeniach avrxmega3 a avrtiny je táto funkcia trvalo povolená.
- Stratené inicializátory (XC8-2269) Keď bola do sekcie umiestnená viac ako jedna premenná v prekladovej jednotke (pomocou __section alebo __attribute__((section)) ) a prvá takáto premenná bola nula inicializovaná alebo nemala inicializátor, inicializátory pre ostatné premenné v rovnakej prekladovej jednotke, ktoré boli umiestnené v rovnakej sekcii, sa stratili.
Verzia 2.29 (funkčné bezpečnostné vydanie)
žiadne.
Verzia 2.20
- Chyba pri dlhých príkazoch (XC8-1983) Pri použití cieľa AVR sa kompilátor mohol zastaviť s chybou nenašiel sa súbor, ak bol príkazový riadok extrémne veľký a obsahoval špeciálne znaky, ako sú ú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
Verzia 2.19 (funkčné bezpečnostné vydanie)
žiadne.
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-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_VERSION, __XC a __XC8 sú automaticky definované kompilátorom. Tieto sú teraz k dispozícii.
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 RAM (XC8-1800, XC8-1796) Programy, ktoré prekročili dostupnú RAM, neboli v niektorých situáciách detegované kompilátorom, čo malo za následok zlyhanie runtime kódu.
- Vynechaná pamäť flash (XC8-1792) Pre zariadenia avrxmega3 a avrtiny môžu byť časti pamäte flash ponechané nenaprogramované v 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 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 čítanie programovej pamäte (XC8-1783) Projekty kompilované pre zariadenia s programovou pamäťou mapovanou do dátového adresného priestoru 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 s tokenmi __at() 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 pri spustení main (XC8-1780, XC8-1767, XC8-1754) Použitie premenných EEPROM alebo definovanie poistiek pomocou konfiguračnej pragmy mohlo spôsobiť nesprávnu inicializáciu dát a/alebo zablokovanie vykonávania programu v runtime spúšťacom kóde pred dosiahnutím main( ).
- Chyba poistiek pri malých zariadeniach (XC8-1778, XC8-1742) Zariadenia attiny4/5/9/10/20/40 mali v hlavičkových súboroch špecifikovanú nesprávnu dĺžku poistiek, čo viedlo k chybám linkera pri pokuse o zostavenie kódu, ktorý definoval poistky. .
- Porucha 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 neboli vymazané (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 nevygeneroval chybu, keď sa použili viaceré možnosti špecifikácie zariadenia a indikovali rôzne zariadenia.
- Poškodenie pamäte haldou (XC8-1748) 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 vzdialeným presne 4 kB.
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ť výhodné, ak potrebujete kontaktovať podporu. Položky, ktoré nemajú štítky, sú obmedzeniami, ktoré opisujú modi operandi a ktoré pravdepodobne zostanú v platnosti natrvalo.
Integrácia MPLAB X IDE
- Integrácia MPLAB IDE Ak sa má kompilátor používať z MPLAB IDE, musíte pred inštaláciou kompilátora nainštalovať MPLAB IDE.
- Informácie o ladení poľa (XC8-3157) Informácie o ladení produkované kompilátorom presne neuvádzajú typ objektu pre polia v adresnom priestore __memx. Toto zabráni pozorovaniu objektu v IDE.
Generovanie kódu
- Segfault s možnosťou section-anchors (XC8-3045) Program, ktorý definoval funkcie so zoznamom argumentov premenných a ktorý používa možnosť -fsection-anchors, mohol spustiť internú chybu kompilátora: Chyba segmentácie
- Informácie o ladení nie sú synchronizované (XC8-2948) Keď optimalizácia uvoľnenia linkera zmenšuje pokyny (napr.ample 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 naprample, 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ď sa veľkosť kódu blíži k množstvu dostupnej programovej pamäte na zariadení, aj keď program by mal byť schopný prispôsobiť sa dostupnému priestor.
- Nie tak smart Smart-IO (XC8-2872) Funkcia smart-io kompilátora vygeneruje platný, ale suboptimálny kód pre funkciu snprintf, ak bola funkcia const-data-in-progmem zakázaná alebo ak má zariadenie všetky svoje flash mapovaný do dátovej pamäte.
- Ešte menej smart Smart-IO (XC8-2869) Funkcia smart-io kompilátora vygeneruje platný, ale suboptimálny kód, keď sa použijú možnosti -flto a -fno-builtin.
- Suboptimálne umiestnenie údajov iba na čítanie (XC8-2849) Linker v súčasnosti nepozná časti pamäte APPCODE a APPDATA, ani rozdelenie [No-]Read-While-Write na mape pamäte. V dôsledku toho existuje malá šanca, že linker môže alokovať údaje len na čítanie v nevhodnej oblasti pamäte. Pravdepodobnosť nesprávneho umiestnenia ú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ť.
- Poradie spracovania objektových súborov (XC8-2863) Poradie, v ktorom budú objektové súbory spracované linkerom, sa môže 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 spojovača.
- Krátke identifikátory prebudenia (XC8-2775) Pre zariadenia ATA5700/2 sú registre PHID0/1 definované iba ako 16 bitov široké namiesto 32 bitov.
- Zlyhanie linkera pri volaní symbolu (XC8-2758) Linker môže zlyhať, ak sa použije možnosť ovládača -mrelax, keď zdrojový kód volá symbol, ktorý bol definovaný pomocou možnosti linkera – Wl,–defsym.
- Nesprávna inicializácia (XC8-2679) Existuje nesúlad medzi tým, kde sú počiatočné hodnoty niektorých globálnych/statických objektov s veľkosťou bajtov umiestnené v dátovej pamäti, a tým, kde budú premenné prístupné za behu.
- Nesprávne 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é body (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(“0x1”, &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()) nevyšle.
- 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.
- Nesprávny výstup s neplatnou cestou DFP (XC8-2376) Ak je kompilátor vyvolaný s neplatnou cestou DFP a pre vybraté zariadenie existuje súbor „spec“, kompilátor nenahlási chýbajúci balík rodiny zariadení a namiesto toho vyberie „spec“ súbor, čo by potom mohlo viesť k neplatnému výstupu. Súbory „spec“ 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é prekrývanie pamäte (XC8-1966) Kompilátor nezisťuje prekrývanie pamäte objektov, ktoré sú absolútne na adrese (prostredníctvom __at()) a iných objektov pomocou špecifikátora __section() a ktoré sú spojené s rovnakou adresou.
- Zlyhanie knižničných funkcií a __memx (XC8-1763) Volané funkcie libgcc s pohyblivou čiarou 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 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) Súbor nástrojov 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í pri použití voľby -mrelax.
- Obmedzenia priestoru názvov (AVRTC-733) Pomenované priestory adries sú podporované radom nástrojov s výhradou obmedzení uvedených v časti Kvalifikátory špeciálnych typov v používateľskej príručke.
- Č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.
Dokumenty / zdroje
![]() |
Poznámky k vydaniu MICROCHIP XC8 C Compiler verzie 2.45 pre AVR MCU [pdfPokyny AVR MCU, XC8 C, XC8 C Compiler Version 2.45 Notes for AVR MCU, Compiler Version 2.45 Release Notes for AVR MCU, Version 2.45 Release Notes for AVR MCU, Release Notes for AVR MCU, Notes for AVR MCU, AVR MCU |