MICROCHIP XC8 C-samestellerweergawe 2.45 vrystellingsnotas vir AVR MCU

Produk inligting
Die MPLAB XC8 C-samesteller is 'n sagteware-instrument wat gebruik word om mikroskyfie AVR-toestelle te teiken. Dit is ontwerp om C-kode saam te stel en uitvoerbare te genereer files vir hierdie toestelle. Die samestellerweergawe waarna in hierdie gebruikershandleiding verwys word, is 2.45, met 'n amptelike boudatum van 18 Augustus 2023. Die vorige weergawe was 2.41, gebou op 8 Februarie 2023. Die samesteller kom met 'n Funksionele Veiligheidshandleiding, wat addisionele inligting verskaf en riglyne wanneer die MPLAB XC-samestellers met funksionele veiligheidstoepassings gebruik word. Hierdie handleiding is by die dokumentasiepakket ingesluit wanneer jy 'n funksionele veiligheidslisensie koop. Die MPLAB XC8 C-samesteller ondersteun alle beskikbare 8-bis AVR MCU-toestelle ten tyde van vrystelling. Jy kan verwys na die avr_chipinfo.html file in die samesteller se doc-gids vir 'n lys van alle ondersteunde toestelle en hul konfigurasiebis-instellings. Daar is verskillende uitgawes van die MPLAB XC8-samesteller beskikbaar. Die gelisensieerde (PRO) uitgawe bied 'n hoër vlak van optimalisering in vergelyking met die gratis uitgawe. Om die samesteller as 'n gelisensieerde produk te aktiveer, moet jy 'n aktiveringssleutel koop. Die ongelisensieerde weergawe kan egter onbepaald sonder 'n lisensie gebruik word. Vir funksionele veiligheidstoepassings is 'n MPLAB XC8 Functional Safety-samesteller beskikbaar. Dit vereis 'n funksionele veiligheidslisensie wat by Microchip gekoop is vir aktivering. Sodra dit geaktiveer is, kan alle optimaliseringsvlakke en samestellerkenmerke gebruik word. Die MPLAB XC Functional Safety Compiler ondersteun ook die Network Server License. Gedetailleerde inligting oor installasie, aktivering, lisensietipes en migrasiekwessies kan gevind word in die Installering en Lisensiëring van MPLAB XC C-samestellers (DS50002059) dokument.
Produkgebruiksinstruksies
- Voordat u die MPLAB XC8 C-samestellersagteware gebruik, lees die gebruikershandleiding vir belangrike inligting en instruksies spesifiek vir die teiken van Microchip AVR-toestelle.
- As jy die samesteller vir 8-bis PIC toestelle gebruik, verwys na die MPLAB XC8 C Compiler Release Notes for PIC dokument.
- Maak seker dat jou bedryfstelsel aan die stelselvereistes voldoen om die samesteller te laat loop. Binaries vir macOS is kode-onderteken en notarieel. Die MPLAB XC-netwerklisensiebediener is beskikbaar vir Microsoft Windows 10 en hoër, Ubuntu 18.04 en hoër, en macOS 10.15 en hoër. Let daarop dat die MPLAB XC-netwerklisensiebediener nie op hierdie bedryfstelsels getoets word nie.
- Die MPLAB XC-netwerklisensiebediener kan op virtuele masjiene van die ondersteunde bedryfstelsel gebruik word deur 'n virtuele masjienlisensie vir netwerklisensies (SW006021-VM) te gebruik. Alle 32-bis weergawes van die MPLAB XC Network Server word gestaak vanaf weergawe 3.00.
- Om die MPLAB XC8 C-samesteller as 'n gelisensieerde (PRO) produk te aktiveer, koop 'n aktiveringssleutel. Dit sal 'n hoër vlak van optimalisering bied in vergelyking met die gratis weergawe. Die ongelisensieerde samesteller kan egter onbepaald sonder 'n lisensie bedryf word.
- As jy die MPLAB XC8 Functional Safety Compiler vir funksionele veiligheidstoepassings gebruik, moet dit geaktiveer word met 'n funksionele veiligheidslisensie wat by Microchip gekoop is. Die samesteller sal nie sonder hierdie lisensie werk nie. Sodra dit geaktiveer is, kan jy enige optimaliseringsvlak kies en al die samestellerkenmerke gebruik. Die netwerkbedienerlisensie word ondersteun deur hierdie vrystelling van die MPLAB XC Functional Safety Compiler.
- Vir gedetailleerde instruksies oor installering, aktivering en lisensiëring van die MPLAB XC8 C-samesteller, verwys na die Installering en Lisensiëring van MPLAB XC C-samestellers (DS50002059) dokument.
- As jy die samesteller onder die evalueringslisensie bestuur, sal jy 'n waarskuwing tydens samestelling ontvang wanneer jy binne 14 dae na die einde van jou evalueringstydperk is. Dieselfde waarskuwing word uitgereik as jy binne 14 dae na die einde van jou HPA-intekening is.
verbyview
Inleiding
Hierdie vrystelling van die Microchip MPLAB® XC8 C-samesteller bevat verskeie nuwe kenmerke, foutoplossings en ondersteuning vir nuwe toestelle.
Bou datum
Die amptelike boudatum van hierdie samestellerweergawe is 18 Augustus 2023.
Vorige weergawe
Die vorige MPLAB XC8 C-samestellerweergawe was 2.41, gebou op 8 Februarie 2023.
Funksionele Veiligheidshandleiding
'n Funksionele Veiligheidshandleiding vir die MPLAB XC-samestellers is beskikbaar in die dokumentasiepakket wanneer jy 'n funksionele veiligheidslisensie koop.
Komponent lisensies en weergawes
Die MPLAB XC8 C-samesteller vir AVR MCU's-nutsgoed word geskryf en versprei onder die GNU General Public License (GPL), wat beteken dat die bronkode daarvan vrylik versprei word en aan die publiek beskikbaar is. Die bronkode vir gereedskap onder die GNU GPL kan afsonderlik van Microchip's afgelaai word webwerf. Jy kan die GNU GPL in die file genaamd geleë die subgids van jou installasiegids. 'n Algemene bespreking van beginsels onderliggend aan die GPL kan hier gevind word. Ondersteuningskode verskaf vir die kopskrif files, koppelskrifte en looptydbiblioteke is eie kode en word nie onder die GPL gedek nie. Hierdie samesteller is 'n implementering van GCC weergawe 5.4.0, binutils weergawe 2.26, en gebruik avr-libc weergawe 2.0.0.
Stelselvereistes
Die MPLAB XC8 C-samesteller en die lisensiesagteware wat dit gebruik, is beskikbaar vir 'n verskeidenheid bedryfstelsels, insluitend 64-bis weergawes van die volgende: Professionele uitgawes van Microsoft® Windows® 10, Ubuntu® 18.04, macOS® 13.2 (Ventura), en Fedora 34. Binaries vir Windows is kode-onderteken. Binaries vir macOS is kode-onderteken en notarieel. Die MPLAB XC-netwerklisensiebediener is beskikbaar vir 'n verskeidenheid 64-bis-bedryfstelsels, insluitend Microsoft Windows 10 en hoër; Ubuntu 18.04 en hoër; of macOS 10.15 en hoër. Die bediener kan ook op verskeie ander bedryfstelsels loop, insluitend Windows Server, Linux-verspreidings, soos Oracle® Enterprise Linux® en Red Hat® Enterprise Linux sowel as ouer weergawes van ondersteunde bedryfstelsels. Die MPLAB XC-netwerklisensiebediener word egter nie op hierdie bedryfstelsels getoets nie. Die MPLAB XC-netwerklisensiebediener kan op virtuele masjiene van die ondersteunde bedryfstelsel gebruik word deur 'n virtuele masjienlisensie vir netwerklisensies (SW006021-VM) te gebruik. Alle 32-bis weergawes van die MPLAB XC Network Server word gestaak vanaf weergawe 3.00.
Toestelle wat ondersteun word
Hierdie samesteller ondersteun alle beskikbare 8-bis AVR MCU toestelle ten tyde van vrystelling. Sien avr_chipinfo.html (in die samesteller se doc-gids) vir 'n lys van alle ondersteunde toestelle. Hierdie lêers lys ook konfigurasiebisinstellings vir elke toestel.
Uitgawes en lisensie-opgraderings
Die MPLAB XC8 samesteller kan as 'n gelisensieerde (PRO) of ongelisensieerde (gratis) produk geaktiveer word. Jy moet 'n aktiveringssleutel koop om jou samesteller te lisensieer. 'n Lisensie maak voorsiening vir 'n hoër vlak van optimalisering in vergelyking met die Gratis produk. 'n Ongelisensieerde samesteller kan onbepaald sonder 'n lisensie bedryf word. 'n MPLAB XC8 Functional Safety-samesteller moet geaktiveer word met 'n funksionele veiligheidslisensie wat by Microchip gekoop is. Die samesteller sal nie sonder hierdie lisensie werk nie. Sodra dit geaktiveer is, kan jy enige optimaliseringsvlak kies en al die samestellerkenmerke gebruik. Hierdie vrystelling van die MPLAB XC Functional Safety Compiler ondersteun die netwerkbedienerlisensie. Sien die installering en lisensiëring van MPLAB XC C-samestellers (DS50002059) dokument vir inligting oor lisensietipes en installering van die samesteller met 'n lisensie.
Installasie en aktivering
Sien ook die Migrasie-kwessies en -beperkings-afdelings vir belangrike inligting oor die nuutste lisensiebestuurder wat by hierdie samesteller ingesluit is. As jy MPLAB IDE gebruik, maak seker dat jy die nuutste MPLAB X IDE weergawe 5.0 of later installeer voordat jy hierdie instrument installeer. Verlaat die IDE voordat die samesteller geïnstalleer word. Begin die .run (Linux) of .app (macOS) samesteller installeerder toepassing, bv. XC8-1.00.11403-windows.exe en volg die aanwysings op die skerm. Die verstek installasie gids word aanbeveel. As jy Linux gebruik, moet jy die samesteller installeer met behulp van 'n terminaal en vanaf 'n wortelrekening. Installeer met 'n macOS-rekening met administrateurregte. Aktivering word nou afsonderlik na installasie uitgevoer. Sien die dokument Lisensiebestuurder vir MPLAB® XC C-samestellers (DS52059) vir meer inligting. As jy kies om die samesteller onder die evalueringslisensie te laat loop, sal jy nou 'n waarskuwing tydens samestelling kry wanneer jy binne 14 dae na die einde van jou evalueringsperiode is. Dieselfde waarskuwing word uitgereik as jy binne 14 dae na die einde van jou HPA-intekening is. Die XC Network License Server is 'n aparte installeerder en is nie by die enkelgebruiker samesteller installeerder ingesluit nie. Die XC-lisensiebestuurder ondersteun nou swerwing van swewende netwerklisensies. Gemik op mobiele gebruikers, hierdie kenmerk laat 'n drywende lisensie toe om vir 'n kort tydperk van die netwerk af te gaan. Deur hierdie kenmerk te gebruik, kan jy van die netwerk ontkoppel en steeds jou MPLAB XC-samesteller gebruik. Sien die doc-lêergids van die XCLM-installasie vir meer oor hierdie kenmerk. MPLAB X IDE bevat 'n lisensievenster (Gereedskap > Lisensies) om swerwing visueel te bestuur.
Los installasie kwessies op
As jy probleme ondervind om die samesteller onder enige van die Windows-bedryfstelsels te installeer, probeer die volgende voorstelle.
- Begin die installasie as 'n administrateur.
- Stel die toestemmings van die installeerdertoepassing op 'Volledige beheer'. (Regsklik op die lêer, kies Eienskappe, Sekuriteit-oortjie, kies gebruiker, redigeer.)
- Stel toestemmings van die temp-lêergids op 'Volledige beheer'.
Om die ligging van die temp-lêergids te bepaal, tik %temp% in die Run-opdrag (Windows-logosleutel + R). Dit sal 'n lêerverkenner-dialoog oopmaak wat daardie gids wys en sal jou toelaat om die pad van daardie gids te bepaal.
Samesteller dokumentasie
Die samesteller se gebruikersgidse kan oopgemaak word vanaf die HTML-bladsy wat in jou blaaier oopmaak wanneer jy op die blou hulpknoppie in MPLAB X IDE-kontroleskerm klik, soos in die skermkiekie aangedui.
As jy vir 8-bis AVR-teikens bou, bevat die MPLAB® XC8 C-samestellergebruikersgids vir AVR® MCU inligting oor daardie samestelleropsies en kenmerke wat op hierdie argitektuur van toepassing is.
Kliënte ondersteuning
Jy kan vrae aan ander gebruikers van hierdie produk in die XC8 Forum vra. Microchip verwelkom foutverslae, voorstelle of opmerkings oor hierdie samestellerweergawe. Stuur asseblief enige foutverslae of kenmerkversoeke via die ondersteuningstelsel.
Dokumentasie-opdaterings
Vir aanlyn en bygewerkte weergawes van MPLAB XC8 dokumentasie, besoek asseblief Microchip se aanlyn tegniese dokumentasie webwebwerf.
Nuwe of opgedateerde AVR-dokumentasie in hierdie vrystelling:
Geen
- Die AVR® GNU Toolchain na MPLAB® XC8 Migrasiegids beskryf die veranderinge aan bronkode en bouopsies wat nodig mag wees indien jy besluit om 'n C-gebaseerde projek van die AVR 8-bis GNU Toolchain na die Microchip MPLAB XC8 C-samesteller te migreer.
- Die Microchip Unified Standard Library Reference Guide beskryf die gedrag van en koppelvlak tot die funksies wat deur die Microchip Unified Standard Library gedefinieer word, sowel as die beoogde gebruik van die biblioteektipes en makros. Sommige van hierdie inligting was voorheen vervat in die MPLAB® XC8 C-samestellergebruikersgids vir AVR® MCU. Toestelspesifieke biblioteekinligting is steeds in hierdie samestellergids vervat.
- As jy net begin met 8-bis-toestelle en die MPLAB XC8 C-samesteller, sal die MPLAB® XC8-gebruiker se
- Gids vir ingebedde ingenieurs – AVR® MCU's (DS50003108) het inligting oor die opstel van projekte in die MPLAB X IDE en die skryf van kode vir jou eerste MPLAB XC8 C-projek. Hierdie gids word nou saam met die samesteller versprei.
- Die Hexmate-gebruikersgids is bedoel vir diegene wat Hexmate as 'n alleenstaande toepassing gebruik.
Wat is nuut
Die volgende is nuwe AVR-teikenkenmerke wat die samesteller nou ondersteun. Die weergawenommer in die subopskrifte dui die eerste samestellerweergawe aan om die kenmerke wat volg te ondersteun.
Weergawe 2.45
Universele lisensiebestuurder (XC8-3175, XCLM-224) Die macOS-weergawe van die lisensiebestuurder wat met die samesteller gebruik word, is nou universeel en bied inheemse ondersteuning vir beide Intel- en M1-gebaseerde masjiene. Die Linux-weergawe van die lisensiebestuurder vereis nou ten minste weergawe 2.25 van glibc. Mac universele binaries (XC8-3168, XC8-2951) Die samesteller-binêre lêers vir macOS is nou universeel en bied inheemse ondersteuning vir beide Intel- en M1-gebaseerde masjiene. Verminderde swaaipunt-biblioteekgroottes (XC8-3112, XC8-3071) Verbeterings is aangebring aan swaaipunt-biblioteekfunksies, insluitend sinf() pow(), sqrt(), expf(), log1fp(), en nextafterf() , wat 'n vermindering in kodegrootte vir hierdie roetines sien. Nuwe toestelondersteuning is nou beskikbaar vir die volgende AVR-onderdele: AVR16EA28, AVR16EA32, AVR16EA48, AVR32EA28, AVR32EA32, AVR32EA48, AVR16EB14, AVR16EB20, AVR16EB28 en AVR16EB32.
Weergawe 2.41
- Bootrow-ondersteuning (XC8-3053) Die samesteller sal die inhoud van enige afdelings met 'n .bootrow-voorvoegsel by adres 0x860000 in die HEX-lêer plaas. Hierdie afdelings word gebruik vir BOOTROW-geheue, wat ontwerp is vir die stoor van sleutels en ander veilige inligting wat slegs vir 'n selflaaiprogram toeganklik behoort te wees.
- Uitskakeling van oortollige terugkeer (XC8-3048) Die samesteller sal nou oortollige ret-instruksies in funksies met 'n stertsprong uitskakel wanneer persoonlike koppelskrifte gebruik word. Dit is 'n soortgelyke optimalisering as wat voorheen uitgevoer is, maar dit word nou uitgevoer op alle weesafdelings, selfs al word 'n pasgemaakte koppelskrif gebruik en die beste gepaste toekenningskema is nie in die spel nie.
- Tydtipe verandering (XC8-2982, 2932) Die C99 standaard biblioteek tipe, time_t is verander van 'n lang lang na 'n ongetekende lang tipe, wat kodegrootte verbeterings in sommige tydverwante funksies gee, soos mktime().
- Nuwe nop (XC8-2946, 2945) Die makro NOP() is bygevoeg by . Hierdie makro voeg 'n nop no-operation instruksie in die uitvoer.
- Opdatering na XCLM (XC8-2944) Die lisensiebestuurder wat saam met die samesteller gebruik word, is opgedateer en reageer nou meer wanneer die samesteller se lisensiebesonderhede nagegaan word.
- Trampgelyn-oproepe (XC8-2760) Die samesteller kan nou vervanging van langvormoproepinstruksies met korter relatiewe oproepe uitvoer wanneer die relatiewe vorms van die instruksies normaalweg buite bereik van hul bestemming sou wees. In hierdie situasie sal die samesteller probeer om met rcall-instruksies te vervang na 'n jmp-oproepinstruksie wat 'trampoline' uitvoering na die verlangde adres, bvample:
Weergawe 2.40
- Nuwe toestelondersteuning is nou beskikbaar vir die volgende AVR-onderdele: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32, AVR64EA48 en AVRXNUMX en AVRXNUMX.
- Verbeterde prosedurele abstraksie Die prosedurele abstraksie (PA)-optimeringsinstrument is verbeter sodat kode wat 'n funksie-oproep-instruksie (oproep/rcall) bevat, uiteengesit kan word. Dit sal slegs plaasvind as die stapel nie gebruik word om argumente na die funksie deur te gee of om terugkeerwaarde van die funksie te verkry nie. Die stapel word gebruik wanneer 'n funksie met 'n veranderlike argumentlys geroep word of wanneer 'n funksie geroep word wat meer argumente neem as wat daar registers is wat vir hierdie doel aangewys is. Hierdie kenmerk kan gedeaktiveer word deur die - mno-pa-outline-oproepe opsie te gebruik, of prosedurele abstraksie kan heeltemal gedeaktiveer word vir 'n objeklêer en of funksie deur die -mno-pa-on- te gebruikfile -mno-pa-op-funksie, onderskeidelik, of deur die nopa-kenmerk (__nopa-spesifiseerder) selektief met funksies te gebruik.
- Kode dekking makro Die samesteller definieer nou die makro __CODECOV as 'n geldige -mcodecov opsie gespesifiseer is.
- Geheuebesprekingsopsie Die xc8-cc bestuurder sal nou die -mreserve=space@start:end opsie aanvaar wanneer jy vir AVR-teikens bou. Hierdie opsie behou die gespesifiseerde geheuereeks in die data- of programgeheuespasie, wat verhoed dat die koppelaar kode of voorwerpe in hierdie area invul.
- Slimmer slim IO Verskeie verbeterings is aangebring aan die Smart IO-funksies, insluitend algemene aanpassings aan die printf-kernkode, die behandeling van die %n-omskakelingspesifiseerder as 'n onafhanklike variant, skakel in vararg-pop-roetines op aanvraag, gebruik korter datatipes waar moontlik vir hantering IO-funksieargumente, en faktorisering van algemene kode in veldwydte en presisiehantering. Dit kan aansienlike kode- en databesparings tot gevolg hê, asook die uitvoeringspoed van IO verhoog.
Weergawe 2.39 (Funksionele Veiligheidsvrystelling)
Netwerkbedienerlisensie Hierdie vrystelling van die MPLAB XC8 Functional Safety Compiler ondersteun die netwerkbedienerlisensie.
Weergawe 2.36
Geen.
Weergawe 2.35
- Nuwe toestelondersteuning is beskikbaar vir die volgende AVR-onderdele: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 en AVR64DD32.
- Verbeterde kontekswisseling Die nuwe -mcall-isr-prologues opsie verander hoe onderbrekingsfunksies registers stoor by inskrywing en hoe daardie registers herstel word wanneer die onderbrekingsroetine eindig. Dit werk op 'n soortgelyke manier as die -mcall-prologues-opsie, maar beïnvloed slegs onderbrekingsfunksies (ISR's).
- Selfs meer verbeterde kontekswisseling Die nuwe -mgas-isr-prologues opsie beheer die konteksskakelaarkode wat vir klein onderbrekingsdiensroetines gegenereer word. Wanneer dit geaktiveer is, sal hierdie funksie die samesteller die ISR laat skandeer vir registergebruik en slegs hierdie gebruikte registers stoor indien nodig.
- Konfigureerbare flitskartering Sommige toestelle in die AVR DA- en AVR DB-familie het 'n SFR (bv. FLMAP) wat spesifiseer watter 32k-afdeling van programgeheue in die datageheue gekarteer sal word. Die nuwe - mconst-data-in-config-mapped-progmem opsie kan gebruik word om die skakelaar alle gekwalifiseerde data in een 32k afdeling te plaas en outomaties die relevante SFR register te inisialiseer om te verseker dat hierdie data in die data geheue spasie gekarteer word , waar dit meer effektief verkry sal word.
- Microchip Unified Standard Library Alle MPLAB XC samestellers sal 'n Microchip Unified Standard Library deel, wat nou beskikbaar is met hierdie vrystelling van MPLAB XC8. Die MPLAB® XC8 C-samestellergebruikersgids vir AVR® MCU bevat nie meer die dokumentasie vir hierdie standaardfunksies nie. Hierdie inligting kan nou gevind word in die Microchip Unified Standard Library Reference Guide. Let daarop dat sommige funksies wat voorheen deur avr-libc gedefinieer is, nie meer beskikbaar is nie. (Sien Biblioteekfunksionaliteit.)
- Slim IO As deel van die nuwe verenigde biblioteke, word IO-funksies in die printf- en scanf-families nou op elke bouvorm op maat gegenereer, gebaseer op hoe hierdie funksies in die program gebruik word. Dit kan die hulpbronne wat deur 'n program gebruik word aansienlik verminder.
- Slim IO-bystandsopsie Wanneer oproepe na slim IO-funksies (soos printf() of scanf() ontleed word, kan die samesteller nie altyd uit die formaatstring bepaal of uit die argumente daardie omskakelingspesifiseerders wat deur die oproep vereis word, aflei nie. Voorheen sou die samesteller altyd maak geen aannames nie en verseker dat ten volle funksionele IO-funksies in die finale programbeeld gekoppel is. 'n Nuwe -msmart-io-format=fmt-opsie is bygevoeg sodat die samesteller eerder deur die gebruiker ingelig kan word oor die omskakelingspesifiseerders wat deur slim IO gebruik word funksies waarvan die gebruik dubbelsinnig is, wat voorkom dat buitensporige lang IO-roetines gekoppel word. (Sien slim-io-formaat-opsie vir meer besonderhede.)
- Plaas pasgemaakte afdelings Voorheen het die -Wl,–seksie-begin-opsie slegs die gespesifiseerde afdeling by die gevraagde adres geplaas wanneer die koppelskrip 'n uitvoerafdeling met dieselfde naam gedefinieer het. Toe dit nie die geval was nie, is die afdeling geplaas by 'n adres wat deur die skakelaar gekies is en die opsie is in wese geïgnoreer. Nou sal die opsie vir alle pasgemaakte afdelings geëer word, selfs al definieer die koppelskrif nie die afdeling nie. Let egter daarop dat vir standaardafdelings, soos .text, .bss of .data , die beste gepaste toewyser steeds volledige beheer oor hul plasing sal hê, en die opsie sal geen effek hê nie. Gebruik die -Wl,-Tsection=addr opsie, soos beskryf in die gebruikersgids.
Weergawe 2.32
- Stapelleiding Beskikbaar met 'n PRO samestellerlisensie, die samesteller se stapelleidingkenmerk kan gebruik word om die maksimum diepte van enige stapel wat deur 'n program gebruik word, te skat. Dit konstrueer en ontleed die oproepgrafiek van 'n program, bepaal die stapelgebruik van elke funksie, en produseer 'n verslag waaruit die diepte van stapels wat deur die program gebruik word, afgelei kan word. Hierdie kenmerk word geaktiveer deur die -mchp-stack-usage opdraglyn opsie. 'n Opsomming van stapelgebruik word gedruk na uitvoering. 'n Gedetailleerde stapelverslag is beskikbaar in die kaartlêer, wat op die gewone manier aangevra kan word.
- Nuwe toestelondersteuning is beskikbaar vir die volgende AVR-onderdele: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, AVR32, AVR48DBXNUMX en AVRXNUMX.
- Ondersteuning vir teruggetrekte toestelle is nie meer beskikbaar vir die volgende AVR-onderdele nie: AVR16DA28, AVR16DA32 en AVR16DA48.
Weergawe 2.31
Geen.
Weergawe 2.30
- Nuwe opsie om data-inisialisering te voorkom 'n Nuwe -mno-data-init bestuurder opsie verhoed die inisialisering van data en die skoonmaak van bss afdelings. Dit werk deur die uitset van die do_clear_bss-simbole in samestellinglêers te onderdruk, wat op sy beurt die insluiting van daardie roetines deur die skakelaar sal verhoed.
- Verbeterde optimalisering 'n Aantal optimaliseringsverbeterings is gemaak, insluitend die verwydering van oortollige terugkeer-instruksies, die verwydering van sommige spronge na aanleiding van 'n skip-as-bis-is-instruksie, en verbeterde prosedurele abstraksie en die vermoë om hierdie proses te herhaal.
Bykomende opsies is nou beskikbaar om sommige van hierdie optimaliserings te beheer, spesifiek -fseksie-ankers, wat toegang tot statiese voorwerpe toelaat om relatief tot een simbool uitgevoer te word; -mpa- iterations=n , wat toelaat dat die aantal prosedurele abstraksie-iterasies verander word vanaf die verstek van 2; en, -mpa-callcost-shortcall, wat meer aggressiewe prosedurele abstraksie uitvoer, in die hoop dat die skakelaar lang oproepe kan verslap. Hierdie laaste opsie kan kodegrootte vergroot as die onderliggende aannames nie gerealiseer word nie. - Nuwe toestelondersteuning is beskikbaar vir die volgende AVR-onderdele: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128, AVR28, AVR128, AVR32, AVR128, AVR48, AVR128, AVR64, AVRXNUMX, AVRXNUMX, AVRXNUMX, XNUMX XNUMXDBXNUMX.
- Ondersteuning vir teruggetrek toestel is nie meer beskikbaar vir die volgende AVR-onderdele nie: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C, ATA664251C, ATAXNUMXC, ATAXNUMXC, ATAXNUMXC, ATAXNUMXC en XNUMXC
Weergawe 2.29 (Funksionele Veiligheidsvrystelling)
- Koplêer vir samesteller ingeboude om te verseker dat die samesteller kan voldoen aan taalspesifikasies soos MISRA, die , is opgedateer. Hierdie kop bevat die prototipes vir alle ingeboude funksies, soos __builtin_avr_nop() en __builtin_avr_delay_cycles() . Sommige ingeboude is dalk nie aan MISRA voldoen nie; dit kan weggelaat word deur die definisie __XC_STRICT_MISRA by die samesteller-opdragreël by te voeg. Die ingeboude items en hul verklarings is opgedateer om tipes met vaste breedte te gebruik.
Weergawe 2.20
- Nuwe toestelondersteuning is beskikbaar vir die volgende AVR-onderdele: ATTINY1624, ATTINY1626 en ATTINY1627.
- Beter gepaste toekenning Die beste gepaste toewyser (BFA) in die samesteller is verbeter sodat afdelings in 'n volgorde toegewys word wat beter optimering moontlik maak. Die BFA ondersteun nou benoemde adresruimtes en hanteer data-inisialisering beter.
- Verbeterde prosedurele abstraksie Die prosedurele abstraksie-optimalisasies word nou op meer kodereekse uitgevoer. Vorige situasies waar hierdie optimalisering kodegrootte kon vergroot het, is aangespreek deur die optimaliseringskode bewus te maak van die skakelaar se vullisversamelingsproses.
- Afwesigheid van AVR-samesteller Die AVR-samesteller is nie meer by hierdie verspreiding ingesluit nie.
Weergawe 2.19 (Funksionele Veiligheidsvrystelling)
Geen.
Weergawe 2.10
- Kodedekking Hierdie vrystelling sluit 'n kodedekkingsfunksie in wat ontledings vergemaklik van die mate waarin 'n projek se bronkode uitgevoer is. Gebruik die opsie -mcodecov=ram om dit te aktiveer. Na die uitvoering van die program op jou hardeware, sal kode dekking inligting in die toestel versamel word, en dit kan oorgedra word na en vertoon word deur die MPLAB X IDE via 'n kode dekking plugin. Sien die IDE-dokumentasie vir inligting oor hierdie inprop kan verkry word.
Die #pragma nocodecov kan gebruik word om daaropvolgende funksies uit die dekkingsontledings uit te sluit. Ideaal gesproke moet die pragma aan die begin van die lêer bygevoeg word om daardie hele lêer uit te sluit van die dekkingsontleding. Alternatiewelik kan die __kenmerk__((nocodecov)) gebruik word om 'n spesifieke funksie uit die dekkingsontledings uit te sluit. - Toestelbeskrywingslêers 'n Nuwe toestellêer genaamd avr_chipinfo.html is in die docs-gids van die samestellerverspreiding geleë. Hierdie lêer lys alle toestelle wat deur die samesteller ondersteun word. Klik op 'n toestelnaam, en dit sal 'n bladsy oopmaak wat al die toelaatbare konfigurasiebisinstellings/waardepare vir daardie toestel wys, met bv.amples.
- Prosedure-abstraksie Prosedurale abstraksie-optimalisasies, wat algemene blokke van samestellingkode vervang met oproepe na 'n onttrekte kopie van daardie blok, is by die samesteller gevoeg. Dit word uitgevoer deur 'n aparte toepassing, wat outomaties deur die samesteller opgeroep word wanneer vlak 2, 3 of s-optimalisasies gekies word. Hierdie optimaliserings verminder kodegrootte, maar hulle kan uitvoeringspoed en kode-foutbaarheid verminder. Prosedurele abstraksie kan op hoër optimaliseringsvlakke gedeaktiveer word deur die opsie -mno-pa te gebruik, of kan op laer optimaliseringsvlakke (onderhewig aan jou lisensie) geaktiveer word deur -mpa te gebruik. Dit kan gedeaktiveer word vir 'n objeklêer met -mno-pa-on-file=filenaam , of gedeaktiveer vir 'n funksie deur -mno-pa-on- function=function te gebruik. Binne jou bronkode kan prosedurele abstraksie vir 'n funksie gedeaktiveer word deur __attribuut__((nopa)) te gebruik met die funksie se definisie, of deur __nopa te gebruik, wat uitbrei na __attribute__((nopa,noinline)) en dus verhoed dat funksie-inlining plaasvind en daar is abstraksie van inlinede kode.
- Sluit bisondersteuning in pragma Die #pragma config kan nou gebruik word om die AVR-slotbissies sowel as die ander konfigurasiebissies te spesifiseer. Gaan die avr_chipinfo.html-lêer (hierbo genoem) na vir die instelling/waarde-pare om met hierdie pragma te gebruik.
- Nuwe toestelondersteuning is beskikbaar vir die volgende dele: AVR28DA128, AVR64DA128, AVR32DA128 en AVR48DA128.
Weergawe 2.05
- Meer stukkies vir jou geld Die macOS-weergawe van hierdie samesteller en lisensiebestuurder is nou 'n 64-bis-toepassing. Dit sal verseker dat die samesteller sonder waarskuwings op onlangse weergawes van macOS sal installeer en loop.
- Konst-objekte in programgeheue Die samesteller kan nou konst-gekwalifiseerde voorwerpe in die program Flash-geheue plaas, eerder as om dit in RAM te hê. Die samesteller is so gewysig dat konstant-gekwalifiseerde globale data in programflitsgeheue gestoor word en hierdie data kan direk en indirek verkry word deur die toepaslike programgeheue-instruksies te gebruik. Hierdie nuwe kenmerk is by verstek geaktiveer, maar kan gedeaktiveer word met die -mno-const-data-in-progmem opsie. Vir avrxmega3- en avrtiny-argitekture is hierdie kenmerk nie nodig nie en is dit altyd gedeaktiveer, aangesien programgeheue in die data-adresspasie vir hierdie toestelle gekarteer word.
- Standaard vir gratis Ongelisensieerde (gratis) weergawes van hierdie samesteller laat nou optimaliserings tot en met vlak 2 toe. Dit sal 'n soortgelyke, alhoewel nie identiese, uitvoer toelaat as wat voorheen moontlik was met 'n Standaardlisensie.
- Welkom AVRASM2 Die AVRASM2 samesteller vir 8-bis toestelle is nou ingesluit in die XC8 samesteller installeerder. Hierdie samesteller word nie deur die XC8-samesteller gebruik nie, maar is beskikbaar vir projekte gebaseer op handgeskrewe samestellingsbron.
- Nuwe toestelondersteuning is beskikbaar vir die volgende dele: ATMEGA1608, ATMEGA1609, ATMEGA808 en ATMEGA809.
Weergawe 2.00
- Topvlakbestuurder 'n Nuwe bestuurder, genaamd xc8-cc, sit nou bo die vorige avr-gcc-bestuurder en die xc8-bestuurder, en dit kan die toepaslike samesteller oproep op grond van die keuse van die teikentoestel. Hierdie bestuurder aanvaar GCC-styl opsies, wat óf vertaal word vir óf deurgegee word na die samesteller wat uitgevoer word. Hierdie drywer laat 'n soortgelyke stel opsies met soortgelyke semantiek toe om met enige AVR- of PIC-teiken gebruik te word en is dus die aanbevole manier om die samesteller op te roep. Indien nodig, kan die ou avr-gcc bestuurder direk opgeroep word deur die ou-styl opsies wat dit aanvaar het in vroeër samesteller weergawes.
- Common C Interface Hierdie samesteller kan nou ooreenstem met die MPLAB Common C Interface, sodat bronkode makliker oorgedra kan word oor alle MPLAB XC samestellers. Die -mext=cci opsie versoek hierdie kenmerk, wat alternatiewe sintaksis vir baie taaluitbreidings moontlik maak.
- Nuwe bibliotekarisbestuurder 'n Nuwe bibliotekarisbestuurder is bo die vorige PIC-bibliotekaris en die AVR-avr-ar-bibliotekaris geposisioneer. Hierdie bestuurder aanvaar GCC-argiverer-styl opsies, wat óf vertaal word vir óf deurgegee word aan die bibliotekaris wat uitgevoer word. Die nuwe bestuurder laat 'n soortgelyke stel opsies met soortgelyke semantiek toe om gebruik te word om enige PIC- of AVR-biblioteeklêer te skep of te manipuleer en is dus die aanbevole manier om die bibliotekaris op te roep. Indien nodig vir nalatenskapprojekte, kan die vorige bibliotekaris direk geskakel word deur die ou-styl opsies wat dit aanvaar het in vroeër samesteller weergawes.
Migrasie kwessies
Die volgende is kenmerke wat nou anders deur die samesteller hanteer word. Hierdie veranderinge mag dalk wysiging aan jou bronkode vereis as jy kode na hierdie samestellerweergawe oordra. Die weergawenommer in die subopskrifte dui die eerste samestellerweergawe aan om die veranderinge wat volg te ondersteun.
Weergawe 2.45
Geen.
Weergawe 2.41
Onakkurate fma funksies verwyder (XC8-2913) Die C99 standaard biblioteek ( ) het nie 'n vermenigvuldig-optel met oneindige akkuraatheid tot 'n enkele afronding bereken nie, maar eerder opgehoopte afrondingsfoute met elke bewerking. Hierdie funksies is uit die verskafde biblioteek verwyder.
Weergawe 2.40
Geen.
Weergawe 2.39 (Funksionele Veiligheidsvrystelling)
Geen.
Weergawe 2.36
Geen.
Weergawe 2.35
- Hantering van string-na-basisse (XC8-2420) Om konsekwentheid met ander XC-samestellers te verseker, sal die XC8-string-tot-funksies, soos strtol() ens., nie meer probeer om 'n invoerstring om te skakel as die gespesifiseerde basis groter as 36 is nie en sal in plaas daarvan stel . Die C-standaard spesifiseer nie die gedrag van die funksies wanneer hierdie basiswaarde oorskry word nie.
- Onvanpaste spoedoptimalisasies Prosedurale abstraksieoptimalisasies is geaktiveer wanneer vlak 3-optimalisasies (-O3) gekies is. Hierdie optimaliserings verminder kodegrootte ten koste van kodespoed, dus moes nie uitgevoer gewees het nie. Projekte wat hierdie optimaliseringsvlak gebruik, kan dalk verskille in kodegrootte en uitvoeringspoed sien wanneer dit met hierdie vrystelling gebou word.
- Biblioteekfunksionaliteit Die kode vir baie van die standaard C-biblioteekfunksies kom nou van Microchip se Unified Standard Library, wat in sommige omstandighede verskillende gedrag kan toon in vergelyking met dié wat deur die voormalige avr-libc-biblioteek verskaf is. Byvoorbeeldample, dit is nie meer nodig om in die lprintf_flt-biblioteek (-lprintf_flt-opsie) te skakel om geformatteerde IO-ondersteuning vir float-formaat spesifiseerders aan te skakel nie. Die slim IO-kenmerke van die Microchip Unified Standard Library maak hierdie opsie oorbodig. Boonop is die gebruik van roetines met agtervoegsel _P vir string- en geheuefunksies (bv. strcpy_P() ens..) wat op konstante snare in flits werk, nie meer nodig nie. Die standaard C-roetines (bv. strcpy() sal korrek met sulke data werk wanneer die const-data-in-program-memory funksie geaktiveer is.
Weergawe 2.32
Geen.
Weergawe 2.31
Geen.
Weergawe 2.30
Geen.
Weergawe 2.29 (Funksionele Veiligheidsvrystelling)
Geen.
Weergawe 2.2
Veranderde DFP-uitleg Die samesteller aanvaar nou 'n ander uitleg wat deur DFP's (Device Family Packs) gebruik word. Dit sal beteken dat 'n ouer DFP dalk nie met hierdie vrystelling werk nie, en ouer samestellers sal nie die nuutste DFP's kan gebruik nie.
Weergawe 2.19 (Funksionele Veiligheidsvrystelling)
Geen.
Weergawe 2.10
Geen
Weergawe 2.05
Konst-objekte in programgeheue Let daarop dat die by verstek, konst-gekwalifiseerde voorwerpe in programgeheue geplaas en toeganklik sal wees (soos hier beskryf). Dit sal die grootte en uitvoeringspoed van jou projek beïnvloed, maar behoort RAM-gebruik te verminder. Hierdie kenmerk kan gedeaktiveer word, indien nodig, met die -mno-const-data-in-progmem opsie.
Weergawe 2.00
- Konfigurasie lont Die toestel konfigurasie smeltpunte kan nou geprogrammeer word deur gebruik te maak van 'n konfigurasie pragma gevolg deur stel-waarde pare om die lont toestand te spesifiseer, bv #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3
- Absolute objekte en funksies Objekte en funksies kan nou by spesifieke adres in die geheue geplaas word deur die CCI __at(adres) spesifiseerder te gebruik, bv.ample:
- #insluit
int foobar __at(0x800100);
char __at(0x250) getID(int offset) { … }
Die argument vir hierdie spesifiseerder moet 'n konstante wees wat die adres verteenwoordig waarop die eerste greep of instruksie geplaas sal word. RAM-adresse word aangedui deur 'n offset van 0x800000 te gebruik. Aktiveer die CCI om hierdie kenmerk te gebruik.
- #insluit
- Nuwe onderbreking funksie sintaksis Die samesteller aanvaar nou die CCI __interrupt(num) spesifiseerder om aan te dui dat C funksies onderbreking hanteerders is. Die spesifiseerder neem 'n onderbrekingsnommer, bvample: #sluit in void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Vaste kwessies
Die volgende is regstellings wat aan die samesteller aangebring is. Dit kan foute in die gegenereerde kode regmaak of die werking van die samesteller verander na dit wat deur die gebruikersgids bedoel of gespesifiseer is. Die weergawenommer in die subopskrifte dui die eerste samestellerweergawe aan wat regstellings bevat vir die kwessies wat volg. Die etiket(te) tussen hakies in die titel is daardie kwessie se identifikasie in die opsporingsdatabasis. Dit kan nuttig wees as jy ondersteuning moet kontak.
Let daarop dat sommige toestelspesifieke kwessies reggestel word in die Device Family Pack (DFP) wat met die toestel geassosieer word. Sien die MPLAB-pakketbestuurder vir inligting oor veranderinge wat aan DFP's gemaak is en om die nuutste pakke af te laai.
Weergawe 2.45
- Swerf lisensie mislukking (XCLM-235) Swerf lisensies kon nie korrek werk op Linux platforms wat glibc weergawes later as 2.28 gebruik nie.
- Interne fout met skikkings strukture (XC8-3069) Wanneer multi-dimensionele skikking lede van 'n struktuur verwerk is, is die adresruimtekwalifiseerder nie korrek na die skikking gepropageer nie. Dit het gelei tot 'n wanpassing in die adresruimte-kwalifiseerderinligting en 'n interne samestellerfout. Hierdie situasie is reggestel.
- Slegte skryfwerk aan ongeïnitialiseerde strome (ML-353, XC8-3100) As die standaard afvoer/foutstrome nie eksplisiet opgestel is met FDEV_SETUP_STREAM of _init_stdout/_init_stderr nie, het pogings om aan hulle te skryf gelei tot onbepaalde gedrag. Dit het ook skrywes van stdlib-funksies beïnvloed, soos perror(). Enige skrywe aan hierdie strome voordat hulle geïnisialiseer is, sal nou geïgnoreer word.
- Onondersteunde wysiger (XC8-2505) Die avr-libc-biblioteek het nie die * wysiger in printf-styl omskakelingspesifiseerders ondersteun nie, bv.ample “%.*f”. Dit word nou ondersteun met die bekendstelling van die Microchip Unified Standard Library.
- Veelvuldige ongeïnitialiseerde waarskuwings (XC8-2409) Die samesteller het verskeie identiese waarskuwingsboodskappe uitgereik toe hy 'n konst-skikking teëgekom het wat nie geïnisialiseer is nie. Die boodskap moes net een keer uitgereik gewees het, wat nou die geval is wanneer hierdie situasie voorkom.
Weergawe 2.41
- Dongle-kwessies op Ventura (XC8-3088) Dongles wat gebruik word om die samesteller te lisensieer is moontlik nie behoorlik gelees op macOS Ventura-gashere nie, wat lei tot lisensie-mislukkings. Veranderinge aan die XCLM-lisensiebestuurder maak hierdie probleem reg.
- Verkeerde aanduiding van geheuetoewysing (XC8-2925) Poging om SIZE_MAX grepe (of 'n waarde naby daaraan) geheue toe te ken deur die standaard biblioteekgeheuebestuursfunksies (malloc() et al) wat aangevra is wanneer die eenvoudige dinamiese geheuetoewysingsimplementering gebruik word. 'n NULL-wyser sal nou teruggestuur word en in sulke situasies nie op ENOMEM gestel word nie.
- Onakkurate fma funksies verwyder (XC8-2913) Die C99 standaard biblioteek fma()-familie funksies ( ) het nie 'n vermenigvuldig-optel met oneindige akkuraatheid tot 'n enkele afronding bereken nie, maar eerder opgehoopte afrondingsfoute met elke bewerking. Hierdie funksies is uit die verskafde biblioteek verwyder.
- Slegte hantering van stringomskakeling (XC8-2921, XC8-2652) Wanneer 'n 'onderwerpreeks' vir omskakeling deur strtod() bevat wat gelyk het na 'n swewendepuntgetal in eksponensiële formaat en daar was 'n onverwagte karakter na die e/E karakter, dan waar endptr verskaf is, is dit 'n adres toegeken wat dit na die karakter na die , laat verwys het, terwyl dit na die e//E karakter self moes wys, aangesien dit nie omgeskakel is nie. Byvoorbeeldample, strtod(“100exx”, &ep) moet 100.00 terugstuur en stel ep om na die “exx”-deel van die string te wys, terwyl die funksie die korrekte waarde teruggestuur het, maar deel “xx” van die string gestel het.
Weergawe 2.40
- Te ontspanne (XC8-2876) Wanneer die -mrelax-opsie gebruik word, het die samesteller sommige afdelings nie saam toegewys nie, wat gelei het tot minder optimale kodegroottes. Dit kon gebeur het met kode wat die nuwe MUSL-biblioteke gebruik het of met swak simbole.
- Karteringkenmerk nie gedeaktiveer soos in waarskuwing gestel nie (XC8-2875) Die const-data-in-config-mapped-progmem-kenmerk is afhanklik daarvan dat die const-data-in-progmem-kenmerk geaktiveer word. As die const-data-in-config-mapped-progmem-kenmerk uitdruklik geaktiveer is met die opsie en die const-data-in-progmem-kenmerk is gedeaktiveer, het die skakelstap misluk, ten spyte van 'n waarskuwingsboodskap wat sê dat die const-data-in -config-mapped-progmem-kenmerk is outomaties gedeaktiveer, wat nie heeltemal korrek was nie. Die const-data-in-config-mapped-progmem-kenmerk is nou volledig gedeaktiveer in hierdie situasie.
- DFP-veranderinge om korrek toegang tot NVMCTRL (XC8-2848) te verkry Die aanlooptydbeginkode wat deur AVR64EA-toestelle gebruik word, het nie in ag geneem dat die NVMCTRL-register onder Configuration Change Protection (CCP) was en nie die IO SFR kon stel op die bladsy wat gebruik is nie deur die const-data-in-config-mapped-progmem samestellerkenmerk. Veranderinge wat in AVR-Ex_DFP weergawe 2.2.55 gemaak is, sal toelaat dat die aanlooptydopstartkode korrek na hierdie register skryf.
- DFP-veranderinge om flitskartering te vermy (XC8-2847) 'n Oplossing vir 'n probleem met die flitskarteringtoestelkenmerk wat in die AVR128DA28/32/48/64 Silicon Errata (DS80000882) gerapporteer is, is geïmplementeer. Die const-data-in-config-mapped-progmem samestellerkenmerk sal nie by verstek toegepas word vir geaffekteerde toestelle nie, en hierdie verandering sal in AVR-Dx_DFP weergawe 2.2.160 verskyn.
- Boufout met sinhf of coshf (XC8-2834) Pogings om die sinhf()- of coshf()-biblioteekfunksies te gebruik het gelei tot 'n skakelfout, wat 'n onbepaalde verwysing beskryf. Die ontbrekende funksie waarna verwys word, is nou by die samestellerverspreiding ingesluit.
- Bou foute met nopa (XC8-2833) Deur die nopa-kenmerk te gebruik met 'n funksie waarvan die samestellernaam gespesifiseer is deur __asm__() te gebruik, het foutboodskappe van die samesteller geaktiveer. Hierdie kombinasie is nie moontlik nie.
- Variadiese funksie mislukking met wyser argumente (XC8-2755, XC8-2731) Funksies met 'n veranderlike aantal argumente verwag dat 24-bis (__memx tipe) wysers deurgegee word in die veranderlike argument lys wanneer die const-data-in-progmem kenmerk is aangeskakel. Argumente wat verwysings na datageheue was, is deurgegee as 16-bis-voorwerpe, wat kode-fout veroorsaak het toe hulle uiteindelik gelees is. Wanneer die const-data-in-progmem-kenmerk geaktiveer is, word alle 16-bis-wysersargumente nou omgeskakel na 24-bis-wysers.
- strtoxxx-biblioteekfunksies misluk (XC8-2620) Toe const-data-in-progmem-kenmerk geaktiveer is, is die endptr-parameter in die strtoxxx-biblioteekfunksies nie behoorlik opgedateer vir bronstring-argumente wat nie in programgeheue is nie.
- Waarskuwings vir ongeldige uitsendings (XC8-2612) Die samesteller sal nou 'n fout uitreik as const-in-progmem-kenmerk geaktiveer is en die adres van 'n string letterlik word eksplisiet na data-adresspasie uitgesaai (wat die const-kwalifiseerder laat val), bv.ample, (uint8_t *) "Hallo Wêreld!" . 'n Waarskuwing is kwessie as die adres ongeldig kan wees wanneer 'n konstante datawyser eksplisiet na die data-adresspasie gegooi word.
- Plasing van ongeïnisialiseerde konstante voorwerpe (XC8-2408) Ongeinitialiseerde en konstante vlugtige voorwerpe konst.
is nie in programgeheue geplaas op toestelle wat die hele of 'n deel van hul programgeheue in die data-adresspasie karteer nie. Vir hierdie toestelle word sulke voorwerpe nou in programgeheue geplaas, wat hul werking in ooreenstemming met ander toestelle maak.
Weergawe 2.39 (Funksionele Veiligheidsvrystelling)
Geen.
Weergawe 2.36
Fout tydens vertraging (XC8-2774) Geringe veranderinge in die verstek Free-modus-optimalisasies het die konstante vou van operand-uitdrukkings na die ingeboude vertragingsfunksies verhoed, wat daartoe gelei het dat hulle as nie-konstante behandel is en die fout veroorsaak: __builtin_avr_delay_cycles verwag 'n samestellingstydheelgetal konstant.
Weergawe 2.35
- Aaneenlopende toekenning met behulp van __at (XC8-2653) Aaneenlopende toekenning van veelvuldige voorwerpe in 'n afdeling met dieselfde naam en met behulp van __at() het nie korrek gewerk nie. Byvoorbeeldample:
const char arr1[] __kenmerk__((afdeling(“.mysec”))) __at (0x500) = {0xAB, 0xCD}; const char arr2[] __kenmerk__((afdeling(“.mysec”))) = {0xEF, 0xFE}; moes arr2 onmiddellik na arr1 geplaas het - Spesifikasie van afdeling-beginadresse (XC8-2650) Die -Wl,–afdeling-begin-opsie kon stilweg nie afdelings by die genomineerde beginadres plaas nie. Hierdie kwessie is reggestel vir enige afdelings met 'n pasgemaakte naam; dit sal egter nie werk vir enige standaardafdelings, soos .text of .bss, wat met 'n -Wl,-T-opsie geplaas moet word nie. Koppeler val ineen wanneer ontspan (XC8-2647) Toe die -mrelax-optimering geaktiveer is en daar kode- of dataafdelings was wat nie in die beskikbare geheue gepas het nie, het die skakelaar omgeval. Nou, in so 'n omstandighede, word foutboodskappe eerder uitgereik.
- Geen geen-terugval nie (XC8-2646) Die –nofallback-opsie is nie korrek geïmplementeer nie, en ook nie gedokumenteer nie. Dit kan nou gekies word om te verseker dat die samesteller nie terugval na 'n laer optimaliseringsinstelling as die samesteller ongelisensieer is nie, en eerder 'n fout sal uitreik.
- Onvanpaste spoedoptimalisasies (XC8-2637) Prosedurele abstraksieoptimalisasies is geaktiveer wanneer vlak 3-optimalisasies (-O3) gekies is. Hierdie optimaliserings verminder kodegrootte ten koste van kodespoed, dus moes nie uitgevoer gewees het nie.
- Slegte EEPROM-toegang (XC8-2629) Die eeprom_read_block-roetine het nie korrek op Xmega-toestelle gewerk toe die – mconst-data-in-progmem opsie geaktiveer is (wat die verstektoestand is), wat daartoe gelei het dat EEPROM-geheue nie korrek gelees is nie.
- Ongeldige geheue toekenning (XC8-2593, XC8-2651) Wanneer die -Ttext of -Tdata koppel opsie (bv.ample deurgegaan deur 'n -Wl bestuurder opsie) gespesifiseer is, die ooreenstemmende teks/datastreek oorsprong is opgedateer; die eindadres is egter nie dienooreenkomstig aangepas nie, wat daartoe kon gelei het dat die streek die teikentoestel se geheuereeks oorskry het.
- Ineenstorting met oortoegeskryfde funksie (XC8-2580) Die samesteller het omgeval as 'n funksie verklaar is deur meer as een van die onderbreking-, sein- of nmi-kenmerke te gebruik, bv. __attribuut__((__sein__, __interrupt__)).
- Ongeldige ATtiny-onderbrekingskode (XC8-2465) Toe die bou vir ATtiny-toestelle en die optimaliserings gedeaktiveer is (-O0), het onderbrekingsfunksies dalk operand buite bereik geaktiveer
- Opsies word nie deurgegee nie (XC8-2452) Wanneer die -Wl-opsie met veelvuldige, komma-geskeide koppelopsies gebruik word, is nie al die koppelopsies na die koppelaar oorgedra nie.
- Fout indirek lees van programgeheue (XC8-2450) In sommige gevalle het die samesteller 'n interne fout (onherkenbare insn ) geproduseer wanneer 'n waarde van twee grepe van 'n wyser na programgeheue gelees is
Weergawe 2.32
Tweede toegang tot biblioteek misluk (XC8-2381) Om die Windows-weergawe van die xc8-ar.exe-biblioteekargiveerder 'n tweede keer op te roep om toegang tot 'n bestaande biblioteekargief te verkry, het dalk misluk met 'n foutboodskap wat nie kan hernoem nie.
Weergawe 2.31
Onverklaarbare samesteller-foute (XC8-2367) Wanneer dit op Windows-platforms uitgevoer word wat die stelsel se tydelike gids op 'n pad gestel het wat 'n kolletjie '.' ingesluit het. karakter, kon die samesteller moontlik nie uitgevoer word nie.
Weergawe 2.30
- Globale etikette misplaas na uiteensetting (XC8-2299) Handgeskrewe samestellingkode wat globale etikette binne samestellingreekse plaas wat deur prosedurele abstraksie uitgewerk word, is moontlik nie korrek herposisioneer nie.
- 'n Ontspannende ineenstorting (XC8-2287) Die gebruik van die -mrelax-opsie kon dalk veroorsaak het dat die skakelaar ineenstort wanneer stertspring-ontspanningsoptimalisasies probeer het om ret-instruksie te verwyder wat nie aan die einde van 'n afdeling was nie.
- Ineenstorting wanneer etikette as waardes geoptimeer word (XC8-2282) Kode wat die "Labels as values" GNU C-taaluitbreiding gebruik, kon veroorsaak het dat die prosedurele abstraksie-optimalisasies ineenstort, met 'n reeksspan-fixupfout.
- Not so const (XC8-2271) Die prototipes vir strstr() en ander funksies van nie meer die nie-standaardkwalifiseerder op teruggestuurde stringwysers spesifiseer wanneer die const -mconst-data-in-progmem-kenmerk gedeaktiveer is nie. Let daarop dat hierdie kenmerk permanent geaktiveer is met avrxmega3- en avrtiny-toestelle.
- Verlore initialiseerders (XC8-2269) Wanneer meer as een veranderlike in 'n vertaaleenheid in 'n afdeling geplaas is (met __seksie of __kenmerk__((afdeling)) ), en die eerste sodanige veranderlike is nul geïnisialiseer of het nie 'n inisialiseerder gehad nie, inisialiseerders vir ander veranderlikes in dieselfde vertaaleenheid wat in dieselfde afdeling geplaas is, het verlore gegaan.
Weergawe 2.29 (Funksionele Veiligheidsvrystelling)
Geen.
Weergawe 2.20
- Fout met lang opdragte (XC8-1983) Wanneer 'n AVR-teiken gebruik word, kan die samesteller gestop het met 'n lêer nie gevind nie, as die opdragreël uiters groot was en spesiale karakters bevat het soos aanhalingstekens, agterste skuinsstreepies, ens.
- Ontoegekende rodata-afdeling (XC8-1920) Die AVR-skakelaar kon nie geheue toewys vir gepasmaakte rodata-afdelings tydens die bou van avrxmega3- en avrtiny-argitekture nie, wat moontlik geheue-oorvleuelingsfoute veroorsaak
Weergawe 2.19 (Funksionele Veiligheidsvrystelling)
Geen.
Weergawe 2.10
- Hervestigingsmislukkings (XC8-1891) Die beste gepaste toewyser was om geheue 'gate' tussen seksies te laat na skakelaar-verslapping. Afgesien van die fragmentering van geheue, het dit die moontlikheid verhoog dat daar foute in verbandverskuiwing is wat verband hou met rekenaarverwante spronge of oproepe wat buite bereik raak.
- Instruksies wat nie deur ontspanning getransformeer is nie (XC8-1889) Koppelverslapping het nie plaasgevind vir spring- of oproepinstruksies waarvan die teikens bereikbaar word as dit ontspan word nie.
- Vermis funksionaliteit (XC8E-388) Verskeie definisies van , soos clock_div_t en clock_prescale_set() , is nie gedefinieer vir toestelle nie, insluitend die ATmega324PB, ATmega328PB, ATtiny441 en ATtiny841.
- Ontbrekende makro's Die voorverwerker-makro's _XC8_MODE_, __XC8_VERSION, __XC en __XC8 word outomaties deur die samesteller gedefinieer. Hierdie is nou beskikbaar.
Weergawe 2.05
- Interne samestellerfout (XC8-1822) Wanneer onder Windows gebou word, kan 'n interne samestellerfout veroorsaak word tydens die optimalisering van kode.
- RAM-oorvloei nie bespeur nie (XC8-1800, XC8-1796) Programme wat daardie beskikbare RAM oorskry, is in sommige situasies nie deur die samesteller bespeur nie, wat gelei het tot 'n runtime-kodefout.
- Weggelaat flitsgeheue (XC8-1792) Vir avrxmega3 en avrtiny toestelle, is dele van die flitsgeheue dalk ongeprogrammeer deur die MPLAB X IDE.
- Versuim om hoof uit te voer (XC8-1788) In sommige situasies waar die program geen globale veranderlikes gedefinieer het nie, het die aanlooptydopstartkode nie uitgegaan nie en is die hoof()-funksie nooit bereik nie.
- Verkeerde geheue-inligting (XC8-1787) Vir avrxmega3- en avrtiny-toestelle het die avr-grootte program gerapporteer dat leesalleen-data RAM in plaas van programgeheue verbruik.
- Verkeerde programgeheue gelees (XC8-1783) Projekte wat saamgestel is vir toestelle met programgeheue wat in die data-adresspasie gekarteer is en wat voorwerpe definieer deur die PROGMEM-makro/kenmerk te gebruik, het moontlik hierdie voorwerpe vanaf die verkeerde adres gelees.
- Interne fout met kenmerke (XC8-1773) 'n Interne fout het voorgekom as jy wyserobjekte met die __at() of kenmerk()-tekens tussen die wysernaam en derverwysde tipe gedefinieer het, bv.ample, char * __at(0x800150) cp; 'n Waarskuwing word nou uitgereik as so 'n kode teëgekom word.
- Versuim om hoof uit te voer (XC8-1780, XC8-1767, XC8-1754) Die gebruik van EEPROM-veranderlikes of die definisie van versmeltings met behulp van die konfig-pragma kan moontlik verkeerde data-inisialisering en/of programuitvoering in die aanlooptyd-opstartkode veroorsaak het voordat hoof( ).
- Sekeringfout met klein toestelle (XC8-1778, XC8-1742) Die attiny4/5/9/10/20/40-toestelle het 'n verkeerde lontlengte gespesifiseer in hul koplêers wat lei tot koppelfoute wanneer probeer om kode te bou wat smelte definieer .
- Segmentasiefout (XC8-1777) 'n Intermitterende segmenteringsfout is reggestel.
- Assembler crash (XC8-1761) Die avr-as assembler het dalk neergestort toe die samesteller onder Ubuntu 18 uitgevoer is.
- Voorwerpe nie uitgevee nie (XC8-1752) Ongeinitialiseerde statiese stoortydsduurvoorwerpe is dalk nie deur die aanlooptydbeginkode uitgevee nie.
- Konflikerende toestelspesifikasie geïgnoreer (XC8-1749) Die samesteller het nie 'n fout gegenereer toe veelvuldige toestelspesifikasie-opsies gebruik is en verskillende toestelle aangedui het nie.
- Geheue korrupsie deur hoop (XC8-1748) Die __hoop_begin simbool is verkeerd gestel, wat gelei het tot die moontlikheid dat gewone veranderlikes deur die hoop beskadig word.
- Skakelaarhervestigingsfout (XC8-1739) 'n Koppelverskuiwingsfout is dalk vrygestel wanneer kode 'n rjmp of roproep bevat het met 'n teiken presies 4k grepe weg.
Weergawe 2.00
Geen.
Bekende kwessies
Die volgende is beperkings in die samesteller se werking. Dit kan algemene koderingsbeperkings wees, of afwykings van inligting vervat in die gebruikershandleiding. Die etiket(te) tussen hakies in die titel is daardie kwessie se identifikasie in die opsporingsdatabasis. Dit kan tot voordeel wees as jy ondersteuning moet kontak. Daardie items wat nie etikette het nie, is beperkings wat modi operandi beskryf en wat waarskynlik permanent van krag sal bly.
MPLAB X IDE-integrasie
- MPLAB IDE-integrasie As Compiler vanaf MPLAB IDE gebruik moet word, moet jy MPLAB IDE installeer voordat jy Compiler installeer.
- Skikking ontfoutingsinligting (XC8-3157) Die ontfoutingsinligting wat deur die samesteller geproduseer word, dra nie die objektipe vir skikkings in die __memx-adresspasie akkuraat oor nie. Dit sal waarneming van die voorwerp in 'n IDE voorkom.
Kode Generasie
- Segfault met seksie-ankers-opsie (XC8-3045) Program wat funksies met veranderlike argumentlyste gedefinieer het en wat die -fsection-anchors-opsie gebruik het dalk 'n interne samestellerfout veroorsaak: Segmentasiefout
- Ontfout inligting nie gesinchroniseer nie (XC8-2948) Wanneer skakelaarontspanningsoptimalisasies instruksies krimp (bv.ample call to rcall-instruksies), sal bronlyn-na-adres-kartering dalk nie gesinkroniseer bly wanneer daar meer as een krimpbewerking in 'n afdeling plaasvind nie. In die onderstaande example, daar is twee oproepe na foo wat uiteindelik ontspanne is na relatiewe oproepe.
- PA-geheuetoewysingsfout (XC8-2881) Wanneer die prosedurele abstraksieoptimeerders gebruik word, kan die koppelaar geheuetoewysingsfoute rapporteer wanneer kodegrootte naby aan die hoeveelheid beskikbare programgeheue op die toestel is, alhoewel die program in staat behoort te wees om die beskikbare spasie.
- Nie so slim nie Smart-IO (XC8-2872) Die samesteller se slim-io-kenmerk sal geldige maar sub-optimale kode vir die snprintf-funksie genereer as die const-data-in-progmem-kenmerk gedeaktiveer is of as die toestel al sy flits gekarteer in data geheue.
- Selfs minder slim Smart-IO (XC8-2869) Die samesteller se slim-io kenmerk sal geldige maar sub-optimale kode genereer wanneer die -flto en -fno-ingeboude opsies albei gebruik word.
- Suboptimale leesalleen-dataplasing (XC8-2849) Die skakelaar is tans nie bewus van die APPCODE- en APPDATA-geheueafdelings nie, en ook nie die [No-]Read-While-Write-afdelings in die geheuekaart nie. As gevolg hiervan is daar 'n klein kans dat die skakelaar leesalleen-data in 'n ongeskikte geheue-area kan toeken. Die kans op misplaaste data verhoog as die const-data-in-progmem-kenmerk geaktiveer is, veral as die const-data-in-config-mapped-progmem-kenmerk ook geaktiveer is. Hierdie kenmerke kan gedeaktiveer word indien nodig.
- Objeklêerverwerkingsvolgorde (XC8-2863) Die volgorde waarin objeklêers deur die skakelaar verwerk sal word, kan verskil op grond van die gebruik van prosedurele abstraksieoptimalisasies (-mpa-opsie). Dit sal slegs kode beïnvloed wat swak funksies oor verskeie modules definieer.
- Koppelerfout met absolute (XC8-2777) Wanneer 'n objek by 'n adres aan die begin van RAM absoluut gemaak is en ongeinitialiseerde voorwerpe ook gedefinieer is, kan 'n koppelfout geaktiveer word.
- Kort wakker-ID's (XC8-2775) Vir ATA5700/2-toestelle word die PHID0/1-registers slegs gedefinieer as 16 bisse wyd, eerder as 32 bisse wyd.
- Skakelaar-ongeluk wanneer simbool roep (XC8-2758) Die skakelaar kan ineenstort as die -mrelax-bestuurder-opsie gebruik word wanneer die bronkode 'n simbool roep wat gedefinieer is deur die – Wl,–defsym koppelopsie.
- Verkeerde inisialisering (XC8-2679) Daar is 'n verskil tussen waar die aanvanklike waardes vir sommige globale/statiese greepgrootte voorwerpe in datageheue geplaas word en waar toegang tot die veranderlikes tydens looptyd verkry sal word.
- Slegte indirekte funksie-oproepe (XC8-2628) In sommige gevalle kan funksie-oproepe wat gemaak word via 'n funksiewyser wat as deel van 'n struktuur gestoor is, misluk.
- strtof gee nul vir heksadesimale floats (XC8-2626) Die biblioteekfunksies strtof() et al en scanf() et al, sal altyd 'n heksadesimale swewende-puntgetal wat nie 'n eksponent spesifiseer na nul, omskakel nie. Byvoorbeeldample: strtof(“0x1”, &endptr); sal die waarde 0 terugstuur, nie 1 nie.
- Onakkurate stapel adviseur boodskappe (XC8-2542, XC8-2541) In sommige gevalle word die stapel adviseur waarskuwing rakende herhaling of onbepaalde stapel gebruik (moontlik deur die gebruik van alloca()) nie uitgestuur nie.
- Mislukking met duplikaatonderbrekingskode (XC8-2421) Waar meer as een onderbrekingsfunksie dieselfde liggaam het, kan die samesteller die afvoer vir een onderbrekingsfunksie die ander hê. Dit sal daartoe lei dat alle oproep-geklobberde registers onnodig gestoor word, en die onderbrekings sal geaktiveer word selfs voordat die epiloog van die huidige onderbreking-hanteerder geloop het, wat kan lei tot kodefout.
- Slegte uitvoer met ongeldige DFP-pad (XC8-2376) As die samesteller met 'n ongeldige DFP-pad opgeroep word en 'n 'spesifikasie'-lêer bestaan vir die geselekteerde toestel, rapporteer die samesteller nie die ontbrekende toestelfamiliepakket nie en kies eerder die 'spesifikasie' lêer, wat dan tot 'n ongeldige uitvoer kan lei. Die 'spesifikasie'-lêers is dalk nie op datum met die verspreide DFP's nie en was slegs bedoel vir gebruik met interne samestellertoetsing.
- Geheue-oorvleueling ongemerk (XC8-1966) Die samesteller bespeur nie die geheue-oorvleueling van voorwerpe wat absoluut gemaak is by 'n adres (via __at()) en ander voorwerpe wat die __section()-spesifiseerder gebruik en wat aan dieselfde adres gekoppel is.
- Mislukking met biblioteekfunksies en __memx (XC8-1763) Genoemde libgcc-float-funksies met 'n argument in die __memx-adresspasie kan dalk misluk. Let daarop dat biblioteekroetines van sommige C-operateurs geroep word, dus bvample, die volgende kode word geraak: return regFloatVar > memxFloatVar;
- Beperkte libgcc implementering (AVRTC-731) Vir die ATTiny4/5/9/10/20/40 produkte is die standaard C / Math biblioteek implementering in libgcc baie beperk of nie teenwoordig nie.
- Programgeheuebeperkings (AVRTC-732) Programgeheuebeelde groter as 128 kb word deur die gereedskapketting ondersteun; daar is egter bekende gevalle van skakelaar aborteer sonder ontspanning en sonder 'n nuttige foutboodskap eerder as om die vereiste funksie stompe te genereer wanneer die -mrelax opsie gebruik word.
- Naamspasiebeperkings (AVRTC-733) Benoemde adresspasies word deur die gereedskapketting ondersteun, onderhewig aan die beperkings genoem in die gebruikersgidsafdeling Spesiale Tipe Kwalifiekers.
- Tydsones Die biblioteekfunksies neem GMT aan en ondersteun nie plaaslike tydsones nie, dus sal localtime() dieselfde tyd as gmtime() terugkeer, bv.ample.
Dokumente / Hulpbronne
![]() |
MICROCHIP XC8 C-samestellerweergawe 2.45 vrystellingsnotas vir AVR MCU [pdf] Instruksies AVR MCU, XC8 C, XC8 C-samestellerweergawe 2.45 vrystellingsnotas vir AVR MCU, samestellerweergawe 2.45 vrystellingsnotas vir AVR MCU, weergawe 2.45 vrystellingsnotas vir AVR MCU, vrystellingsaantekeninge vir AVR MCU, notas vir AVR MCU, AVR MCU |

