MPLAB® XC8 C fordító, 2.41-es verzió, kibocsátási megjegyzések az AVR® MCU-hoz
Használati útmutató
MPLAB XC8 C fordítófejlesztő szoftver
EZ A DOKUMENTUM FONTOS INFORMÁCIÓKAT TARTALMAZ AZ MPLAB XC8 C FORDÍTÓVAL KAPCSOLATBAN, HA A MIKROCHIP AVR ESZKÖZÖK CÉLZÉSE ESETÉN.
KÉRJÜK, OLVASSA EL EZT A SZOFTVER FUTATÁSA ELŐTT. HA 8 BITES KÉP ESZKÖZÖKHEZ HASZNÁLJA A FORDÍTÓT, HA 8 BITES KÉP ESZKÖZÖKHEZ HASZNÁLJA, HASZNÁLJA A FORMÁLÓT.
Felettview
1.1. Bevezetés
A Microchip MPLAB® XC8 C fordító ezen kiadása számos új funkciót és hibajavítást tartalmaz.
1.2. Építési dátum
A fordítóverzió hivatalos felépítési dátuma 8. február 2023.
1.3. Előző verzió
Az előző MPLAB XC8 C fordítóverzió 2.40-es verziója 3. július 2022-án készült.
1.4. Funkcionális biztonsági kézikönyv
A funkcionális biztonsági licenc megvásárlásakor a dokumentációs csomagban megtalálható az MPLAB XC fordítók Funkcionális biztonsági kézikönyve.
1.5. Összetevők licencei és verziói
Az MPLAB XC8 C Compiler for AVR MCU-k eszközeit a GNU General Public License (GPL) alatt írják és terjesztik, ami azt jelenti, hogy a forráskódja szabadon terjeszthető és elérhető a nyilvánosság számára.
A GNU GPL alá tartozó eszközök forráskódja külön letölthető a Microchip-től webwebhely. A GNU GPL-t a telepítési licenc.txt avr/doc könyvtárának alkönyvtárában található fájlban olvashatja. A GPL alapelveinek általános ismertetése itt található.
A fejlécfájlokhoz, linker szkriptekhez és futásidejű könyvtárakhoz biztosított támogatási kód védett kód, és nem vonatkozik rá a GPL.
Ez a fordító a GCC 5.4.0-s verziója, a binutils 2.26-os verziója, és az avr-libc 2.0.0-s verzióját használja.
1.6. Rendszerkövetelmények
Az MPLAB XC8 C fordító és az általa használt licencszoftver számos operációs rendszerhez elérhető, beleértve a következők 64 bites verzióit: Microsoft® Windows® 10 professzionális kiadásai; Ubuntu® 18.04; és macOS® 10.15.5. A Windows bináris fájljai kóddal aláírva. A macOS bináris fájljai kóddal aláírva és közjegyzővel hitelesítettek. Az MPLAB XC Network License Server számos 64 bites operációs rendszerhez elérhető, beleértve a Microsoft Windows 10 és újabb verzióit; Ubuntu 18.04 és újabb; vagy macOS 10.15 és újabb. A kiszolgáló számos más operációs rendszeren is futhat, beleértve a Windows Servert, a Linux disztribúciókat, mint például az Oracle® Enterprise Linux® és a Red Hate Enterprise Linux, valamint a támogatott operációs rendszerek régebbi verzióit. Az MPLAB XC Network License Server azonban nincs tesztelve ezeken az operációs rendszereken. Az MPLAB XC hálózati licenckiszolgáló futtatható a támogatott operációs rendszer virtuális gépein a hálózati licencekhez tartozó virtuálisgép-licenc (SW006021-VM) használatával. Az MPLAB XC Network Server összes 32 bites verziója a 3.00-s verziótól kezdve megszűnik.
Támogatott eszközök
Ez a fordító támogatja az összes elérhető 8 bites AVR MCU eszközt a kiadás időpontjában. Lásd (a fordító könyvtárában) az összes támogatott eszköz listáját. Ezek a fájlok is listázva vannak
avr_chipinfo.html doc konfigurációs bit beállításai az egyes eszközökhöz.
1.7. Kiadások és licencfrissítések
Az MPLAB XC8 fordító aktiválható licencelt (PRO) vagy licenc nélküli (ingyenes) termékként. A fordító licenceléséhez aktiváló kulcsot kell vásárolnia. A licenc magasabb szintű optimalizálást tesz lehetővé, mint az ingyenes termék. Egy licenc nélküli fordítóprogram korlátlan ideig üzemeltethető licenc nélkül. Az MPLAB XC8 Functional Safety fordítót a Microchiptől vásárolt funkcionális biztonsági licenccel kell aktiválni. A fordítóprogram nem működik ezen engedély nélkül. Az aktiválás után bármelyik optimalizálási szintet kiválaszthatja, és használhatja a fordító összes funkcióját. Az MPLAB XC Functional Safety Compiler ezen kiadása támogatja a hálózati szerver licencet.
Tekintse meg az MPLAB XC C fordítók telepítése és licencelése (DS50002059) című dokumentumot a licenctípusokkal és a licenccel rendelkező fordító telepítésével kapcsolatos információkért.
1.8. Telepítés és aktiválás
Tekintse meg az Áttelepítési problémák és korlátozások című részt is, ahol fontos információk találhatók a fordítóhoz mellékelt legújabb licenckezelővel kapcsolatban.
Ha MPLAB IDE-t használ, az eszköz telepítése előtt feltétlenül telepítse a legújabb MPLAB X IDE 5.0-s vagy újabb verzióját. A fordító telepítése előtt lépjen ki az IDE-ből. Futtassa a (Windows), (Linux) vagy (macOS) .exe .run .app fordító telepítő alkalmazást, és kövesse a képernyőn megjelenő utasításokat. XC8-1.00.11403-windows.exe Az alapértelmezett telepítési könyvtár ajánlott. Ha Linuxot használ, akkor a fordítót terminál használatával és root fiókból kell telepítenie. Telepítés rendszergazdai jogosultságokkal rendelkező macOS-fiókkal.
Az aktiválás most a telepítéstől külön történik. További információkért tekintse meg a License Manager for MPLAB® XC C Compilers (DS52059) dokumentumot.
Ha úgy dönt, hogy a fordítóprogramot a kiértékelési licenc alatt futtatja, akkor a fordítás során figyelmeztetést kap, ha 14 napon belül van az értékelési időszak végétől. Ugyanezt a figyelmeztetést adjuk ki, ha HPA-előfizetése lejártát követő 14 napon belül van.
Az XC Network License Server egy külön telepítő, és nem szerepel az egyfelhasználós fordító telepítőjében.
Az XC License Manager mostantól támogatja a lebegő hálózati licencek barangolását. Ez a mobilfelhasználókat célzó funkció lehetővé teszi, hogy egy lebegő licenc rövid időre kilépjen a hálózatból. Ezzel a funkcióval lekapcsolhatja a hálózatot, és továbbra is használhatja az MPLAB XC fordítót. A funkcióval kapcsolatos további információkért tekintse meg az XCLM-telepítés doc mappáját.
Az MPLAB X IDE tartalmaz egy Licencek ablakot (Eszközök > Licencek) a barangolás vizuális kezeléséhez.
1.8.1. Telepítési problémák megoldása
Ha nehézségeket tapasztal a fordítóprogram telepítése során bármelyik Windows operációs rendszer alatt, próbálkozzon a következő javaslatokkal.
Futtassa a telepítést rendszergazdaként.
A telepítő alkalmazás engedélyeit állítsa „Teljes vezérlés” értékre. (Kattintson a jobb gombbal a fájlra, válassza a Tulajdonságok, a Biztonság fület, válassza ki a felhasználót, szerkesztés.)
Állítsa be az ideiglenes mappa engedélyeit „Teljes felügyelet” értékre.
A temp mappa helyének meghatározásához írja be a %temp% parancsot a Futtatás parancsba (Windows logó + R billentyű).
Ezzel megnyílik egy fájlkezelő párbeszédpanel, amely megmutatja az adott könyvtárat, és lehetővé teszi a mappa elérési útjának meghatározását.
1.9. Fordító dokumentáció
A fordító felhasználói útmutatói a képernyőképen látható módon a böngészőben megnyíló HTML-oldalról nyithatók meg, amikor az MPLAB X IDE irányítópultján a kék súgó gombra kattint.
Ha 8 bites AVR célokra épít, az MPLAB® XC8 C fordító felhasználói kézikönyve az AVR® MCU-hoz információkat tartalmaz azokról a fordító opciókról és szolgáltatásokról, amelyek erre az architektúrára vonatkoznak.

1.10. Ügyfélszolgálat
A Microchip szívesen fogadja a hibajelentéseket, javaslatokat vagy megjegyzéseket a fordítóverzióval kapcsolatban. Kérjük, irányítsa a hibajelentéseket vagy a funkciókra vonatkozó kéréseket a támogatási rendszeren keresztül.
Dokumentációs frissítések
Az MPLAB XC8 dokumentáció online és legfrissebb verzióiért látogassa meg a Microchip online műszaki dokumentációját. webwebhely. Új vagy frissített AVR-dokumentáció ebben a kiadásban:
- MPLAB® XC8 C fordító felhasználói kézikönyv az AVR® MCU-hoz (G változat)
- AVR® GNU Toolchain to MPLAB® XC8 Migration Guide (A változat)
- Hexmate használati útmutató (B változat)
Az AVR® GNU Toolchain to MPLAB® XC8 Migration Guide leírja azokat a változtatásokat a forráskódban és a build opciókban, amelyekre akkor lehet szükség, ha egy C-alapú projektet az AVR 8 bites GNU Toolchain-ről a Microchip MPLAB XC8 C fordítóra szeretne migrálni. A Microchip Unified Standard Library Reference Guide leírja a Microchip Unified Standard Library által meghatározott funkciók viselkedését és interfészét, valamint a könyvtártípusok és makrók tervezett használatát. Ezen információk egy részét korábban az MPLAB® XC8 C Compiler felhasználói kézikönyve tartalmazta az AVR® MCU-hoz. Az eszközspecifikus könyvtári információkat továbbra is tartalmazza ez a fordítói útmutató.
Ha még csak most kezdi használni a 8 bites eszközöket és az MPLAB XC8 C fordítót, az MPLAB® XC8 Felhasználói kézikönyv beágyazott mérnököknek – AVR® MCU-k (DS50003108) információkat tartalmaz a projektek MPLAB X IDE-ben történő beállításáról és a kód írásáról. az első MPLAB XC8 C projekt. Ezt az útmutatót most a fordítóval együtt terjesztik.
A Hexmate Felhasználói kézikönyv azoknak készült, akik a Hexmate-et önálló alkalmazásként futtatják.
Újdonságok
A következő új AVR-cél funkciók, amelyeket a fordító már támogat. Az alcímekben található verziószám az első olyan fordítóverziót jelzi, amely támogatja a következő funkciókat.
3.1. 2.41. verzió
Bootrow támogatás (XC8-3053) A fordító a HEX fájlba helyezi a 0x860000 at.bootrow cím előtaggal rendelkező szakaszok tartalmát. Ezek a szakaszok a BOOTROW memóriához használatosak, amely kulcsok és egyéb biztonságos információk tárolására szolgál, amelyekhez csak a rendszerbetöltőknek kell hozzáférniük.
Redundáns visszatérés kiküszöbölése (XC8-3048) A fordító most egy farokugrással megszünteti a redundáns utasításokat a ret függvényekben, ha egyéni linker szkripteket használnak. Ez a korábban elvégzett optimalizáláshoz hasonló, de most minden árva szakaszon végrehajtódik, még akkor is, ha egyéni linker szkriptet használnak, és nincs játékban a legjobban illeszkedő kiosztási séma. Időtípus módosítása (XC8-2982, 2932) A C99 szabványos könyvtártípus time_t-ről típusra módosult, ami kódméret-javítást ad néhány időhöz kapcsolódó hosszú hosszú függvényben, mint pl. unsigned long mktime()
Új nop (XC8-2946, 2945) A makró hozzáadva. Ez a makró beszúr egy no-NOP() nop műveleti utasítás a kimenetbe.
Frissítés XCLM-re (XC8-2944) A fordítóhoz használt licenckezelő frissítve lett, és most már jobban reagál a fordító licencadatainak ellenőrzésére.
Trampolined hívások (XC8-2760) A fordító most végre tudja hajtani a hosszú formátumú hívási utasítások rövidebb relatív hívásokkal való helyettesítését, ha az utasítások relatív formái általában a céljuk hatókörén kívül esnek. Ebben a helyzetben a fordító megpróbálja lecserélni utasításokkal az rccal meghívására egy olyan utasítást, amelyampoline' végrehajtás a kívánt címre, plample: jmp
hívja a tramp_foo ;foo-nak hívták
…
hívja a tramp_foo
…
tramp_foo:
jmp foo
Ezt az optimalizálást a hasonló programfolyamat-optimalizálással együtt a -mrelax opció vezérli.
3.2. 2.40. verzió
Új eszköztámogatás A támogatás már elérhető a következő AVR alkatrészekhez: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, A64 és AVR32EA64.
Továbbfejlesztett eljárási absztrakció A procedural abstraction (PA) optimalizáló eszközt továbbfejlesztették, így a függvényhívási utasítást (/ ) tartalmazó kód körvonalazható. Ez csak akkor történik meg, ha a verem nem argumentumokat ad át a függvénynek, és nem is kap visszatérési értéket a függvénytől. A verem változó argumentumlistával rendelkező függvény meghívásakor vagy olyan függvény meghívásakor használatos, amelyik több argumentumot vesz fel, mint ahány regiszter van erre a célra. Ez a funkció letiltható az opcióval, vagy a procedurális absztrakció teljesen letiltható egy objektumfájlnál vagy függvénynél a- és a gombokkal, vagy az attribútum (specifikátor) szelektív függvényekkel történő használatával.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa Kódlefedettség makró A fordító most meghatározza a makrót, ha egy érvényes opció a __nopa __CODECOV -mcodecov megadva.
Memóriafoglalási opció Az illesztőprogram mostantól elfogadja az xc8-cc -mreserve=space@start:end opciót az AVR-célok építésekor. Ez az opció lefoglalja a megadott memóriatartományt az adat- vagy programmemória területén, megakadályozva, hogy a linker kódot vagy objektumokat töltsön be ezen a területen. Intelligensebb intelligens IO Számos fejlesztés történt a Smart IO funkciókon, beleértve a printf alapkód általános módosításait, a %n konverziós specifikáció független változatként való kezelését, a vararg pop rutinok igény szerinti összekapcsolását, rövidebb adattípusok használatát, ahol lehetséges. Az IO függvény argumentumai és a közös kód faktorálása a mezőszélességben és a precíziós kezelésben. Ez jelentős kód- és adatmegtakarítást eredményezhet, valamint megnövelheti az IO végrehajtási sebességét.
3.3. 2.39-es verzió (Funkcionális biztonsági kiadás)
Hálózati kiszolgáló licence Az MPLAB XC8 Functional Safety Compiler ezen kiadása támogatja a hálózati kiszolgáló licencet.
3.4. 2.36. verzió
Egyik sem.
3.5. 2.35. verzió
Új eszköztámogatás A támogatás a következő AVR alkatrészekhez érhető el: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 és AVR64DD32.
Továbbfejlesztett kontextusváltás Az új -mcall-isr-prologues opció megváltoztatja, hogy a megszakítási függvények hogyan mentik a regisztereket a belépéskor, és hogyan állnak vissza ezek a regiszterek, amikor a megszakítási rutin véget ér. Hasonlóan működik, mint az -mcall-prologues opció, de csak a megszakítási függvényekre (ISR) van hatással.
Még továbbfejlesztett környezetváltás Az új -mgas-isr-prologues opció vezérli a kis megszakítási szolgáltatásrutinokhoz generált környezetkapcsoló kódot. Ha engedélyezve van, ez a funkció az összeszerelővel ellenőrzi az ISR-t a regiszterhasználat szempontjából, és csak szükség esetén menti el ezeket a használt regisztereket.
Konfigurálható flash-leképezés Az AVR DA és az AVR DB család egyes eszközei SFR-rel (pl. FLMAP) rendelkeznek, amely meghatározza, hogy a programmemória melyik 32 ezer szakasza kerüljön leképezésre az adatmemóriába. Az új – mconst-data-in-config-mapped-progmem opció használható arra, hogy a linker az összes const-minősítésű adatot egy 32k-s szakaszba helyezze, és automatikusan inicializálja a megfelelő SFR-regisztert, így biztosítva, hogy ezek az adatok az adatmemóriába kerüljenek. térben, ahol hatékonyabban lehet hozzáférni.
Microchip Unified Standard Libraries Minden MPLAB XC fordító megoszt egy Microchip Unified Standard Library könyvtárat, amely már elérhető az MPLAB XC8 jelen kiadásával. Az MPLA# XC8 C fordító felhasználói kézikönyve az AVO MCU-hoz már nem tartalmazza ezeknek a szabványos funkcióknak a dokumentációját. Ezek az információk most a Microchip Unified Standard Library Reference Guide-ban találhatók. Vegye figyelembe, hogy néhány, az avr-libc által korábban meghatározott funkció már nem érhető el. (Lásd a Lila funkciót.)
Smart I0 Az új egyesített könyvtárak részeként a printf és scanf családok I0 függvényei mostantól egyedileg generálódnak az egyes buildeken, attól függően, hogy ezeket a funkciókat hogyan használják a programban. Ez jelentősen csökkentheti a program által felhasznált erőforrásokat.
Intelligens ICI-segítő opció Intelligens I0-függvények (például print f () vagy scanf ()) hívásainak elemzésekor a fordító nem mindig tudja meghatározni a formátum karakterláncból, vagy az argumentumokból következtetni a hívás által igényelt konverziós specifikációkra. Korábban a fordító mindig nem tett feltételezéseket, és gondoskodott arról, hogy 10 teljesen működőképes függvény csatolva legyen a végső programképhez. Egy új – msmart-io-format=fmt opció került hozzáadásra, hogy a fordító ehelyett a felhasználótól tájékozódhasson az intelligens I0 függvények által használt konverziós specifikációkról, amelyek használata nem egyértelmű, így elkerülhető a túl hosszú 10 rutin összekapcsolása. (További részletekért lásd a smart-io-formátum opciót.)
Egyéni szakaszok elhelyezése Korábban a -W1, –section-start opció csak akkor helyezte el a megadott szakaszt a kívánt címre, amikor a linker parancsfájl azonos nevű kimeneti szakaszt definiált. Ha ez nem így történt, a szakaszt a linker által kiválasztott címre helyezték el, és a lehetőséget lényegében figyelmen kívül hagyták. Mostantól ez az opció minden egyéni szakaszra érvényes, még akkor is, ha a linker szkript nem határozza meg a szakaszt. Ne feledje azonban, hogy a szabványos szakaszok esetében, mint a . szöveg, . bss vagy . adatok, a legjobban illeszkedő allokátor továbbra is teljes mértékben irányítja az elhelyezésüket, és az opciónak nincs hatása. Használja a -ton, -Tsection=addr beállítást a felhasználói kézikönyvben leírtak szerint.
3.6. 2.32. verzió
Veremvezetés A PRO fordítólicenccel elérhető, a fordító veremvezető funkciója felhasználható a program által használt verem maximális mélységének becslésére. Összeállítja és elemzi egy program hívási grafikonját, meghatározza az egyes függvények veremhasználatát, és jelentést készít, amelyből következtetni lehet a program által használt veremek mélységére. Ez a szolgáltatás az -mchp-stack-usage parancssori kapcsolóval engedélyezhető. A végrehajtás után kinyomtatja a veremhasználat összegzését. Részletes veremjelentés a térképen érhető el file, mely a megszokott módon igényelhető.
Új eszköztámogatás Támogatás érhető el a következő AVR alkatrészekhez: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, AVR32. Visszahúzott eszköztámogatás A támogatás már nem érhető el a következő AVR alkatrészekhez: AVR48DA16, AVR28DA16 és AVR32DA16.
3.7. 2.31. verzió
Egyik sem.
3.8. 2.30. verzió
Új lehetőség az adatok inicializálásának megakadályozására Az új -mno-data-init illesztőprogram opció megakadályozza az adatok inicializálását és a bss szakaszok törlését. Úgy működik, hogy elnyomja a do másolási adatok kimenetét, és az összeállításban a tiszta bss szimbólumokat files, ami viszont megakadályozza, hogy a linker bevonja ezeket a rutinokat.
Továbbfejlesztett optimalizálás Számos optimalizálási fejlesztést hajtottak végre, beleértve a redundáns visszatérési utasítások eltávolítását, a bit-ha-kihagyás utasítást követő ugrások eltávolítását, valamint a jobb eljárási absztrakciót és a folyamat iterálhatóságát. További opciók állnak rendelkezésre ezen optimalizálás némelyikének vezérlésére, különösen az -f section-anchors, amely lehetővé teszi a statikus objektumok elérését egyetlen szimbólumhoz képest; -mpa-iterations=n, amely lehetővé teszi az eljárási absztrakciós iterációk számának megváltoztatását az alapértelmezett 2-ről; és -mpa-callcost-shortcall, amely agresszívebb procedurális absztrakciót hajt végre, abban a reményben, hogy a linker ellazíthatja a hosszú hívásokat. Ez az utolsó lehetőség növelheti a kód méretét, ha a mögöttes feltételezések nem valósulnak meg.
Új eszköztámogatás A támogatás a következő AVR alkatrészekhez érhető el: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DA28, A128DB32, AVR128 VR48DB128. Visszahúzott eszköztámogatás A támogatás már nem érhető el a következő AVR-alkatrészekhez: ATA64, ATA5272, ATA5790N, ATA5790, ATA5791, ATA5795, ATA6285, ATA6286C, ATA6612C, ATA6613Q, ATA6614.
3.9. 2.29-es verzió (Funkcionális biztonsági kiadás)
Fejléc file beépített fordítóprogramokhoz Annak biztosítására, hogy a fordító megfeleljen a nyelvi specifikációknak, például a MISRA-nak, a fejléc file, amelyet automatikusan tartalmaz , Frissítve lett. Ez a fejléc tartalmazza az összes beépített függvény prototípusát, mint például a builtin_avr_nop ( ) és a beépített avr delay_cycles () . Előfordulhat, hogy egyes beépített elemek nem MISRA-kompatibilisek; ezek elhagyhatók, ha hozzáadjuk a defineXCSTRICT_MISRA-t a fordító parancssorához. A beépített modulokat és deklarációikat frissítettük, hogy fix szélességű típusokat használjanak.
3.10. 2.20. verzió
Új eszköztámogatás A támogatás a következő AVR-alkatrészekhez érhető el: ATTINY1624, ATTINY1626 és ATTINY1627.
Jobban illeszkedő allokáció A fordítóprogramban a legjobban illeszkedő allokátor (BFA) továbbfejlesztésre került, így a szakaszok olyan sorrendben kerülnek kiosztásra, amely lehetővé teszi a jobb optimalizálást. A BFA mostantól támogatja az elnevezett címtereket, és jobban kezeli az adatok inicializálását.
Továbbfejlesztett eljárási absztrakció Az eljárási absztrakció optimalizálása most több kódszekvencián történik. Azokat a korábbi helyzeteket, amikor ez az optimalizálás növelhette a kódméretet, úgy kezelték, hogy az optimalizáló kódot tudatta a linker szemétgyűjtési folyamatával.
Az AVR Assembler hiánya Az AVR Assembler már nem része ennek a disztribúciónak.
3.11. 2.19-es verzió (Funkcionális biztonsági kiadás)
Egyik sem.
3.12. 2.10. verzió
Kódlefedettség Ez a kiadás tartalmaz egy kódlefedettségi szolgáltatást, amely megkönnyíti a projekt forráskódjának végrehajtásának mértékének elemzését. Használja a -mcodecov=ram kapcsolót az engedélyezéséhez. A program végrehajtása után a hardveren a kódlefedettség információi összegyűjtésre kerülnek az eszközben, és ezt egy kódlefedettségi beépülő modulon keresztül átviheti és megjelenítheti az MPLAB X IDE-re. Erről a bővítményről az IDE dokumentációjában találhat információkat. A #pragma nocodecov felhasználható a további funkciók kizárására a lefedettségi elemzésből. Ideális esetben a pragmát a szöveg elejére kell hozzáadni file hogy kizárja azt az egészet file a fedezetelemzésből. Alternatív megoldásként az _attribute_ ( (nocodecov) ) használható egy adott függvény kizárására a lefedettség elemzéséből.
Eszköz leírása files Egy új készülék file avr_chipinfo néven. html a fordítói terjesztés docs könyvtárában található. Ez file felsorolja a fordító által támogatott összes eszközt. Kattintson egy eszköz nevére, és megnyílik egy oldal, amelyen látható az adott eszköz összes megengedett konfigurációs bitbeállítása/értéke, pl.amples. Eljárási absztrakció
Az eljárási absztrakciós optimalizálások, amelyek az összeállítási kód általános blokkjait a blokk kibontott példányának hívásaival helyettesítik, hozzáadásra kerültek a fordítóhoz. Ezeket egy külön alkalmazás hajtja végre, amelyet a fordító automatikusan meghív a 2., 3. vagy s szintű optimalizálás kiválasztásakor. Ezek az optimalizálások csökkentik a kód méretét, de csökkenthetik a végrehajtási sebességet és a kód hibakereshetőségét. Az eljárási absztrakció letiltható magasabb optimalizálási szinteken a -mno-pa kapcsolóval, vagy engedélyezhető alacsonyabb optimalizálási szinteken (a licenctől függően) a -mpa használatával. Egy objektumnál letiltható file az -mno-pa-on- használatávalfile=filenév, vagy letiltható egy függvénynél az -mno-pa-on-function=function paranccsal. A forráskódon belül a procedurális absztrakció letiltható egy függvénynél az attribútum ( (nopa) ) használatával a függvény definíciójával, vagy a nopa használatával, amely attribútummá ( (nopa, noinline) ) bővül, és így megakadályozza a függvény beillesztését. és ott van a beépített kód absztrakciója.
Lock bit támogatás a pragmában A #pragma config most már használható az AVR lock bitek, valamint a többi konfigurációs bit megadására. Ellenőrizze az avr_chipinfo fájlt. html file (fent említettük) az ehhez a gyakorlathoz használandó beállítás/érték párokhoz. Új eszköztámogatás A támogatás a következő alkatrészekhez érhető el: AVR28DAl28, AVR64DAl28, AVR32DA 128 és AVR48DA 128.
3.13. 2.05. verzió
Több bit a pénzért A fordító és a licenckezelő macOS-verziója immár 64 bites alkalmazás. Ez biztosítja, hogy a fordítóprogram figyelmeztetés nélkül települjön és fusson a macOS legújabb verzióin.
Const objektumok a programmemóriában A fordító most már elhelyezheti a const minősítésű objektumokat a program Flash memóriájában, nem pedig a RAM-ban. A fordító úgy módosult, hogy a cons t-minősítésű globális adatok a program flash memóriájában tárolódnak, és ezek az adatok közvetlenül és közvetve elérhetők legyenek a megfelelő programmemória utasítások segítségével. Ez az új funkció alapértelmezés szerint engedélyezve van, de letiltható a -mno-const-data-in-progmem kapcsolóval. Avrxmega3 és avrtiny architektúrák esetén ez a szolgáltatás nem szükséges, és mindig le van tiltva, mivel a programmemória ezeknek az eszközöknek az adatcímterébe van leképezve.
Az ingyenes licenc nélküli (ingyenes) változatai ennek a fordítónak most már lehetővé teszik az optimalizálást a 2. szintig bezárólag. Ez hasonló, bár nem azonos kimenetet tesz lehetővé, mint amilyen korábban a szabványos licenc használatával volt lehetséges.
Üdvözöljük AVRASM2 Az AVRASM2 összeszerelő 8 bites eszközökhöz most már benne van az XC8 fordító telepítőjében. Ezt az assemblert nem használja az XC8 fordító, de elérhető a kézzel írott összeállítási forráson alapuló projektekhez.
Új eszköztámogatás A támogatás a következő alkatrészekhez érhető el: ATMEGA1608, ATMEGA1609, ATMEGA808 és ATMEGA809.
3.14. 2.00. verzió
Legfelső szintű illesztőprogram Egy új, xc8-cc nevű illesztőprogram már az előző avr-gcc illesztőprogram és az xc8 meghajtó felett helyezkedik el, és a céleszköz kiválasztása alapján hívhatja a megfelelő fordítót. Ez az illesztőprogram elfogadja a GCC-stílusú opciókat, amelyeket vagy lefordítanak a végrehajtott fordítóhoz, vagy átadják a fordítónak. Ez az illesztőprogram lehetővé teszi, hogy hasonló, hasonló szemantikával rendelkező opciókat használjunk bármilyen AVR vagy PIC célponthoz, ezért ez az ajánlott mód a fordító meghívására. Ha szükséges, a régi avr-gcc illesztőprogram közvetlenül hívható a korábbi fordítói verziókban elfogadott régi stílusú opciókkal.
Common C Interface Ez a fordító most már megfelel az MPLAB Common C Interface-nek, lehetővé téve a forráskód könnyebb áthelyezését az összes MPLAB XC fordítón. A -mext=cci opció kéri ezt a funkciót, lehetővé téve az alternatív szintaxist számos nyelvi kiterjesztéshez.
Új könyvtáros-illesztőprogram Az előző PIC-könyvtáros és az AVR-avr-ar könyvtáros fölé új könyvtáros-illesztőprogram került. Ez az illesztőprogram elfogadja a GCC-archiver-stílusú opciókat, amelyeket vagy lefordítanak, vagy átadnak a végrehajtandó könyvtárosnak. Az új illesztőprogram lehetővé teszi, hogy hasonló, hasonló szemantikával rendelkező beállításokat használjunk bármilyen PIC vagy AVR könyvtár létrehozásához vagy kezeléséhez. file és így a könyvtáros megidézésének ajánlott módja. Ha az örökölt projektekhez szükséges, az előző könyvtárat közvetlenül meg lehet hívni a korábbi fordítói verziókban elfogadott régi típusú beállításokkal.
Migrációs problémák
Az alábbiakban felsoroljuk azokat a funkciókat, amelyeket a fordító most másképp kezel. Ezek a változtatások szükségessé tehetik a forráskód módosítását, ha a kódot erre a fordítóverzióra viszi át. Az alcímekben található verziószám az első fordítási verziót jelöli, amely támogatja a következő változtatásokat.
4.1. 2.41. verzió
A pontatlan fma függvények eltávolítva (XC8-2913) A C99 szabványos könyvtár fma 0 -család függvényei ( ) nem számolt ki végtelen pontossággal szorzást egyetlen kerekítéshez, hanem minden egyes műveletnél kerekítési hibákat halmozott fel. Ezeket a funkciókat eltávolítottuk a mellékelt könyvtárból.
4.2. 2.40. verzió
Egyik sem.
4.3. 2.39-es verzió (Funkcionális biztonsági kiadás)
Egyik sem.
4.4. 2.36-os verzió Nincs.
4.5. 2.35. verzió
Karakterlánc-bázisok kezelése (XC8-2420) A többi XC fordítóval való konzisztencia érdekében az XC8 string-to függvények, mint például az strtol () stb., többé nem próbálnak meg konvertálni egy bemeneti karakterláncot, ha a megadott alap nagyobb, mint 36 és ehelyett az errno értéket EINVAL-ra állítja. A C szabvány nem határozza meg a függvények viselkedését ezen alapérték túllépése esetén.
Nem megfelelő sebesség optimalizálás Az eljárási absztrakciós optimalizálás engedélyezve volt a 3. szintű optimalizálás (-03) kiválasztásakor. Ezek az optimalizálások csökkentik a kód méretét a kódsebesség rovására, ezért nem lett volna szabad végrehajtani. Az ezt az optimalizálási szintet használó projektek eltéréseket tapasztalhatnak a kódméretben és a végrehajtási sebességben, ha ezzel a kiadással készülnek.
Könyvtári funkciók Számos szabványos C könyvtári funkció kódja most a Microchip Unified Standard Library-jából származik, amely bizonyos körülmények között eltérő viselkedést mutathat, mint a korábbi avr-libc könyvtár. Plample, már nem szükséges linkelni az 1printf flt könyvtárban (-1printf_flt opció) a formázás bekapcsolásához I0 a lebegő formátumú specifikátorok támogatása. Az okos I0 A Microchip Unified Standard Library funkciói redundánssá teszik ezt a lehetőséget. Ezenkívül a _P utótagú rutinok használata string- és memóriafüggvényekhez (pl. strcpy_P ( ) stb.), amelyek a flash-ben a const karakterláncokon működnek, már nem szükségesek. A szabványos C rutinok (pl. strcpy ) megfelelően működnek az ilyen adatokkal, ha a const-data-in-program-memory szolgáltatás engedélyezve van.
4.6. 2.32. verzió
Egyik sem.
4.7. 2.31. verzió
Egyik sem.
4.8. 2.30. verzió
Egyik sem.
4.1. 2.29-es verzió (Funkcionális biztonsági kiadás)
Egyik sem.
4.2. 2.20. verzió
Módosult a DFP elrendezése A fordító most a DFP-k (Device Family Pack) által használt elrendezést feltételezi. Ez azt jelenti, hogy egy régebbi DFP esetleg nem működik ezzel a kiadással, és a régebbi fordítók nem fogják tudni használni a legújabb DFP-ket.
4.3. 2.19-es verzió (Funkcionális biztonsági kiadás)
Egyik sem.
4.4. 2.10. verzió
Egyik sem
4.5. 2.05. verzió
Const objektumok a programmemóriában Ne feledje, hogy az alapértelmezés szerint a const-minősítésű objektumok a programmemóriában helyezkednek el és érhetők el (a leírt színárnyalat szerint). Ez hatással lesz a projekt méretére és végrehajtási sebességére, de csökkenti a RAM-használatot. Ez a funkció szükség esetén letiltható a -mnoconst-data-in-progmem kapcsolóval.
4.6. 2.00. verzió
Konfigurációs biztosítékok Az eszköz konfigurációs biztosítékai most egy konfigurációs pragma segítségével programozhatók, amelyet beállítás-érték párok követnek a biztosíték állapotának meghatározásához, pl.
#pragma config WDTON = BEÁLLÍTÁS
#pragma config BODLEVEL = BODLEVEL_4V3
Abszolút objektumok és függvények Az objektumok és funkciók mostantól meghatározott címre helyezhetők a memóriában a CCI (cím) megadóval, pl.ample:
#beleértve
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
A specifikátor argumentumának a következőnek kell lennie konstans, amely azt a címet jelöli, amelyre az első bájt vagy utasítás kerül. A RAM-címeket 0x800000 eltolás jelzi. Engedélyezze a CCI-t a funkció használatához.
Új megszakítási függvény szintaxis A fordító most elfogadja a CCI _interrupt (num) specifikációt, jelezve, hogy a C függvények megszakításkezelők. A specifikátor egy megszakítási számot vesz fel, plample:
#beleértve
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Javított problémák
Az alábbiakban a fordítóprogramban elvégzett javításokat ismertetjük. Ezek kijavíthatják a generált kód hibáit, vagy megváltoztathatják a fordító működését a használati útmutató által tervezett vagy meghatározott módon. Az alcímekben található verziószám az első olyan fordítóverziót jelzi, amely a következő problémák javításait tartalmazza. A címben a zárójelben lévő címke(ek) a probléma azonosítását jelzik a nyomkövetési adatbázisban. Ezek hasznosak lehetnek, ha kapcsolatba kell lépnie az ügyfélszolgálattal.
Vegye figyelembe, hogy bizonyos eszközspecifikus problémákat az eszközhöz társított Device Family Pack (DFP) javít. Tekintse meg az MPLAB Pack Managert a DFP-ken végrehajtott módosításokról és a legújabb csomagok letöltéséről.
5.1. 2.41. verzió
Kulcsproblémák a Ventura (XC8-3088) hardverkulcsokon Előfordulhat, hogy a fordító licencéhez használt szöveget nem olvasták be megfelelően a macOS Ventura gazdagépeken, ami licencelési hibákat eredményezett. Az XCLM licenckezelő módosításai javítják ezt a problémát.
A memóriafoglalás helytelen jelzése (XC8-2925) A SIZE_MAX bájt (vagy ehhez közeli érték) memória lefoglalására tett kísérlet a szabványos könyvtár memóriakezelési funkcióival (malloc () et al) hibásan sikerült. Nem vette figyelembe, hogy a kért blokkon kívül további bájtokra volt szükség az egyszerű dinamikus memóriafoglalás megvalósításánál. Ilyen helyzetekben a NULL mutatót ad vissza, és az errno értéke ENOMEM.
A pontatlan fma-funkciók eltávolítva (XC8-2913) A C99 szabványos könyvtár fma ( ) -család függvényei ( ) nem számolt ki végtelen pontossággal szorzást egyetlen kerekítéshez, hanem minden egyes műveletnél kerekítési hibákat halmozott fel. Ezeket a funkciókat eltávolítottuk a mellékelt könyvtárból.
A karakterlánc-konverzió rossz kezelése (XC8-2921, XC8-2652) Amikor az strtod Cr általi konverzióhoz használt „tárgysorozat” lebegőpontos számot tartalmazott exponenciális formátumban, és az e/E karakter után egy váratlan karakter volt, akkor az endptr megadásakor egy címet rendeltek hozzá, az e/E utáni karakterre mutatott, míg magára az e/E karakterre kellett volna mutatnia, mivel az nem lett konvertálva. Plample, strtod ("100exx", &ep) 100.00-at kell visszaadnia, és be kell állítania az ep-t úgy, hogy a karakterlánc "exx" részére mutasson, míg a függvény a megfelelő értéket adta vissza, de az ep értéket úgy állította be, hogy a karakterlánc "xx" részére mutasson. .
5.2. 2.40. verzió
Túl laza (XCS-2876) A -mrelax opció használatakor a fordító nem osztott ki egyes szakaszokat, ami kevésbé optimális kódméretet eredményezett. Ez történhetett olyan kóddal, amely az új MUSL könyvtárakat használta, vagy gyenge szimbólumokkal.
A leképezési funkció nincs letiltva a figyelmeztetés szerint (XC8-2875) A const-data-in-config-mappedprogmem szolgáltatás a const-data-in-progmem szolgáltatás engedélyezésétől függ. Ha a const-data-inconfig-mapped-progmem szolgáltatás kifejezetten engedélyezve volt az opció használatával, és a const-data-inprogmem szolgáltatás le van tiltva, akkor a linklépés meghiúsult, annak ellenére, hogy figyelmeztető üzenetet kapott, amely szerint a const-data-in-con fig- A mapped-progmem funkció automatikusan le lett tiltva, ami nem volt teljesen helyes. A const-data-in-config-mapped-progmem szolgáltatás ebben a helyzetben teljesen le van tiltva.
A DFP módosítja az NVMCTRL megfelelő elérését (XC8-2848) Az AVR64EA eszközök által használt futásidejű indítási kód nem vette figyelembe, hogy az NVMCTRL regiszter a Configuration Change Protection (CCP) alatt volt, és nem tudta beállítani az I0 SFR-t a const-data-in-configmapped-progmem által használt oldalra. fordító funkció. Az AVR-Ex_DFP 2.2.55-ös verziójában végrehajtott változtatások lehetővé teszik, hogy a futásidejű indítókód helyesen írjon ebbe a regiszterbe.
Elkerülendő DFP-módosítások flash-leképezés (XC8-2847) Az AVR128DA28/32/48/64 Silicon Errata (D580000882) dokumentumban jelentett flash-leképező eszközzel kapcsolatos probléma megoldása megtörtént. A const-data-in-config-mapped-progmem fordító funkció alapértelmezés szerint nem kerül alkalmazásra az érintett eszközökön, és ez a változás az AVR-Dx_DFP 2.2.160-as verziójában jelenik meg.
Összeépítési hiba sinhf vagy coshf esetén (XC8-2834) A sinhf () vagy coshf () függvénykönyvtári függvények használatára tett kísérletek hivatkozási hibát eredményeztek, ami egy meghatározatlan hivatkozást írt le. A hivatkozott hiányzó függvény most bekerült a fordítói disztribúcióba.
Összeállítási hibák a nopa segítségével (XC,8-2833) A nopa attribútum használata egy olyan függvénnyel, amelynek az asm ( ) segítségével az assembler nevét adták meg, hibaüzeneteket váltott ki az assemblertől. Ez a kombináció nem lehetséges.
Variadic függvényhiba mutató argumentumokkal (XC8-2755, XC8-2731) A változó számú argumentummal rendelkező függvények 24 bites (memx típusú) mutatók átadását várják a változó argumentumlistában, ha a const-data-in-progmem szolgáltatás engedélyezve van. Az adatmemóriára mutató argumentumok 16 bites objektumokként kerültek átadásra, ami kódhibát okozott a végső beolvasásukkor. Ha a constdata-in-progmem szolgáltatás engedélyezve van, az összes 16 bites mutató argumentum 24 bites mutatóvá alakul.
Az strtoxxx könyvtár funkciói hibásak (XC8-2620) Amikor a const-data-in-progmem szolgáltatás engedélyezve volt, az endptr paraméter az strtoxxx könyvtárfüggvényekben nem frissült megfelelően a programmemóriában nem lévő forráskarakterlánc-argumentumokhoz.
Figyelmeztetések érvénytelen öntvényekről (XC8-2612) A fordító most hibát ad ki, ha a const-in-progmem funkció engedélyezve van, és a string literál címe kifejezetten az adatcímtérbe kerül (eldobja a const minősítőt), pl.ample, (uint 8_t *) „Hello World!”. Figyelmeztetést jelent, ha a cím érvénytelen lehet, amikor egy const adatmutatót kifejezetten az adatcímtérbe öntöttek.
Inicializálatlan const objektumok elhelyezése (XC8-2408) Az inicializálatlan const és const illékony objektumok nem kerültek a programmemóriába olyan eszközökön, amelyek programmemóriájuk egészét vagy egy részét képezik le az adatcímtérbe. Ezeknél az eszközöknél az ilyen objektumok most a programmemóriában vannak elhelyezve, így működésük összhangban van más eszközökkel.
5.3. 2.39-es verzió (Funkcionális biztonsági kiadás)
Egyik sem.
5.4. 2.36. verzió
Hiba a késleltetéskor (XC8-2774) Az alapértelmezett szabad mód optimalizálásaiban végrehajtott kisebb változtatások megakadályozták az operanduskifejezések állandó összehajtását a késleltetett beépített függvényekhez, ami azt eredményezte, hogy a rendszer nem konstansként kezelte őket, és kiváltotta a hibát: a beépített avr delay_cycles fordítási időkonstansra számít.
5.5. 2.35. verzió
Folyamatos kiosztás a _at segítségével (XC8-2653) Több objektum egymás melletti kiosztása egy azonos nevű szakaszban a _at ( ) használatával nem működött megfelelően. Plample:
const char arr1[] __attribútum__((szakasz(.mysec”)))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribútum__((szakasz(.mysec”)))) = {0xEF, 0xFE};
Az arr2-t közvetlenül az arr1 után kellett volna elhelyezni.
Szakasz kezdőcímének megadása (XC8-2650) A -W1, –section-start opció csendben nem tudta elhelyezni a szakaszokat a kijelölt kezdési címen. Ezt a problémát minden egyéni elnevezésű szakasz esetében kijavítottuk; azonban nem fog működni egyetlen szabványos szakasznál sem, például . szöveg vagy . bss, amelyet -W1, -T opcióval kell elhelyezni.
A linker összeomlik pihenéskor (XC8-2647) Amikor az -mrelax optimalizálás engedélyezve volt, és voltak olyan kód- vagy adatszakaszok, amelyek nem fértek el a rendelkezésre álló memóriába, a linker összeomlott. Most ilyen körülmények között hibaüzenetek jelennek meg helyette.
Nincs visszaesés (XC8-2646) A – a nofallback opció nem volt megfelelően implementálva, és nem volt dokumentálva. Ez most kiválasztható annak biztosítására, hogy a fordító ne térjen vissza alacsonyabb optimalizálási beállításra, ha a fordító licenc nélküli, és ehelyett hibát ad ki.
Nem megfelelő sebességoptimalizálás (X03-2637) Az eljárási absztrakciós optimalizálás engedélyezve volt a 3. szintű optimalizálás (-03) kiválasztásakor. Ezek az optimalizálások csökkentik a kód méretét a kódsebesség rovására, ezért nem lett volna szabad végrehajtani.
Rossz EEPROM hozzáférés (XC8-2629) Az Az eeprom_read_block rutin nem működött megfelelően az Xmega-eszközökön, amikor az -mconst-data-in-progmem opció engedélyezve volt (ez az alapértelmezett állapot), ami az EEPROM-memória nem megfelelő olvasását eredményezte.
Érvénytelen memóriafoglalás (XC8-2593, XC8-2651) Amikor a -Ttext vagy -Tdata linker opció (plampA -vl illesztőprogram-beállítással áthaladva) meg van adva, a megfelelő szöveg/adatrégió eredete frissítve lett; azonban a végcím nem lett ennek megfelelően beállítva, ami oda vezethet, hogy a régió meghaladta a céleszköz memóriatartományát.
Összeomlás túlzottan hozzárendelt funkcióval (XC8-2580) A fordító összeomlott, ha egy függvényt egynél több megszakítás, jel vagy nmi attribútum használatával deklaráltak, pl. attribútum ( ( jel , interrupt ) ).
Érvénytelen ATtiny megszakítási kód (XC8-2465) Amikor az ATtiny-eszközökhöz készült, és az optimalizálás le volt tiltva (-00), a megszakítási függvények operandus tartományon kívüli összeszerelő üzeneteket válthattak ki.
Az opciók nem kerülnek átadásra (XC8-2452) Ha az opciót több, vesszővel elválasztott linker-beállítással használja, nem minden linker-beállítás került át a linkerbe.
Hiba a programmemória közvetett olvasásakor (X03-2450) Egyes esetekben a fordító belső hibát (felismerhetetlen insn) produkált, amikor két bájtos értéket olvasott ki egy mutatóból a programmemóriába.
5.6. 2.32. verzió
Második hozzáférés a a könyvtár meghibásodik (XC8-2381) Az xc8-ar Windows verziójának meghívása. Előfordulhat, hogy az .exe könyvtárarchívum másodszori elérése egy meglévő könyvtárarchívumhoz nem sikerült, és a nem sikerült átnevezni hibaüzenetet.
5.7. 2.31. verzió
Megmagyarázhatatlan fordító hibák (XC8-2367) Ha olyan Windows-platformokon fut, amelyeken a rendszer ideiglenes könyvtára egy „.” pontot tartalmazó elérési útra volt állítva. karaktert, előfordulhat, hogy a fordító nem tudta végrehajtani.
5.8. 2.30. verzió
Globális címkék rossz helyen a körvonalazás után (XC8-2299) Előfordulhat, hogy a kézzel írt összeállítási kód, amely globális címkéket helyez el az eljárási absztrakcióval kizárt összeállítási szekvenciákon belül, nem lett megfelelően áthelyezve.
Pihentető ütközés (XC8-2287) A -mrelax opció használata a linker összeomlását okozhatta, amikor a farokugrás relaxációs optimalizálása megpróbálta eltávolítani a nem egy szakasz végén lévő ret utasítást.
Összeomlás a címkék értékként történő optimalizálásakor (XC8-2282) A „Címkék mint értékek” GNU C nyelvi bővítményt használó kód az eljárási absztrakciós optimalizálás összeomlását okozhatta, és a VMA tartományok körvonalazott javítási hibája miatt.
Nem olyan állandó (XC8-2271) Az st rstr ( ) és más függvények prototípusai többé ne adja meg a nem szabványos const minősítőt a visszaadott karakterlánc-mutatókon, ha az -mconst-data-inprogmem szolgáltatás le van tiltva. Ne feledje, hogy az avrxmega3 és avrtiny eszközöknél ez a funkció véglegesen engedélyezve van.
Elveszett inicializálók (XC8-2269) Ha több mint egy fordítási egység egyik változója egy szakaszba került (a _section vagy _attribute_ ( (szakasz) ) használatával), és az első ilyen változó nulla volt inicializálva, vagy nem volt inicializálója, inicializálók más változókhoz ugyanabban a fordítási egységben, amelyeket elhelyeztek ugyanabban a szakaszban vesztek el.
5.1. 2.29-es verzió (Funkcionális biztonsági kiadás)
Egyik sem.
5.2. 2.20. verzió
Hiba a hosszú parancsoknál (XC8-1983) AVR célpont használatakor előfordulhat, hogy a fordító leállt a file nem található hiba, ha a parancssor rendkívül nagy volt, és speciális karaktereket tartalmazott, például idézőjeleket, fordított perjeleket stb.
Hozzá nem rendelt rodata szakasz (XC8-1920) Az AVR linker nem tudott memóriát hozzárendelni az egyéni rodata szakaszokhoz az avrxmega3 és avrtiny architektúrák építése során, ami memóriaátfedési hibákat okozhat
5.3. 2.19. verzió (Funkcionális biztonsági kiadás)
Egyik sem.
5.4. 2.10. verzió
Áthelyezési hibák (XC8-1891) A legjobban illeszkedő allokátor az volt, hogy memória "lyukakat" hagyott a szakaszok között a linker relaxációja után. A memória töredezettsége mellett ez megnövelte annak lehetőségét, hogy a pc-relatív ugrások vagy a hívások hatótávolságon kívülre kerülésével kapcsolatos linker-áthelyezési hibák forduljanak elő.
Relaxációval nem transzformált utasítások (XC8-1889) A linker-relaxáció nem következett be azoknál az ugrás- vagy hívóutasításoknál, amelyek céljai elérhetővé válnak, ha lazítanak.
Hiányzó funkcionalitás (XC8E-388) Számos definíció a , például a clock_div_t és a clock_prescale set () , nincsenek meghatározva az eszközökhöz, beleértve az ATmega324PB, ATmega328PB, ATtiny441 és ATtiny841 eszközöket.
Hiányzó makrók A _XC8_MODE_, _XC8_VERS ION, _XC és _XC8 előfeldolgozó makrókat a fordító nem definiálta automatikusan. Ezek már elérhetőek.
5.5. 2.05. verzió
Belső fordítói hiba (XC8-1822) Windows alatti építkezéskor előfordulhat, hogy belső fordítói hiba keletkezett a kód optimalizálásakor.
A RAM túlcsordulása nem észlelhető (XC8-1800, XC8-1796) A rendelkezésre álló RAM-ot meghaladó programokat a fordító bizonyos esetekben nem észlelte, ami futásidejű kódhibát eredményezett.
Kihagyott flash memória (XC8-1792) Az avrxmega3 és avrtiny eszközök esetében előfordulhat, hogy a flash memória egyes részeit programozatlanul hagyta az MPLAB X IDE.
A fő végrehajtásának sikertelensége (XC8-1788) Egyes helyzetekben, amikor a programban nem voltak globális változók definiálva, a futásidejű indítási kód nem lép ki, és a fő ( ) függvényt nem sikerült elérni.
Helytelen memóriainformáció (XC8-1787) Az avrxmega3 és avrtiny eszközök esetében az avr-size program arról számolt be, hogy az írásvédett adatok RAM-ot fogyasztanak programmemória helyett.
Helytelen programmemória olvasás (XC8-1783) Előfordulhat, hogy az adatcímtérbe leképezett programmemóriával rendelkező eszközökhöz fordított projektek, amelyek a PROGMEM makró/attribútum használatával definiálnak objektumokat, rossz címről olvashatták be ezeket az objektumokat.
Belső hiba az attribútumokkal (XC8-1773) Belső hiba történt, ha mutatóobjektumokat definiált a
_at () vagy attribútum() tokenek a mutató neve és a hivatkozott típus között, plample, char*
_at (0x800150) cp; Ilyen kód észlelése esetén figyelmeztetés jelenik meg.
A fő végrehajtásának sikertelensége (XC8-1780, XC8-1767, XC8-1754) Az EEPROM-változók használata vagy a biztosítékok definiálása a config pragma segítségével hibás adatinicializálást és/vagy leblokkolhatta a programvégrehajtást a futásidejű indítókódban, mielőtt elérte volna a fő ( ) .
Biztosítékhiba apró eszközöknél (XC8-1778, XC8-1742) Az attiny4/5/9/ 10/20/40 eszközök fejlécében helytelen biztosítékhossz volt megadva files amelyek linkerhibákhoz vezetnek, amikor olyan kódot próbálnak létrehozni, amely biztosítékokat definiált.
Szegmentáció hiba (XC8-1777) Egy időszakos szegmentálási hiba kijavításra került.
Az Assembler összeomlik (XC8-1761) Az avr-as assembler összeomolhatott, amikor a fordító Ubuntu 18 alatt futott.
Az objektumok nem törölve (XC8-1752) Előfordulhat, hogy az inicializálatlan statikus tárolási időtartam objektumokat nem törölte a futásidejű indítási kód.
Az ütköző eszközspecifikáció figyelmen kívül hagyva (XC8-1749) A fordító nem generált hibát, amikor több eszközspecifikációs opciót használtak, és különböző eszközöket jeleztek.
Memória korrupció halom által (XC8-1748) A A _heap_start szimbólum helytelenül volt beállítva, ami azt eredményezte, hogy a halom megsértheti a közönséges változókat.
Linker áthelyezési hiba (XC8-1739) A linker áthelyezési hibát jelezhetett, amikor a kód rjmp-t vagy rcallt tartalmazott, amelynek célpontja pontosan 4 KB-ra van.
5.6. 2.00. verzió
Egyik sem.
Ismert problémák
A következő korlátozások vonatkoznak a fordító működésére. Ezek lehetnek általános kódolási korlátozások, vagy eltérések a felhasználói kézikönyvben található információktól. A címben szereplő zárójelben szereplő címke(ek) a probléma azonosítását jelentik a nyomkövetési adatbázisban. Ez hasznos lehet, ha kapcsolatba kell lépnie az ügyfélszolgálattal. Azok az elemek, amelyek nem rendelkeznek címkével, olyan korlátozások, amelyek leírják a működési módot, és valószínűleg tartósan érvényben maradnak.
6.1. MPLAB X IDE Integráció
MPLAB IDE integráció Ha a Compiler-t az MPLAB IDE-ből kívánja használni, akkor telepítenie kell az MPLAB IDE-t a Compiler telepítése előtt.
6.2. Kódgenerálás
Segfault with section-anchors opció (XC8-3045) A változó argumentumlistákkal függvényeket definiáló és az -fsection-anchors kapcsolót használó program belső fordítói hibát válthatott ki: Szegmentációs hiba.
A hibakeresési adatok nincsenek szinkronban (XC8-2948) Amikor a linker relaxációs optimalizálása összehúzza az utasításokat (plample call to rcall utasítások), előfordulhat, hogy a forrásvonal-cím leképezések nem maradnak szinkronban, ha egy szakaszban egynél több zsugorítási művelet történik.
Az alábbiakban plample, van két foo-nak küldött hívás, amelyek végül relatív hívásokká válnak.
PA memóriafoglalási hiba (XC8-2881) Az eljárási absztrakció-optimalizálók használatakor a linker memóriakiosztási hibákat jelenthet, ha a kód mérete közel van az eszközön rendelkezésre álló programmemória mennyiségéhez, még akkor is, ha a programnak el kell férnie a rendelkezésre álló helyhez.
Nem túl okos Smart-I0 (XC8-2872) A fordító smart-io funkciója érvényes, de nem optimális kódot generál az snprint f függvényhez, ha a const-data-in-progmem funkció le van tiltva, vagy ha az eszköz teljes flash-je az adatmemóriában van leképezve.
Még kevésbé okos Smart-I0 (XC8-2869) A fordító smart-io funkciója érvényes, de szuboptimális kódot generál, ha az -flto és az -fno-builtin opciókat is használja.
Szuboptimális, csak olvasható adatelhelyezés (XC8-2849) A linker jelenleg nem ismeri az APPCODE és APPDATA memóriarészeket, sem a [No-Read-While-Write felosztást a memóriatérképen. Ennek eredményeként kicsi az esélye, hogy a linker csak olvasható adatokat foglaljon le a memória nem megfelelő területén. A rossz helyen lévő adatok esélye megnő, ha a const-data-in-progmem szolgáltatás engedélyezve van, különösen, ha a const-data-in-config-mapped-progmem szolgáltatás is engedélyezve van. Ezek a funkciók szükség esetén letilthatók.
Objektum file rendelés feldolgozása (XC8-2863) Az objektumok sorrendje fileA linker által feldolgozott s-ek eltérhetnek az eljárási absztrakciós optimalizálás használatától függően (-mpa opció). Ez csak azt a kódot érinti, amely több modulban gyenge funkciókat határoz meg.
Linker hiba abszolút értékkel (XC8-2777) Ha egy objektumot abszolutizáltak egy címen a RAM elején, és inicializálatlan objektumokat is definiáltak, linker hiba léphet fel.
Rövid ébresztési azonosítók (XC8-2775) Az ATA5700/2 eszközök esetében a PHIDO/1 regiszterek 16 bit helyett csak 32 bit szélesek.
Linker összeomlik a szimbólum hívásakor (XC8-2758) A linker összeomolhat, ha a -mrelax illesztőprogram-beállítást használják, amikor a forráskód olyan szimbólumot hív meg, amelyet a -cc., -de f sym linker paraméterrel definiáltak.
Helytelen inicializálás (XC8-2679) Ott Az eltérés aközött, hogy egyes globális/statikus bájtméretű objektumok kezdeti értékei hol helyezkednek el az adatmemóriában, és hol lesznek elérhetők a változók futás közben.
Hibás közvetett függvényhívások (XC8-2628) Egyes esetekben a struktúra részeként tárolt függvénymutatón keresztül végrehajtott függvényhívások meghiúsulhatnak.
Az strtof nullát ad vissza hexadecimális lebegőpontokhoz (XC8-2626) Az strtof et al és a scanf ( ) et al könyvtárfüggvények mindig nullává alakítanak át egy hexadecimális lebegőpontos számot, amely nem ad meg kitevőt. Plample:
strtof ("Oxl", &endptr) ;
a 0 értéket adja vissza, nem az I értéket.
Pontatlan verem-tanácsadói üzenetek (XC8-2542, XC8-2541) Egyes esetekben a veremtanácsadó figyelmeztetés a rekurzióra vagy a használt határozatlan veremre vonatkozóan (esetleg az alloca() használatával) nem kerül kiadásra.
Hiba duplikált megszakítási kóddal (XC8-2421) Ha egynél több megszakítási függvénynek ugyanaz a törzse, akkor előfordulhat, hogy a fordító az egyik megszakítási függvény kimenetét meghívja a másikat. Ez azt eredményezi, hogy az összes hívásblokkolt regiszter szükségtelenül mentésre kerül, és a megszakítások még az aktuális megszakításkezelő epilógusának lefutása előtt engedélyezve lesznek, ami kódhibához vezethet.
Hibás kimenet érvénytelen DFP-útvonallal (XC8-2376) Ha a fordító érvénytelen DFP-útvonallal és „specifikációval” van meghívva file létezik a kiválasztott eszközön, a fordító nem jelenti a hiányzó eszközcsalád-csomagot, hanem a „specifikációt” választja file, ami érvénytelen kimenethez vezethet. A "specifikáció" fileElőfordulhat, hogy nem naprakészek az elosztott DFP-kkel, és csak belső fordítói teszteléshez készültek.
A memória átfedése nem észlelhető (XC8-1966) A fordító nem észleli a memória átfedését egy címen (a _at ( ) segítségével) abszolúttá tett objektumok és más objektumok között a ( ) szakasz-leíró használatával, és amelyek ugyanahhoz a címhez kapcsolódnak.
Hiba a könyvtári funkciókkal és a _memx-szel (XC8-1763) Előfordulhat, hogy a meghívott libgcc float függvények, amelyek argumentuma a memx címtérben találhatók. Vegye figyelembe, hogy a könyvtári rutinokat néhány C operátor hívja meg, így plample, a következő kód érintett:
return regFloatVar > memxFloatVar;
Korlátozott libgcc megvalósítás (AVRTC-731) Az ATTiny4/5/9/10/20/40 termékek esetében a szabványos C / Math könyvtár megvalósítása a libgcc-ben nagyon korlátozott, vagy nincs jelen.
Programmemória korlátozások (AVRTC-732) Az eszközlánc támogatja a 128 kb-nál nagyobb programmemória-képeket; ismertek azonban arra, hogy a linker lazítás és hasznos hibaüzenet nélkül megszakad, ahelyett, hogy a szükséges függvénycsonkokat generálná a -mre lax kapcsoló használatakor.
Névtér korlátozások (AVRTC-733) A nevesített címtereket az eszközlánc támogatja, a felhasználói útmutató Speciális típusminősítők című részében említett korlátozások függvényében.
Időzónák A A könyvtári függvények GMT-t feltételeznek, és nem támogatják a helyi időzónákat, így a localtime ( ) ugyanazt az időt adja vissza, mint a gmtime ( ), pl.ample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Dokumentumok / Források
![]() |
MICROCHIP MPLAB XC8 C fordítófejlesztő szoftver [pdf] Használati utasítás MPLAB XC8 C, MPLAB XC8 C fordítófejlesztő szoftver, fordítófejlesztő szoftver, fejlesztő szoftver, szoftver |




