MIKROCHIP-LOGO

MICROCHIP XC8 C Compiler verze 2.45 Poznámky k vydání pro AVR MCU

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

Informace o produktu

MPLAB XC8 C Compiler je softwarový nástroj používaný pro cílení na zařízení Microchip AVR. Je navržen tak, aby kompiloval kód C a generoval spustitelný soubor files pro tato zařízení. Verze kompilátoru, na kterou se odkazuje v této uživatelské příručce, je 2.45 s oficiálním datem sestavení 18. srpna 2023. Předchozí verze byla 2.41, sestavená 8. února 2023. Kompilátor je dodáván s Příručkou funkční bezpečnosti, která poskytuje další informace a pokyny pro použití kompilátorů MPLAB XC s aplikacemi funkční bezpečnosti. Tato příručka je součástí balíčku dokumentace při zakoupení licence funkční bezpečnosti. MPLAB XC8 C Compiler podporuje všechna dostupná 8bitová AVR MCU zařízení v době vydání. Můžete se podívat na avr_chipinfo.html file v adresáři doc kompilátoru najdete seznam všech podporovaných zařízení a jejich nastavení konfiguračních bitů. K dispozici jsou různé edice kompilátoru MPLAB XC8. Licencovaná (PRO) edice poskytuje vyšší úroveň optimalizace ve srovnání s bezplatnou edicí. Chcete-li aktivovat kompilátor jako licencovaný produkt, musíte si zakoupit aktivační klíč. Nelicencovanou verzi však lze používat neomezeně dlouho bez licence. Pro aplikace funkční bezpečnosti je k dispozici kompilátor funkční bezpečnosti MPLAB XC8. K aktivaci vyžaduje licenci funkční bezpečnosti zakoupenou od společnosti Microchip. Po aktivaci lze využívat všechny úrovně optimalizace a funkce kompilátoru. MPLAB XC Functional Safety Compiler také podporuje Network Server License. Podrobné informace o instalaci, aktivaci, typech licencí a problémech s migrací naleznete v dokumentu Instalace a licencování MPLAB XC C Compilers (DS50002059).

Návod k použití produktu

  1. Před spuštěním softwaru MPLAB XC8 C Compiler si přečtěte uživatelskou příručku pro důležité informace a pokyny specifické pro cílení na zařízení Microchip AVR.
  2. Pokud používáte kompilátor pro 8bitová zařízení PIC, podívejte se na dokument MPLAB XC8 C Compiler Release Notes for PIC.
  3. Ujistěte se, že váš operační systém splňuje systémové požadavky pro spuštění kompilátoru. Binární soubory pro macOS byly podepsány kódem a notářsky ověřeny. Síťový licenční server MPLAB XC je k dispozici pro Microsoft Windows 10 a vyšší, Ubuntu 18.04 a vyšší a macOS 10.15 a vyšší. Všimněte si, že MPLAB XC Network License Server není testován na těchto operačních systémech.
  4. Síťový licenční server MPLAB XC lze provozovat na virtuálních strojích podporovaného OS pomocí licence virtuálního stroje pro síťové licence (SW006021-VM). Všechny 32bitové verze MPLAB XC Network Server jsou ukončeny počínaje verzí 3.00.
  5. Chcete-li aktivovat kompilátor MPLAB XC8 C jako licencovaný (PRO) produkt, zakupte si aktivační klíč. To poskytne vyšší úroveň optimalizace ve srovnání s bezplatnou verzí. Nelicencovaný kompilátor však lze provozovat neomezeně dlouho bez licence.
  6. Pokud používáte kompilátor funkční bezpečnosti MPLAB XC8 pro aplikace funkční bezpečnosti, musí být aktivován pomocí licence funkční bezpečnosti zakoupené od společnosti Microchip. Bez této licence nebude překladač fungovat. Po aktivaci si můžete vybrat libovolnou úroveň optimalizace a používat všechny funkce kompilátoru. Licence Network Server je podporována tímto vydáním MPLAB XC Functional Safety Compiler.
  7. Podrobné pokyny k instalaci, aktivaci a licencování kompilátoru MPLAB XC8 C naleznete v dokumentu Instalace a licencování kompilátorů MPLAB XC C (DS50002059).
  8. Pokud používáte kompilátor pod zkušební licencí, obdržíte během kompilace varování, když do 14 dnů od konce zkušebního období skončíte. Stejné varování se zobrazí, pokud jste do 14 dnů od konce vašeho předplatného HPA.

Nadview

Zavedení
Toto vydání kompilátoru Microchip MPLAB® XC8 C obsahuje několik nových funkcí, oprav chyb a podporu pro nová zařízení.

Datum sestavení
Oficiální datum sestavení této verze kompilátoru je 18. srpna 2023.

Předchozí verze
Předchozí verze kompilátoru MPLAB XC8 C byla 2.41, postavená 8. února 2023.

Manuál funkční bezpečnosti
Příručka funkční bezpečnosti pro kompilátory MPLAB XC je k dispozici v balíčku dokumentace při zakoupení licence funkční bezpečnosti.

Licence a verze komponent
Kompilátor MPLAB XC8 C pro nástroje AVR MCU je napsán a distribuován pod licencí GNU General Public License (GPL), což znamená, že jeho zdrojový kód je volně distribuován a je k dispozici veřejnosti. Zdrojový kód pro nástroje pod GNU GPL lze stáhnout samostatně z Microchip's webmísto. GNU GPL si můžete přečíst v file name nalezl podadresář vašeho instalačního adresáře. Obecnou diskuzi o principech, na kterých je GPL založena, naleznete zde. Pro záhlaví byl poskytnut kód podpory files, linker skripty a runtime knihovny jsou proprietární kód a nevztahuje se na ně GPL. Tento kompilátor je implementací GCC verze 5.4.0, binutils verze 2.26 a používá avr-libc verze 2.0.0.

Systémové požadavky
Kompilátor MPLAB XC8 C a licenční software, který používá, jsou k dispozici pro různé operační systémy, včetně 64bitových verzí následujících: Professional edice Microsoft® Windows® 10, Ubuntu® 18.04, macOS® 13.2 (Ventura) a Fedora 34. Binární soubory pro Windows byly podepsány kódem. Binární soubory pro macOS byly podepsány kódem a notářsky ověřeny. Síťový licenční server MPLAB XC je k dispozici pro různé 64bitové operační systémy, včetně Microsoft Windows 10 a vyšší; Ubuntu 18.04 a vyšší; nebo macOS 10.15 a vyšší. Server může také běžet na různých jiných operačních systémech včetně Windows Server, distribucích Linuxu, jako je Oracle® Enterprise Linux® a Red Hat® Enterprise Linux, a také na starších verzích podporovaných operačních systémů. Síťový licenční server MPLAB XC však není na těchto operačních systémech testován. Síťový licenční server MPLAB XC lze provozovat na virtuálních strojích podporovaného OS pomocí licence virtuálního stroje pro síťové licence (SW006021-VM). Všechny 32bitové verze MPLAB XC Network Server jsou ukončeny počínaje verzí 3.00.

Zařízení podporována
Tento kompilátor podporuje všechna dostupná 8bitová zařízení AVR MCU v době vydání. Viz avr_chipinfo.html (v adresáři doc kompilátoru) pro seznam všech podporovaných zařízení. Tyto soubory také obsahují nastavení bitů konfigurace pro každé zařízení.

Edice a aktualizace licencí
Kompilátor MPLAB XC8 lze aktivovat jako licencovaný (PRO) nebo nelicencovaný (Free) produkt. Chcete-li licencovat svůj kompilátor, musíte si zakoupit aktivační klíč. Licence umožňuje vyšší úroveň optimalizace ve srovnání s bezplatným produktem. Nelicencovaný kompilátor lze provozovat neomezeně dlouho bez licence. Kompilátor funkční bezpečnosti MPLAB XC8 musí být aktivován pomocí licence funkční bezpečnosti zakoupené od společnosti Microchip. Bez této licence nebude překladač fungovat. Po aktivaci si můžete vybrat libovolnou úroveň optimalizace a používat všechny funkce kompilátoru. Tato verze MPLAB XC Functional Safety Compiler podporuje licenci síťového serveru. Informace o typech licencí a instalaci kompilátoru s licencí naleznete v dokumentu Instalace a licencování kompilátorů MPLAB XC C (DS50002059).

Instalace a aktivace
Viz také sekce Problémy a omezení migrace, kde najdete důležité informace o nejnovějším správci licencí, který je součástí tohoto kompilátoru. Pokud používáte MPLAB IDE, nezapomeňte před instalací tohoto nástroje nainstalovat nejnovější MPLAB X IDE verze 5.0 nebo novější. Před instalací kompilátoru ukončete IDE. Spusťte instalační aplikaci kompilátoru .run (Linux) nebo .app (macOS), např. XC8-1.00.11403-windows.exe, a postupujte podle pokynů na obrazovce. Doporučuje se výchozí instalační adresář. Pokud používáte Linux, musíte nainstalovat kompilátor pomocí terminálu a z účtu root. Nainstalujte pomocí účtu macOS s oprávněními správce. Aktivace se nyní provádí odděleně od instalace. Další informace naleznete v dokumentu License Manager for MPLAB® XC C Compilers (DS52059). Pokud se rozhodnete spustit kompilátor pod zkušební licencí, zobrazí se vám nyní během kompilace varování, když do 14 dnů od konce zkušebního období nedosáhnete. Stejné varování se zobrazí, pokud jste do 14 dnů od konce vašeho předplatného HPA. XC Network License Server je samostatný instalační program a není součástí instalačního programu kompilátoru pro jednoho uživatele. XC License Manager nyní podporuje roaming pohyblivých síťových licencí. Tato funkce je zaměřena na mobilní uživatele a umožňuje přechodné licenci na krátkou dobu mimo síť. Pomocí této funkce se můžete odpojit od sítě a stále používat svůj MPLAB XC kompilátor. Více o této funkci najdete ve složce doc instalace XCLM. MPLAB X IDE obsahuje okno Licence (Nástroje > Licence) pro vizuální správu roamingu.

Řešení problémů s instalací
Pokud máte potíže s instalací kompilátoru pod některým z operačních systémů Windows, vyzkoušejte následující návrhy.

  • Spusťte instalaci jako správce.
  • Nastavte oprávnění instalační aplikace na „Plná kontrola“. (Klikněte pravým tlačítkem myši na soubor, vyberte Vlastnosti, karta Zabezpečení, vyberte uživatele, upravte.)
  • Nastavte oprávnění dočasné složky na 'Plná kontrola'.

Chcete-li určit umístění dočasné složky, zadejte %temp% do příkazu Spustit (klávesa s logem Windows + R). Otevře se dialogové okno Průzkumník souborů s daným adresářem a umožní vám určit cestu k této složce.

Dokumentace kompilátoru
Uživatelské příručky kompilátoru lze otevřít ze stránky HTML, která se otevře ve vašem prohlížeči po kliknutí na modré tlačítko nápovědy na řídicím panelu MPLAB X IDE, jak je uvedeno na snímku obrazovky.MICROCHIP-XC8-C-Compiler-Version-2-45-Release-Notes-for-AVR-MCU-1

Pokud vytváříte pro 8bitové cíle AVR, uživatelská příručka kompilátoru MPLAB® XC8 C pro AVR® MCU obsahuje informace o možnostech a funkcích kompilátoru, které jsou použitelné pro tuto architekturu.

Zákaznická podpora
Ve fóru XC8 se můžete ptát ostatních uživatelů tohoto produktu. Microchip vítá hlášení o chybách, návrhy nebo komentáře týkající se této verze kompilátoru. Veškeré hlášení o chybách nebo požadavky na funkce směřujte prostřednictvím systému podpory.

Aktualizace dokumentace

Pro online a aktuální verze dokumentace MPLAB XC8 navštivte online technickou dokumentaci společnosti Microchip webmísto.
Nová nebo aktualizovaná dokumentace AVR v tomto vydání:

Žádný

  • Průvodce migrací AVR® GNU Toolchain na MPLAB® XC8 popisuje změny zdrojového kódu a možnosti sestavení, které mohou být vyžadovány, pokud se rozhodnete migrovat projekt založený na C z 8bitového GNU Toolchainu AVR do kompilátoru Microchip MPLAB XC8 C.
  • Referenční příručka Microchip Unified Standard Library popisuje chování a rozhraní funkcí definovaných Microchip Unified Standard Library, stejně jako zamýšlené použití typů knihoven a maker. Některé z těchto informací byly dříve obsaženy v uživatelské příručce MPLAB® XC8 C kompilátoru pro AVR® MCU. Informace o knihovně specifické pro zařízení jsou stále obsaženy v této příručce kompilátoru.
  • Pokud právě začínáte s 8bitovými zařízeními a kompilátorem MPLAB XC8 C, MPLAB® XC8 User's
  • Průvodce pro vestavěné inženýry – AVR® MCU (DS50003108) obsahuje informace o nastavení projektů v MPLAB X IDE a psaní kódu pro váš první projekt MPLAB XC8 C. Tato příručka je nyní distribuována s kompilátorem.
  • Uživatelská příručka Hexmate je určena pro ty, kteří používají Hexmate jako samostatnou aplikaci.

Co je nového

Následují nové funkce cíle AVR, které kompilátor nyní podporuje. Číslo verze v podnadpisech označuje první verzi kompilátoru, která podporuje funkce, které následují.

Verze 2.45
Univerzální správce licencí (XC8-3175, XCLM-224) Verze správce licencí pro macOS použitá s kompilátorem je nyní univerzální a nabízí nativní podporu pro počítače s procesory Intel i M1. Verze správce licencí pro Linux nyní vyžaduje alespoň verzi 2.25 glibc. Univerzální binární soubory pro Mac (XC8-3168, XC8-2951) Binární soubory kompilátoru pro macOS jsou nyní univerzální a nabízejí nativní podporu pro počítače s procesory Intel i M1. Snížené velikosti knihoven s pohyblivou řádovou čárkou (XC8-3112, XC8-3071) Byla provedena vylepšení funkcí knihovny s pohyblivou řádovou čárkou, včetně sinf() pow(), sqrt(), expf(), log1fp() a nextafterf() , které vidí zmenšení velikosti kódu pro tyto rutiny. Podpora nových zařízení Podpora je nyní k dispozici pro následující části AVR: AVR16EA28, AVR16EA32, AVR16EA48, AVR32EA28, AVR32EA32, AVR32EA48, AVR16EB14, AVR16EB20, AVR16EB28 a AVR16EB32.

Verze 2.41

  • Podpora Bootrow (XC8-3053) Kompilátor umístí obsah všech sekcí s předponou .bootrow na adresu 0x860000 v HEX souboru. Tyto sekce se používají pro paměť BOOTROW, která je navržena pro ukládání klíčů a dalších zabezpečených informací, které by měly být přístupné pouze bootloaderu.
  • Eliminace redundantního návratu (XC8-3048) Kompilátor nyní odstraní redundantní instrukce ret ve funkcích se skokem na konci, když jsou použity vlastní skripty linkeru. Toto je podobná optimalizace jako dříve, ale nyní se provádí na všech osiřelých sekcích, i když je použit vlastní skript linkeru a není ve hře nejvhodnější schéma alokace.
  • Změna typu času (XC8-2982, 2932) Typ standardní knihovny C99, time_t, byl změněn z long long na typ unsigned long, což přináší vylepšení velikosti kódu v některých funkcích souvisejících s časem, jako je mktime().
  • Nový nop (XC8-2946, 2945) Makro NOP() bylo přidáno do . Toto makro vloží do výstupu instrukci nop no-operation.
  • Aktualizace na XCLM (XC8-2944) Správce licencí používaný s kompilátorem byl aktualizován a nyní lépe reaguje při kontrole podrobností o licenci kompilátoru.
  • Trampolined volání (XC8-2760) Kompilátor nyní může provádět nahrazení dlouhých instrukcí volání kratšími relativními voláními, když by relativní formy instrukcí byly normálně mimo dosah svého cíle. V této situaci se kompilátor pokusí nahradit instrukcemi rcall instrukcí volání jmp, která bude 'trampoline' provedení na požadovanou adresu, napřampten:

Verze 2.40

  • Podpora nových zařízení Podpora je nyní k dispozici pro následující díly AVR: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, A64EA32EA64, AVR
  • Vylepšená procedurální abstrakce Optimalizační nástroj procedurální abstrakce (PA) byl vylepšen, takže lze načrtnout kód obsahující instrukci volání funkce (call/rcall). K tomu dojde pouze v případě, že zásobník není použit k předávání argumentů ani k získávání návratové hodnoty z funkce. Zásobník se používá při volání funkce se seznamem proměnných argumentů nebo při volání funkce, která má více argumentů, než je k tomu určených registrů. Tuto funkci lze deaktivovat pomocí volby – mno-pa-outline-calls, nebo lze procedurální abstrakci zcela zakázat pro soubor objektu nebo funkci pomocí -mno-pa-on-file -mno-pa-on-function, nebo pomocí atributu nopa (specifikátor __nopa) selektivně s funkcemi.
  • Makro pokrytí kódu Kompilátor nyní definuje makro __CODECOV, pokud je zadána platná volba -mcodecov.
  • Možnost rezervace paměti Ovladač xc8-cc nyní při sestavování pro cíle AVR akceptuje volbu -mreserve=space@start:end. Tato volba rezervuje specifikovaný rozsah paměti v datovém nebo programovém paměťovém prostoru, čímž zabraňuje linkeru naplnit kód nebo objekty v této oblasti.
  • Chytřejší chytré IO Bylo provedeno několik vylepšení funkcí Smart IO, včetně obecných vylepšení kódu printf core, zpracování specifikátoru konverze %n jako nezávislé varianty, propojení v rutinách vararg pop na vyžádání, použití kratších datových typů, kde je to možné. Argumenty IO funkce a faktorizace běžného kódu při zpracování šířky pole a přesnosti. To může vést k významným úsporám kódu a dat a také ke zvýšení rychlosti provádění IO.

Verze 2.39 (funkční bezpečnostní vydání)
Licence síťového serveru Tato verze MPLAB XC8 Functional Safety Compiler podporuje licenci síťového serveru.

Verze 2.36
Žádný.

Verze 2.35

  • Podpora nových zařízení Podpora je k dispozici pro následující části AVR: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 a AVR64DD32.
  • Vylepšené přepínání kontextu Nová volba -mcall-isr-prologues mění způsob, jakým funkce přerušení ukládají registry při vstupu a jak se tyto registry obnovují po ukončení rutiny přerušení. Funguje podobně jako volba -mcall-prologues, ale ovlivňuje pouze funkce přerušení (ISR).
  • Ještě vylepšené přepínání kontextu Nová volba -mgas-isr-prologues řídí kód přepínání kontextu generovaný pro rutiny obsluhy malých přerušení. Je-li tato funkce povolena, bude assembler prohledávat ISR pro použití registrů a uložit tyto použité registry pouze v případě potřeby.
  • Konfigurovatelné mapování flash Některá zařízení z rodiny AVR DA a AVR DB mají SFR (např. FLMAP), který určuje, která 32k sekce programové paměti bude mapována do datové paměti. Novou možnost – mconst-data-in-config-mapped-progmem lze použít k tomu, aby linker umístil všechna kvalifikovaná data do jedné 32k sekce a automaticky inicializoval příslušný registr SFR, aby bylo zajištěno, že tato data budou mapována do prostoru datové paměti. , kde k němu bude efektivnější přístup.
  • Sjednocené standardní knihovny Microchip Všechny kompilátory MPLAB XC budou sdílet Sjednocenou standardní knihovnu Microchip, která je nyní k dispozici s tímto vydáním MPLAB XC8. Uživatelská příručka kompilátoru MPLAB® XC8 C pro AVR® MCU již neobsahuje dokumentaci pro tyto standardní funkce. Tyto informace lze nyní nalézt v Referenční příručce standardní knihovny Microchip. Všimněte si, že některé funkce dříve definované avr-libc již nejsou dostupné. (Viz Funkce knihovny.)
  • Smart IO Jako součást nových sjednocených knihoven jsou nyní IO funkce v rodinách printf a scanf generovány na zakázku u každého sestavení na základě toho, jak jsou tyto funkce používány v programu. To může podstatně snížit zdroje používané programem.
  • Možnost pomoci Smart IO Při analýze volání funkcí smart IO (jako je printf() nebo scanf() nemůže kompilátor vždy určit z formátovacího řetězce nebo odvodit z argumentů ty specifikátory převodu požadované voláním. Dříve kompilátor vždy žádné předpoklady a zajistit, aby byly plně funkční IO funkce propojeny s finálním obrazem programu Byla přidána nová volba -msmart-io-format=fmt, takže kompilátor může být uživatelem informován o specifikacích převodu používaných chytrým IO. funkce, jejichž použití je nejednoznačné, což zabraňuje propojení příliš dlouhých IO rutin (další podrobnosti viz volba smart-io-format.)
  • Umístění uživatelských sekcí Dříve možnost -Wl,–section-start umístila zadanou sekci na požadovanou adresu pouze tehdy, když skript linkeru definoval výstupní sekci se stejným názvem. Když tomu tak nebylo, sekce byla umístěna na adresu zvolenou linkerem a možnost byla v podstatě ignorována. Nyní bude tato možnost použita pro všechny vlastní sekce, i když skript linkeru sekci nedefinuje. Pamatujte však, že u standardních sekcí, jako jsou .text, .bss nebo .data , bude mít nejvhodnější alokátor stále úplnou kontrolu nad jejich umístěním a volba nebude mít žádný vliv. Použijte volbu -Wl,-Tsection=addr, jak je popsáno v uživatelské příručce.

Verze 2.32

  • Stack Guidance Funkce kompilátoru stack Guidance, která je k dispozici s licencí kompilátoru PRO, lze použít k odhadu maximální hloubky libovolného stacku používaného programem. Konstruuje a analyzuje graf volání programu, určuje využití zásobníku pro každou funkci a vytváří zprávu, ze které lze odvodit hloubku zásobníků používaných programem. Tato funkce je povolena pomocí volby příkazového řádku -mchp-stack-usage. Po provedení se vytiskne souhrn využití zásobníku. V mapovém souboru je k dispozici podrobná sestava zásobníku, kterou lze vyžádat běžným způsobem.
  • Podpora nových zařízení Podpora je k dispozici pro následující díly AVR: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28DB a AVR32DB28DB64 32.
  • Podpora zatažených zařízení Podpora již není k dispozici pro následující části AVR: AVR16DA28, AVR16DA32 a AVR16DA48.

Verze 2.31
Žádný.

Verze 2.30

  • Nová možnost, jak zabránit inicializaci dat Nová možnost ovladače -mno-data-init zabraňuje inicializaci dat a vymazání sekcí bss. Funguje tak, že potlačí výstup symbolů do_clear_bss v souborech sestavení, což zase zabrání zahrnutí těchto rutin linkerem.
  • Vylepšené optimalizace Byla provedena řada optimalizačních vylepšení, včetně odstranění nadbytečných návratových instrukcí, odstranění některých skoků po instrukci skip-if-bit-is a vylepšené procedurální abstrakce a schopnosti tento proces opakovat.
    Nyní jsou k dispozici další možnosti pro ovládání některých z těchto optimalizací, konkrétně -fsection- anchors , které umožňují provádět přístup ke statickým objektům vzhledem k jednomu symbolu; -mpa- iterations=n , což umožňuje změnit počet iterací procedurální abstrakce z výchozích 2; a -mpa-callcost-shortcall, který provádí agresivnější procedurální abstrakci v naději, že linker dokáže uvolnit dlouhé hovory. Tato poslední možnost může zvětšit velikost kódu, pokud nejsou splněny základní předpoklady.
  • Podpora nových zařízení Podpora je k dispozici pro následující díly AVR: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DAB64, AVR128DAB28, AVR128VR,32D128 a AVR48DB128.
  • Podpora zatažených zařízení již není k dispozici pro následující části AVR: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612, ATA6613C, ATA6614C, ATA6616Q, ATAC,6617CATA664251 and.

Verze 2.29 (funkční bezpečnostní vydání)

  • Soubor záhlaví pro vestavěné komponenty kompilátoru Aby bylo zajištěno, že kompilátor může odpovídat specifikacím jazyka, jako je MISRA, , byl aktualizován. Tato hlavička obsahuje prototypy pro všechny vestavěné funkce, jako je __builtin_avr_nop() a __builtin_avr_delay_cycles() . Některé vestavěné moduly nemusí být kompatibilní s MISRA; ty lze vynechat přidáním definice __XC_STRICT_MISRA do příkazového řádku kompilátoru. Vestavěné moduly a jejich deklarace byly aktualizovány tak, aby používaly typy s pevnou šířkou.

Verze 2.20

  • Podpora nových zařízení Podpora je k dispozici pro následující části AVR: ATTINY1624, ATTINY1626 a ATTINY1627.
  • Lepší alokace nejlepšího přizpůsobení Alokátor nejlepšího přizpůsobení (BFA) v kompilátoru byl vylepšen, takže sekce jsou alokovány v pořadí, které umožňuje lepší optimalizaci. BFA nyní podporuje pojmenované adresní prostory a lépe zvládá inicializaci dat.
  • Vylepšená procedurální abstrakce Optimalizace procedurální abstrakce se nyní provádí na více sekvencích kódu. Předchozí situace, kdy tato optimalizace mohla zvětšit velikost kódu, byly vyřešeny tím, že optimalizační kód byl informován o procesu sběru paměti linkeru.
  • Absence AVR Assembler AVR Assembler již není součástí této distribuce.

Verze 2.19 (funkční bezpečnostní vydání)
Žádný.

Verze 2.10

  • Pokrytí kódu Tato verze obsahuje funkci pokrytí kódu, která usnadňuje analýzu rozsahu, v jakém byl zdrojový kód projektu spuštěn. Chcete-li to povolit, použijte volbu -mcodecov=ram. Po spuštění programu na vašem hardwaru budou v zařízení shromážděny informace o pokrytí kódu, které lze přenést do MPLAB X IDE a zobrazit je pomocí pluginu pro pokrytí kódu. Informace o tomto pluginu naleznete v dokumentaci k IDE.
    K vyloučení následných funkcí z analýzy pokrytí lze použít #pragma nocodecov. V ideálním případě by mělo být pragma přidáno na začátek souboru, aby byl celý soubor vyloučen z analýzy pokrytí. Alternativně lze použít __attribute__((nocodecov)) k vyloučení konkrétní funkce z analýzy pokrytí.
  • Soubory popisu zařízení Nový soubor zařízení s názvem avr_chipinfo.html je umístěn v adresáři docs distribuce kompilátoru. Tento soubor obsahuje seznam všech zařízení podporovaných kompilátorem. Klikněte na název zařízení a otevře se stránka se všemi povolenými páry nastavení bitů konfigurace/hodnoty pro toto zařízení, např.amples.
  • Procedurální abstrakce Do kompilátoru byly přidány optimalizace procedurální abstrakce, které nahrazují běžné bloky kódu sestavení voláním extrahované kopie tohoto bloku. Ty jsou prováděny samostatnou aplikací, která je automaticky vyvolána kompilátorem při výběru optimalizace úrovně 2, 3 nebo s. Tyto optimalizace snižují velikost kódu, ale mohou snížit rychlost provádění a laditelnost kódu. Procedurální abstrakci lze zakázat na vyšších úrovních optimalizace pomocí volby -mno-pa, nebo ji lze povolit na nižších úrovních optimalizace (v závislosti na vaší licenci) pomocí -mpa. Pro objektový soubor jej lze zakázat pomocí -mno-pa-on-file=filename , nebo zakázáno pro funkci pomocí -mno-pa-on- function=function. Uvnitř zdrojového kódu lze procedurální abstrakci pro funkci zakázat pomocí __attribute__((nopa)) s definicí funkce nebo pomocí __nopa, které se rozšíří na __attribute__((nopa,noinline)) a zabrání tak provedení funkce vložení. a tam je abstrakce vloženého kódu.
  • Podpora zamykacích bitů v pragmě Konfiguraci #pragma lze nyní použít ke specifikaci zamykacích bitů AVR i ostatních konfiguračních bitů. Zkontrolujte soubor avr_chipinfo.html (zmíněný výše) pro páry nastavení/hodnota pro použití s ​​tímto pragmem.
  • Podpora nových zařízení Podpora je k dispozici pro následující části: AVR28DA128, AVR64DA128, AVR32DA128 a AVR48DA128.

Verze 2.05

  • Více bitů za vaše peníze Verze tohoto kompilátoru a správce licencí pro macOS je nyní 64bitová aplikace. Tím zajistíte, že se kompilátor nainstaluje a spustí bez varování v nejnovějších verzích macOS.
  • Const objekty v paměti programu Kompilátor nyní může umístit const-kvalifikované objekty do paměti Flash programu, místo aby je měl umístěn v RAM. Kompilátor byl upraven tak, aby konstantně kvalifikovaná globální data byla uložena v programové flash paměti a k ​​těmto datům lze přímo i nepřímo přistupovat pomocí příslušných instrukcí programové paměti. Tato nová funkce je ve výchozím nastavení povolena, ale lze ji deaktivovat pomocí volby -mno-const-data-in-progmem. U architektur avrxmega3 a avrtiny není tato funkce vyžadována a je vždy zakázána, protože programová paměť je mapována do datového adresního prostoru pro tato zařízení.
  • Standardní bezplatné verze tohoto kompilátoru bez licence (zdarma) nyní umožňují optimalizace až do úrovně 2 včetně. To umožní podobný, i když ne identický výstup, jaký byl dříve možný pomocí standardní licence.
  • Vítejte AVRASM2 Assembler AVRASM2 pro 8bitová zařízení je nyní součástí instalačního programu kompilátoru XC8. Tento assembler nepoužívá kompilátor XC8, ale je k dispozici pro projekty založené na ručně psaném zdroji sestavení.
  • Podpora nových zařízení Podpora je k dispozici pro následující části: ATMEGA1608, ATMEGA1609, ATMEGA808 a ATMEGA809.

Verze 2.00

  • Ovladač nejvyšší úrovně Nový ovladač s názvem xc8-cc je nyní umístěn nad předchozím ovladačem avr-gcc a ovladačem xc8 a může volat příslušný kompilátor na základě výběru cílového zařízení. Tento ovladač přijímá volby ve stylu GCC, které jsou buď přeloženy nebo předány prováděnému kompilátoru. Tento ovladač umožňuje použít podobnou sadu voleb s podobnou sémantikou s jakýmkoli cílem AVR nebo PIC, a je tedy doporučeným způsobem, jak vyvolat kompilátor. V případě potřeby lze starý ovladač avr-gcc volat přímo pomocí možností starého stylu, které akceptoval v dřívějších verzích kompilátoru.
  • Common C Interface Tento kompilátor se nyní může přizpůsobit MPLAB Common C Interface, což umožňuje snadnější portování zdrojového kódu napříč všemi MPLAB XC kompilátory. Volba -mext=cci vyžaduje tuto funkci a umožňuje alternativní syntaxi pro mnoho jazykových rozšíření.
  • Nový ovladač knihovny Nový ovladač knihovny je umístěn nad předchozím knihovníkem knihovny PIC a knihovníkem AVR avr-ar. Tento ovladač přijímá volby ve stylu archivátoru GCC, které jsou buď přeloženy nebo předány prováděnému knihovníkovi. Nový ovladač umožňuje použít podobnou sadu možností s podobnou sémantikou k vytvoření nebo manipulaci s libovolným souborem knihovny PIC nebo AVR, a proto je doporučeným způsobem, jak vyvolat knihovníka. Pokud to vyžadují starší projekty, lze předchozího knihovníka zavolat přímo pomocí možností starého stylu, které akceptoval v dřívějších verzích kompilátoru.

Problémy migrace

Následují funkce, které nyní kompilátor zpracovává jinak. Tyto změny mohou vyžadovat úpravu vašeho zdrojového kódu při portování kódu na tuto verzi kompilátoru. Číslo verze v podnadpisech označuje první verzi kompilátoru, která podporuje následující změny.

Verze 2.45
Žádný.

Verze 2.41
Odstraněny nepřesné funkce fma (XC8-2913) Standardní knihovna C99 ( ) nevypočítal násobné sčítání s nekonečnou přesností k jedinému zaokrouhlení, ale místo toho shromáždil chyby zaokrouhlení s každou operací. Tyto funkce byly z dodané knihovny odstraněny.

Verze 2.40
Žádný.

Verze 2.39 (funkční bezpečnostní vydání)
Žádný.

Verze 2.36
Žádný.

Verze 2.35

  • Zpracování bází string-to (XC8-2420) Aby byla zajištěna konzistence s jinými kompilátory XC, funkce XC8 string-to, jako strtol() atd., se již nebudou pokoušet převést vstupní řetězec, pokud je zadaný základ větší než 36 a místo toho nastaví . Standard C nespecifikuje chování funkcí při překročení této základní hodnoty.
  • Nevhodná optimalizace rychlosti Při výběru optimalizací úrovně 3 (-O3) byly povoleny optimalizace abstrakce procedur. Tyto optimalizace snižují velikost kódu na úkor rychlosti kódu, takže by neměly být prováděny. Projekty používající tuto úroveň optimalizace mohou zaznamenat rozdíly ve velikosti kódu a rychlosti provádění při sestavování s tímto vydáním.
  • Funkčnost knihovny Kód pro mnoho standardních funkcí knihovny C nyní pochází z Unifikované standardní knihovny Microchip, která může za určitých okolností vykazovat odlišné chování ve srovnání s tím, které poskytuje bývalá knihovna avr-libc. Napřampsouboru, již není nutné propojovat knihovnu lprintf_flt (volba -lprintf_flt), aby bylo možné zapnout formátovanou podporu IO pro specifikátory formátu float. Funkce smart IO Microchip Unified Standard Library činí tuto možnost nadbytečnou. Navíc již není nutné používat rutiny s příponou _P pro funkce řetězců a paměti (např. strcpy_P() atd..), které pracují s řetězci const ve flashi. Standardní rutiny C (např. strcpy() budou s takovými daty pracovat správně, když je povolena funkce const-data-in-program-memory.

Verze 2.32
Žádný.

Verze 2.31
Žádný.

Verze 2.30
Žádný.

Verze 2.29 (funkční bezpečnostní vydání)
Žádný.

Verze 2.2
Změněné rozvržení DFP Kompilátor nyní předpokládá jiné rozvržení používané službami DFP (Device Family Pack). To bude znamenat, že starší DFP nemusí s tímto vydáním fungovat a starší kompilátory nebudou moci používat nejnovější DFP.

Verze 2.19 (funkční bezpečnostní vydání)
Žádný.

Verze 2.10
Žádný

Verze 2.05
Objekty Const v paměti programu Všimněte si, že ve výchozím nastavení budou objekty s kvalifikací const umístěny a zpřístupněny v paměti programu (jak je popsáno zde). To ovlivní velikost a rychlost provádění vašeho projektu, ale mělo by to snížit využití paměti RAM. Tuto funkci lze v případě potřeby zakázat pomocí volby -mno-const-data-in-progmem.

Verze 2.00

  • Konfigurační pojistky Konfigurační pojistky zařízení lze nyní naprogramovat pomocí konfiguračního pragma následovaného páry nastavení-hodnota pro specifikaci stavu pojistky, např. #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3
  • Absolutní objekty a funkce Objekty a funkce lze nyní umístit na konkrétní adresu v paměti pomocí specifikátoru CCI __at(address), např.ampten:
    • #zahrnout
      int foobar __at(0x800100);
      char __at(0x250) getID(int offset) { … }
      Argumentem tohoto specifikátoru musí být konstanta, která představuje adresu, na kterou bude umístěn první bajt nebo instrukce. Adresy RAM jsou označeny pomocí offsetu 0x800000. Povolte CCI používat tuto funkci.
  • Nová syntaxe funkce přerušení Kompilátor nyní akceptuje specifikaci CCI __interrupt(num), která označuje, že funkce C jsou obsluhy přerušení. Specifikátor bere číslo přerušení, napřample: #zahrnout void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }

Opravené problémy

Následují opravy, které byly provedeny v kompilátoru. Ty mohou opravit chyby ve vygenerovaném kódu nebo změnit činnost kompilátoru tak, jak byla zamýšlena nebo specifikována v uživatelské příručce. Číslo verze v podnadpisech označuje první verzi kompilátoru, která obsahuje opravy pro následující problémy. Štítky v závorce v názvu jsou identifikace daného problému v databázi sledování. Mohou být užitečné, pokud potřebujete kontaktovat podporu.
Upozorňujeme, že některé problémy specifické pro zařízení jsou opraveny v sadě Device Family Pack (DFP) přidružené k zařízení. Informace o změnách provedených v DFP a stažení nejnovějších balíčků naleznete ve Správci balíčků MPLAB.

Verze 2.45

  • Selhání roamingové licence (XCLM-235) Roamované licence nefungovaly správně na platformách Linux používajících verze glibc novější než 2.28.
  • Interní chyba s poli struktur (XC8-3069) Když byly zpracovány vícerozměrné členy pole struktury, kvalifikátor adresního prostoru nebyl správně přenesen do pole. To vedlo k neshodě v informacích kvalifikátoru adresního prostoru a interní chybě kompilátoru. Tato situace byla opravena.
  • Chybné zápisy do neinicializovaných streamů (ML-353, XC8-3100) Pokud standardní výstupní/chybové proudy nebyly explicitně nastaveny pomocí FDEV_SETUP_STREAM nebo _init_stdout/_init_stderr , pokus o zápis do nich vedl k nedefinovanému chování. To také ovlivnilo zápisy z funkcí stdlib, jako je perror(). Jakékoli zápisy do těchto proudů před jejich inicializací budou nyní ignorovány.
  • Nepodporovaný modifikátor (XC8-2505) Knihovna avr-libc nepodporovala * modifikátor ve specifikacích převodu ve stylu printf, např.ample "%.*f". To je nyní podporováno zavedením Microchip Unified Standard Library.
  • Vícenásobná neinicializovaná varování (XC8-2409) Kompilátor vydával více identických varovných zpráv, když narazil na pole const, které nebylo inicializováno. Zpráva měla být vydána pouze jednou, což je nyní případ, kdy tato situace nastane.

Verze 2.41

  • Problémy s hardwarovými klíči na Ventura (XC8-3088) Hardwarové klíče použité k licencování kompilátoru nemusely být správně načteny na hostitelích macOS Ventura, což mělo za následek selhání licencování. Změny ve správci licencí XCLM opravují tento problém.
  • Nesprávná indikace alokace paměti (XC8-2925) Pokus o alokaci SIZE_MAX bytů (nebo hodnoty blízké této) paměti pomocí standardních funkcí správy paměti knihovny (malloc() et al.) požadovaných při použití implementace jednoduché dynamické alokace paměti. V takových situacích bude nyní vrácen ukazatel NULL a errno nastaveno na ENOMEM.
  • Odstraněny nepřesné funkce fma (XC8-2913) Standardní knihovna C99 fma()-family functions ( ) nevypočítal násobné sčítání s nekonečnou přesností k jedinému zaokrouhlení, ale místo toho shromáždil chyby zaokrouhlení s každou operací. Tyto funkce byly z dodané knihovny odstraněny.
  • Špatné zpracování převodu řetězců (XC8-2921, XC8-2652) Když „předmětová sekvence“ pro převod pomocí strtod() obsahovala to, co vypadalo jako číslo s pohyblivou řádovou čárkou v exponenciálním formátu a po e/E byl neočekávaný znak Pokud byl zadán endptr, pak mu byla přiřazena adresa, která ukazovala na znak za znakem , zatímco měla ukazovat na samotný znak e//E, protože ten nebyl převeden. Napřample, strtod(“100exx“, &ep) by měl vrátit 100.00 a nastavit ep tak, aby ukazoval na část řetězce „exx“, zatímco funkce vracela správnou hodnotu, ale nastavovala část řetězce „xx“.

Verze 2.40

  • Příliš uvolněné (XC8-2876) Při použití volby -mrelax kompilátor nepřiděloval některé sekce dohromady, což vedlo k méně optimální velikosti kódu. K tomu mohlo dojít u kódu, který používal nové knihovny MUSL, nebo u slabých symbolů.
  • Funkce mapování není deaktivována, jak je uvedeno ve varování (XC8-2875) Funkce const-data-in-config-mapped-progmem závisí na aktivaci funkce const-data-in-progmem. Pokud byla funkce const-data-in-config-mapped-progmem explicitně povolena pomocí této možnosti a funkce const-data-in-progmem byla deaktivována, krok propojení se nezdařil, přestože se zobrazila varovná zpráva, že const-data-in Funkce -config-mapped-progmem byla automaticky deaktivována, což nebylo zcela správné. Funkce const-data-in-config-mapped-progmem je nyní v této situaci plně deaktivována.
  • DFP se mění tak, aby správně přistupovalo k NVMCTRL (XC8-2848) Runtime spouštěcí kód používaný zařízeními AVR64EA nezohlednil, že registr NVMCTRL byl pod ochranou Configuration Change Protection (CCP) a nebyl schopen nastavit IO SFR na používanou stránku pomocí funkce kompilátoru const-data-in-config-mapped-progmem. Změny provedené v AVR-Ex_DFP verze 2.2.55 umožní spuštění runtime kódu správně zapisovat do tohoto registru.
  • Změny ve službě DFP, aby se zabránilo mapování flash (XC8-2847) Bylo implementováno řešení problému s funkcí zařízení pro mapování flash zaznamenané v AVR128DA28/32/48/64 Silicon Errata (DS80000882). Funkce kompilátoru const-data-in-config-mapped-progmem nebude ve výchozím nastavení použita pro postižená zařízení a tato změna se objeví ve verzi AVR-Dx_DFP 2.2.160.
  • Chyba sestavení s sinhf nebo coshf (XC8-2834) Pokusy o použití funkcí knihovny sinhf() nebo coshf() vedly k chybě propojení popisující nedefinovaný odkaz. Chybějící odkazovaná funkce byla nyní zahrnuta do distribuce kompilátoru.
  • Chyby sestavení pomocí nopa (XC8-2833) Použití atributu nopa s funkcí, která má název assembleru zadaný pomocí __asm__() spustilo chybové zprávy z assembleru. Tato kombinace není možná.
  • Selhání variadické funkce s argumenty ukazatele (XC8-2755, XC8-2731) Funkce s proměnným počtem argumentů očekávají, že v seznamu argumentů proměnných budou předány 24bitové ukazatele (typ __memx), když je funkce const-data-in-progmem povoleno. Argumenty, které byly ukazateli na datovou paměť, byly předány jako 16bitové objekty, což způsobilo selhání kódu, když byly nakonec přečteny. Když je povolena funkce const-data-in-progmem, všechny argumenty 16bitových ukazatelů jsou nyní převedeny na 24bitové ukazatele.
  • Selhání funkcí knihovny strtoxxx (XC8-2620) Když byla povolena funkce const-data-in-progmem, parametr endptr ve funkcích knihovny strtoxxx nebyl správně aktualizován pro argumenty zdrojového řetězce, které nejsou v paměti programu.
  • Upozornění na neplatná přetypování (XC8-2612) Kompilátor nyní vydá chybu, pokud je povolena funkce const-in-progmem a adresa řetězcového literálu je explicitně přetypována do prostoru adres dat (vynechá kvalifikátor const), např.ample, (uint8_t *) "Ahoj světe!" . Varování je problém, pokud adresa může být neplatná, když je ukazatel const dat explicitně přetypován do prostoru datových adres.
  • Umístění neinicializovaných objektů const (XC8-2408) Neinicializované a const nestálé objekty const
    nebyly umístěny do programové paměti na zařízeních, která mapují celou nebo část jejich programové paměti do datového adresního prostoru. U těchto zařízení jsou nyní takové objekty umístěny v paměti programu, takže jejich činnost je konzistentní s ostatními zařízeními.

Verze 2.39 (funkční bezpečnostní vydání)
Žádný.

Verze 2.36
Chyba při zpoždění (XC8-2774) Drobné změny ve výchozích optimalizacích volného režimu zabránily neustálému skládání výrazů operandů do vestavěných funkcí zpoždění, což vedlo k tomu, že se s nimi zacházelo jako s nekonstantními a spouštěla ​​chyba: __builtin_avr_delay_cycles očekává celé číslo kompilace konstantní.

Verze 2.35

  • Souvislá alokace pomocí __at (XC8-2653) Souvislá alokace více objektů umístěných v sekci se stejným názvem a pomocí __at() nefungovala správně. Napřampten:
    const char arr1[] __atribut__((sekce(.mysec“))) __at (0x500) = {0xAB, 0xCD}; const char arr2[] __atribut__((sekce(.mysec”))) = {0xEF, 0xFE}; měl umístit arr2 bezprostředně za arr1
  • Zadání počáteční adresy sekce (XC8-2650) Volba -Wl,–section-start tiše selhala při umístění sekcí na nominovanou počáteční adresu. Tento problém byl opraven pro všechny vlastní pojmenované sekce; nebude to však fungovat pro žádné standardní sekce, jako je .text nebo .bss, které musí být umístěny pomocí volby -Wl,-T. Linker padá při relaxaci (XC8-2647) Když byla povolena optimalizace -mrelax a existovaly sekce kódu nebo dat, které se nevešly do dostupné paměti, linker se zhroutil. Nyní se za takových okolností místo toho vydávají chybové zprávy.
  • No-nofallback (XC8-2646) Možnost –nofallback nebyla správně implementována ani zdokumentována. To lze nyní vybrat, abyste zajistili, že kompilátor neklesne zpět na nižší nastavení optimalizace, pokud je kompilátor bez licence, a místo toho vydá chybu.
  • Nevhodná optimalizace rychlosti (XC8-2637) Při výběru optimalizací úrovně 3 (-O3) byly povoleny optimalizace procedurální abstrakce. Tyto optimalizace snižují velikost kódu na úkor rychlosti kódu, takže by neměly být prováděny.
  • Špatný přístup k EEPROM (XC8-2629) Rutina eeprom_read_block nefungovala správně na zařízeních Xmega, když byla povolena možnost – mconst-data-in-progmem (což je výchozí stav), což mělo za následek nesprávné čtení paměti EEPROM.
  • Neplatná alokace paměti (XC8-2593, XC8-2651) Když je volba -Ttext nebo -Tdata linker (např.ampsoubor prošel pomocí volby ovladače -Wl), byl aktualizován odpovídající původ oblasti textu/dat; koncová adresa však nebyla odpovídajícím způsobem upravena, což mohlo vést k tomu, že oblast překročila rozsah paměti cílového zařízení.
  • Selhání s přehnaně přiřazenou funkcí (XC8-2580) Kompilátor se zhroutil, pokud byla funkce deklarována pomocí více než jednoho z atributů přerušení, signálu nebo nmi, např. __attribute__((__signal__, __interrupt__)).
  • Neplatný kód přerušení ATtiny (XC8-2465) Při vytváření pro zařízení ATtiny a optimalizace byly zakázány (-O0), funkce přerušení mohly spustit operand mimo rozsah
  • Možnosti, které nejsou předávány (XC8-2452) Při použití možnosti -Wl s více možnostmi linkeru oddělených čárkami nebyly všechny možnosti linkeru předány linkeru.
  • Chyba při nepřímém čtení paměti programu (XC8-2450) V některých případech kompilátor vytvořil vnitřní chybu (nerozpoznatelné insn ) při čtení dvoubajtové hodnoty z ukazatele do paměti programu.

Verze 2.32
Druhý přístup ke knihovně se nezdařil (XC8-2381) Vyvolání verze archivátoru knihoven xc8-ar.exe pro systém Windows podruhé pro přístup k existujícímu archivu knihovny mohlo selhat s chybovou zprávou o nemožnosti přejmenování.

Verze 2.31
Nevysvětlitelná selhání kompilátoru (XC8-2367) Při spuštění na platformách Windows, které měly systémový dočasný adresář nastavený na cestu obsahující tečku '.' kompilátor pravděpodobně selhal.

Verze 2.30

  • Globální štítky nesprávně umístěné po obrysu (XC8-2299) Ručně psaný kód sestavy, který umisťuje globální štítky do sekvencí sestav, které jsou vyloučeny procedurální abstrakcí, nemusel být správně přemístěn.
  • Relaxační pád (XC8-2287) Použití volby -mrelax mohlo způsobit selhání linkeru, když se optimalizace relaxace skoku ocasem pokusily odstranit instrukce ret, které nebyly na konci sekce.
  • Selhání při optimalizaci štítků jako hodnot (XC8-2282) Kód používající rozšíření jazyka GNU C „Štítky jako hodnoty“ mohl způsobit selhání optimalizací procedurální abstrakce s chybou opravy rozsahů.
  • Not so const (XC8-2271) Prototypy pro strstr() a další funkce z pokud je funkce const -mconst-data-in-progmem zakázána, již neuvádějte nestandardní kvalifikátor na vrácených řetězcových ukazatelích. Pamatujte, že u zařízení avrxmega3 a avrtiny je tato funkce trvale povolena.
  • Ztracené inicializátory (XC8-2269) Když byla více než jedna proměnná v překladové jednotce umístěna do sekce (pomocí __section nebo __attribute__((section)) ) a první taková proměnná byla nula inicializována nebo neměla inicializátor, inicializátory pro ostatní proměnné ve stejné překladové jednotce, které byly umístěny ve stejné sekci, byly ztraceny.

Verze 2.29 (funkční bezpečnostní vydání)
Žádný.

Verze 2.20

  • Chyba s dlouhými příkazy (XC8-1983) Při použití cíle AVR se kompilátor mohl zastavit s chybou nenalezen soubor, pokud byl příkazový řádek extrémně velký a obsahoval speciální znaky, jako jsou uvozovky, zpětná lomítka atd.
  • Nepřiřazená sekce rodata (XC8-1920) Linkeru AVR se nepodařilo přiřadit paměť pro vlastní sekce rodata při vytváření pro architektury avrxmega3 a avrtiny, což může způsobit chyby překrývání paměti

Verze 2.19 (funkční bezpečnostní vydání)
Žádný.

Verze 2.10

  • Selhání přemístění (XC8-1891) Nejlépe se hodící alokátor zanechával „díry“ v paměti mezi sekcemi po uvolnění linkeru. Kromě fragmentace paměti to zvýšilo možnost selhání přemístění linkeru souvisejících s PC relativními skoky nebo voláním mimo dosah.
  • Instrukce netransformované relaxací (XC8-1889) K relaxaci linkeru nedošlo u instrukcí skoku nebo volání, jejichž cíle se stanou dosažitelné, pokud se uvolní.
  • Chybějící funkčnost (XC8E-388) Několik definic z , jako například clock_div_t a clock_prescale_set() , nebyly definovány pro zařízení, včetně ATmega324PB, ATmega328PB, ATtiny441 a ATtiny841.
  • Chybějící makra Makra preprocesoru _XC8_MODE_, __XC8_VERSION, __XC a __XC8 jsou automaticky definována kompilátorem. Tyto jsou nyní k dispozici.

Verze 2.05

  • Interní chyba kompilátoru (XC8-1822) Při sestavování pod Windows mohla být při optimalizaci kódu vytvořena interní chyba kompilátoru.
  • Nebylo zjištěno přetečení RAM (XC8-1800, XC8-1796) Programy, které překračovaly dostupnou RAM, nebyly v některých situacích detekovány kompilátorem, což mělo za následek selhání runtime kódu.
  • Vynechaná paměť flash (XC8-1792) U zařízení avrxmega3 a avrtiny mohly být části paměti flash ponechány nenaprogramované pomocí MPLAB X IDE.
  • Selhání spuštění main (XC8-1788) V některých situacích, kdy program neměl definovány žádné globální proměnné, se spouštěcí kód runtime neukončil a funkce main() nebyla nikdy dosažena.
  • Nesprávné informace o paměti (XC8-1787) U zařízení avrxmega3 a avrtiny program avr-size hlásil, že data pouze pro čtení spotřebovávají RAM místo paměti programu.
  • Nesprávné čtení programové paměti (XC8-1783) Projekty kompilované pro zařízení s programovou pamětí mapovanou do datového adresního prostoru a definující objekty pomocí makra/atributu PROGMEM mohly tyto objekty načíst z nesprávné adresy.
  • Interní chyba s atributy (XC8-1773) Pokud jste definovali objekty ukazatele s tokeny __at() nebo atribut() mezi názvem ukazatele a dereferencovaným typem, došlo k interní chybě, např.ample, char * __at(0x800150) cp; V případě zjištění takového kódu se nyní zobrazí varování.
  • Neprovedení main (XC8-1780, XC8-1767, XC8-1754) Použití proměnných EEPROM nebo definování pojistek pomocí konfiguračního pragmatu mohlo způsobit nesprávnou inicializaci dat a/nebo zablokovat provádění programu v runtime spouštěcím kódu před dosažením main( ).
  • Chyba pojistky u malých zařízení (XC8-1778, XC8-1742) Zařízení attiny4/5/9/10/20/40 měla v hlavičkových souborech specifikovanou nesprávnou délku pojistek, což vedlo k chybám linkeru při pokusu o vytvoření kódu, který definoval pojistky. .
  • Chyba segmentace (XC8-1777) Přerušovaná chyba segmentace byla opravena.
  • Zhroucení assembleru (XC8-1761) Assembler avr-as mohl selhat, když byl kompilátor spuštěn pod Ubuntu 18.
  • Objekty nebyly vymazány (XC8-1752) Neinicializované objekty doby trvání statického úložiště nemusely být vymazány spouštěcím kódem za běhu.
  • Konfliktní specifikace zařízení ignorována (XC8-1749) Kompilátor negeneroval chybu, když bylo použito více možností specifikace zařízení a indikovalo různá zařízení.
  • Poškození paměti haldou (XC8-1748) Symbol __heap_start byl nastaven nesprávně, což mělo za následek možnost poškození běžných proměnných haldou.
  • Chyba relokace linkeru (XC8-1739) Chyba relokace linkeru mohla být vydána, když kód obsahoval rjmp nebo rcall s cílem vzdáleným přesně 4 kB.

Verze 2.00
Žádný.

Známé problémy

Následují omezení v činnosti kompilátoru. Mohou to být obecná omezení kódování nebo odchylky od informací obsažených v uživatelské příručce. Štítky v závorce v názvu jsou identifikace daného problému v databázi sledování. To může být užitečné, pokud potřebujete kontaktovat podporu. Ty položky, které nemají štítky, jsou omezení, která popisují modi operandi a která pravděpodobně zůstanou v platnosti trvale.

Integrace MPLAB X IDE

  • Integrace MPLAB IDE Pokud má být kompilátor použit z MPLAB IDE, musíte nainstalovat MPLAB IDE před instalací kompilátoru.
  • Informace o ladění pole (XC8-3157) Informace o ladění vytvořené kompilátorem neuvádějí přesně typ objektu pro pole v adresním prostoru __memx. To zabrání pozorování objektu v IDE.

Generování kódu

  • Segfault s volbou section-anchors (XC8-3045) Program, který definoval funkce se seznamy proměnných argumentů a který používal volbu -fsection-anchors, mohl spustit interní chybu kompilátoru: Chyba segmentace
  • Informace o ladění nejsou synchronizovány (XC8-2948) Když optimalizace uvolnění linkeru zmenší pokyny (např.ample call to rcall instrukce), mapování zdrojového řádku na adresu nemusí zůstat synchronizované, pokud v sekci dochází k více než jedné operaci zmenšení. V níže uvedeném example, existují dvě volání k foo, která skončí uvolněná na relativní volání.
  • Selhání alokace paměti PA (XC8-2881) Při použití optimalizátorů procedurální abstrakce může linker hlásit chyby alokace paměti, když se velikost kódu blíží velikosti dostupné programové paměti na zařízení, i když by program měl být schopen přizpůsobit dostupné paměti. prostor.
  • Není tak chytrý Smart-IO (XC8-2872) Funkce smart-io kompilátoru vygeneruje platný, ale neoptimální kód pro funkci snprintf, pokud byla deaktivována funkce const-data-in-progmem nebo pokud má zařízení všechny flesh mapovaný do datové paměti.
  • Ještě méně chytrý Smart-IO (XC8-2869) Funkce smart-io kompilátoru vygeneruje platný, ale neoptimální kód, když jsou použity volby -flto a -fno-builtin.
  • Suboptimální umístění dat pouze pro čtení (XC8-2849) Linker si aktuálně není vědom sekcí paměti APPCODE a APPDATA ani dělení [No-]Read-While-Write v mapě paměti. V důsledku toho existuje malá pravděpodobnost, že by linker mohl alokovat data pouze pro čtení v nevhodné oblasti paměti. Pravděpodobnost nesprávného umístění dat se zvyšuje, pokud je povolena funkce const-data-in-progmem, zejména pokud je povolena také funkce const-data-in-config-mapped-progmem. Tyto funkce lze v případě potřeby deaktivovat.
  • Pořadí zpracování objektových souborů (XC8-2863) Pořadí, ve kterém budou objektové soubory zpracovány linkerem, se může lišit v závislosti na použití optimalizací procedurální abstrakce (volba -mpa). To by ovlivnilo pouze kód, který definuje slabé funkce napříč více moduly.
  • Chyba linkeru s absolutní (XC8-2777) Když byl objekt na adrese na začátku paměti RAM nastaven jako absolutní a neinicializované objekty byly také definovány, může být spuštěna chyba linkeru.
  • Krátká ID probuzení (XC8-2775) U zařízení ATA5700/2 jsou registry PHID0/1 definovány pouze jako 16 bitové, nikoli 32 bitové.
  • Selhání linkeru při volání symbolu (XC8-2758) Linker může selhat, pokud je použita volba ovladače -mrelax, když zdrojový kód volá symbol, který byl definován pomocí volby linkeru – Wl,–defsym.
  • Nesprávná inicializace (XC8-2679) Existuje nesoulad mezi tím, kde jsou počáteční hodnoty některých globálních/statických objektů o velikosti bajtů umístěny v datové paměti, a tím, kde budou proměnné zpřístupněny za běhu.
  • Chybná nepřímá volání funkcí (XC8-2628) V některých případech mohou selhat volání funkcí provedená prostřednictvím ukazatele funkce uloženého jako součást struktury.
  • strtof vrací nulu pro hexadecimální pohyblivou čárku (XC8-2626) Knihovní funkce strtof() et al a scanf() et al vždy převedou hexadecimální číslo s plovoucí desetinnou čárkou, které neurčuje exponent na nulu. Napřample: strtof(“0x1”, &endptr); vrátí hodnotu 0, nikoli 1.
  • Nepřesné zasílání zpráv poradce zásobníku (XC8-2542, XC8-2541) V některých případech se varování poradce zásobníku týkající se rekurze nebo neurčitého zásobníku (pravděpodobně prostřednictvím použití alloca()) nezobrazuje.
  • Selhání s duplicitním kódem přerušení (XC8-2421) Pokud má více než jedna funkce přerušení stejné tělo, kompilátor může mít výstup pro volání jedné funkce přerušení druhé. To bude mít za následek zbytečné ukládání všech registrů zablokovaných volání a přerušení budou povolena ještě před spuštěním epilogu aktuální obsluhy přerušení, což by mohlo vést k selhání kódu.
  • Chybný výstup s neplatnou cestou DFP (XC8-2376) Pokud je kompilátor vyvolán s neplatnou cestou DFP a pro vybrané zařízení existuje soubor „spec“, kompilátor nenahlásí chybějící balíček rodiny zařízení a místo toho vybere „spec“ soubor, což by pak mohlo vést k neplatnému výstupu. Soubory „spec“ nemusí být aktuální pro distribuované služby DFP a byly určeny pouze pro použití s ​​interním testováním kompilátoru.
  • Nedetekováno překrývání paměti (XC8-1966) Kompilátor nezjišťuje překrývání paměti objektů, které jsou na adrese (prostřednictvím __at()) a dalších objektů pomocí specifikátoru __section() a které jsou spojeny se stejnou adresou, překryty.
  • Selhání funkcí knihovny a __memx (XC8-1763) Volané plovoucí funkce libgcc s argumentem v adresním prostoru __memx mohou selhat. Všimněte si, že rutiny knihovny jsou volány z některých operátorů C, takže napřample, je ovlivněn následující kód: return regFloatVar > memxFloatVar;
  • Omezená implementace libgcc (AVRTC-731) Pro produkty ATTiny4/5/9/10/20/40 je standardní implementace knihovny C/Math v libgcc velmi omezená nebo není k dispozici.
  • Omezení programové paměti (AVRTC-732) Soubor nástrojů podporuje obrazy programové paměti přesahující 128 kb; existují však známé případy přerušení linkeru bez uvolnění a bez užitečné chybové zprávy namísto generování požadovaných útržků funkcí při použití volby -mrelax.
  • Omezení jmenného prostoru (AVRTC-733) Pojmenované adresní prostory jsou podporovány toolchainem, s výhradou omezení uvedených v uživatelské příručce v části Kvalifikátory speciálních typů.
  • Časová pásma The funkce knihovny předpokládají GMT a nepodporují místní časová pásma, takže localtime() vrátí stejný čas jako gmtime() , např.ample.

Dokumenty / zdroje

MICROCHIP XC8 C Compiler verze 2.45 Poznámky k vydání pro AVR MCU [pdfPokyny
AVR MCU, XC8 C, XC8 C Compiler Verze 2.45 Poznámky k verzi pro AVR MCU, Compiler Version 2.45 Release Notes pro AVR MCU, Verze 2.45 Release Notes for AVR MCU, Release Notes for AVR MCU, Notes for AVR MCU, AVR MCU

Reference

Zanechte komentář

Vaše emailová adresa nebude zveřejněna. Povinná pole jsou označena *