MIKROČIP-LOGO

MICROCHIP XC8 C kompajler verzija 2.45 Napomene o izdanju za AVR MCU

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

Informacije o proizvodu

MPLAB XC8 C kompajler je softverski alat koji se koristi za ciljanje Microchip AVR uređaja. Dizajniran je za prevođenje C koda i generiranje izvršne datoteke files za ove uređaje. Verzija kompajlera koja se spominje u ovom korisničkom priručniku je 2.45, sa službenim datumom izgradnje 18. kolovoza 2023. Prethodna verzija bila je 2.41, izgrađena 8. veljače 2023. Kompajler dolazi s Priručnikom za funkcionalnu sigurnost koji pruža dodatne informacije i smjernice pri korištenju MPLAB XC kompilatora s aplikacijama za funkcionalnu sigurnost. Ovaj priručnik uključen je u paket dokumentacije kada kupite licencu za funkcionalnu sigurnost. MPLAB XC8 C kompajler podržava sve dostupne 8-bitne AVR MCU uređaje u trenutku izdavanja. Možete pogledati avr_chipinfo.html file u direktoriju dokumenata prevoditelja za popis svih podržanih uređaja i njihovih postavki konfiguracijskih bitova. Dostupna su različita izdanja MPLAB XC8 kompajlera. Licencirano (PRO) izdanje pruža višu razinu optimizacije u usporedbi s besplatnim izdanjem. Za aktivaciju kompajlera kao licenciranog proizvoda morate kupiti aktivacijski ključ. Međutim, nelicencirana verzija može se koristiti neograničeno dugo bez licence. Za aplikacije funkcionalne sigurnosti dostupan je kompajler MPLAB XC8 Functional Safety. Za aktivaciju je potrebna licenca za funkcionalnu sigurnost kupljena od Microchipa. Nakon aktivacije mogu se koristiti sve razine optimizacije i značajke prevoditelja. MPLAB XC Functional Safety Compiler također podržava mrežnu poslužiteljsku licencu. Detaljne informacije o instalaciji, aktivaciji, vrstama licenci i pitanjima migracije mogu se pronaći u dokumentu Instaliranje i licenciranje MPLAB XC C prevodilaca (DS50002059).

Upute za uporabu proizvoda

  1. Prije pokretanja softvera MPLAB XC8 C Compiler, pročitajte korisnički priručnik za važne informacije i upute specifične za ciljanje Microchip AVR uređaja.
  2. Ako koristite kompajler za 8-bitne PIC uređaje, pogledajte dokument MPLAB XC8 C Compiler Release Notes for PIC.
  3. Provjerite zadovoljava li vaš operativni sustav sistemske zahtjeve za pokretanje prevoditelja. Binarne datoteke za macOS potpisane su kodom i ovjerene kod javnog bilježnika. MPLAB XC Network License Server dostupan je za Microsoft Windows 10 i novije, Ubuntu 18.04 i novije te macOS 10.15 i novije. Imajte na umu da MPLAB XC Network License Server nije testiran na ovim operativnim sustavima.
  4. Poslužitelj mrežne licence MPLAB XC može se pokrenuti na virtualnim strojevima podržanog OS-a pomoću licence virtualnog stroja za mrežne licence (SW006021-VM). Sve 32-bitne verzije MPLAB XC mrežnog poslužitelja ukinute su počevši od verzije 3.00.
  5. Kako biste aktivirali MPLAB XC8 C Compiler kao licencirani (PRO) proizvod, kupite aktivacijski ključ. To će omogućiti višu razinu optimizacije u usporedbi s besplatnom verzijom. Međutim, nelicenciranim prevoditeljem može se upravljati neograničeno dugo bez licence.
  6. Ako koristite MPLAB XC8 Functional Safety Compiler za aplikacije funkcionalne sigurnosti, mora se aktivirati s licencom za funkcionalnu sigurnost kupljenom od Microchipa. Kompajler neće raditi bez ove licence. Nakon aktivacije možete odabrati bilo koju razinu optimizacije i koristiti sve značajke prevoditelja. Licenca mrežnog poslužitelja podržana je ovim izdanjem MPLAB XC Functional Safety Compiler-a.
  7. Za detaljne upute o instalaciji, aktivaciji i licenciranju MPLAB XC8 C prevoditelja, pogledajte dokument Instaliranje i licenciranje MPLAB XC C prevodilaca (DS50002059).
  8. Ako koristite kompilator pod licencom za procjenu, primit ćete upozorenje tijekom kompilacije u roku od 14 dana od završetka vašeg razdoblja procjenjivanja. Isto se upozorenje izdaje ako ste u roku od 14 dana od isteka HPA pretplate.

Nadview

Uvod
Ovo izdanje Microchip MPLAB® XC8 C kompajlera sadrži nekoliko novih značajki, ispravke grešaka i podršku za nove uređaje.

Datum izrade
Službeni datum izgradnje ove verzije prevoditelja je 18. kolovoza 2023.

Prethodna verzija
Prethodna verzija MPLAB XC8 C kompajlera bila je 2.41, izgrađena 8. veljače 2023.

Priručnik o funkcionalnoj sigurnosti
Priručnik za funkcionalnu sigurnost za MPLAB XC kompajlere dostupan je u paketu dokumentacije kada kupite licencu za funkcionalnu sigurnost.

Licence i verzije komponenti
MPLAB XC8 C kompajler za AVR MCU alate napisan je i distribuiran pod GNU Općom javnom licencom (GPL), što znači da je njegov izvorni kod besplatno distribuiran i dostupan javnosti. Izvorni kod za alate pod GNU GPL može se preuzeti odvojeno od Microchipa webmjesto. Možete pročitati GNU GPL u file named nalazi poddirektorij vašeg instalacijskog direktorija. Ovdje se može pronaći opća rasprava o načelima na kojima se temelji GPL. Kôd podrške osiguran za zaglavlje files, skripte povezivača i biblioteke vremena izvođenja vlasnički su kod i nisu obuhvaćeni GPL-om. Ovaj prevoditelj je implementacija GCC verzije 5.4.0, binutils verzije 2.26 i koristi avr-libc verziju 2.0.0.

Zahtjevi sustava
MPLAB XC8 C kompajler i softver za licenciranje koji koristi dostupni su za razne operativne sustave, uključujući 64-bitne verzije sljedećeg: profesionalna izdanja Microsoft® Windows® 10, Ubuntu® 18.04, macOS® 13.2 (Ventura) i Fedora 34. Binarne datoteke za Windows su potpisane kodom. Binarne datoteke za macOS potpisane su kodom i ovjerene kod javnog bilježnika. MPLAB XC Network License Server dostupan je za razne 64-bitne operativne sustave, uključujući Microsoft Windows 10 i novije; Ubuntu 18.04 i noviji; ili macOS 10.15 i noviji. Poslužitelj također može raditi na raznim drugim operativnim sustavima uključujući Windows Server, Linux distribucije, kao što su Oracle® Enterprise Linux® i Red Hat® Enterprise Linux kao i starije verzije podržanih operativnih sustava. Međutim, MPLAB XC Network License Server nije testiran na ovim operativnim sustavima. Poslužitelj mrežne licence MPLAB XC može se pokrenuti na virtualnim strojevima podržanog OS-a pomoću licence virtualnog stroja za mrežne licence (SW006021-VM). Sve 32-bitne verzije MPLAB XC mrežnog poslužitelja ukinute su počevši od verzije 3.00.

Podržani uređaji
Ovaj kompajler podržava sve dostupne 8-bitne AVR MCU uređaje u vrijeme izdavanja. Pogledajte avr_chipinfo.html (u direktoriju dokumenata prevoditelja) za popis svih podržanih uređaja. Ove datoteke također navode postavke konfiguracijskih bitova za svaki uređaj.

Izdanja i nadogradnje licence
Kompajler MPLAB XC8 može se aktivirati kao licencirani (PRO) ili nelicencirani (besplatni) proizvod. Morate kupiti aktivacijski ključ da biste licencirali svoj kompajler. Licenca omogućuje višu razinu optimizacije u usporedbi s besplatnim proizvodom. Nelicenciranim prevoditeljem može se upravljati neograničeno vrijeme bez licence. Kompajler MPLAB XC8 Functional Safety mora se aktivirati s licencom za funkcionalnu sigurnost kupljenom od Microchipa. Kompajler neće raditi bez ove licence. Nakon aktivacije možete odabrati bilo koju razinu optimizacije i koristiti sve značajke prevoditelja. Ovo izdanje MPLAB XC Functional Safety Compiler-a podržava licencu mrežnog poslužitelja. Pogledajte dokument Instaliranje i licenciranje kompilatora MPLAB XC C (DS50002059) za informacije o vrstama licenci i instalaciji prevoditelja s licencom.

Instalacija i aktivacija
Također pogledajte odjeljke Problemi s migracijom i ograničenja za važne informacije o najnovijem upravitelju licenci uključenom u ovaj prevodilac. Ako koristite MPLAB IDE, svakako instalirajte najnoviji MPLAB X IDE verziju 5.0 ili noviju prije instaliranja ovog alata. Zatvorite IDE prije instaliranja kompajlera. Pokrenite aplikaciju za instalaciju prevoditelja .run (Linux) ili .app (macOS), npr. XC8-1.00.11403-windows.exe i slijedite upute na zaslonu. Preporuča se zadani instalacijski direktorij. Ako koristite Linux, morate instalirati kompajler pomoću terminala i s root računa. Instalirajte pomoću macOS računa s administratorskim ovlastima. Aktivacija se sada provodi odvojeno od instalacije. Za više informacija pogledajte dokument Upravitelj licenci za MPLAB® XC C kompajlere (DS52059). Ako odlučite pokrenuti kompilator pod licencom za procjenu, sada ćete dobiti upozorenje tijekom kompilacije kada budete unutar 14 dana od završetka vašeg razdoblja za procjenu. Isto se upozorenje izdaje ako ste u roku od 14 dana od isteka HPA pretplate. Poslužitelj mrežne licence XC zaseban je instalacijski program i nije uključen u instalacijski program prevoditelja za jednog korisnika. XC License Manager sada podržava roaming pokretnih mrežnih licenci. Namijenjena mobilnim korisnicima, ova značajka omogućuje floating licencu da se isključi iz mreže na kratko vrijeme. Pomoću ove značajke možete se odspojiti s mreže i dalje koristiti svoj MPLAB XC kompajler. Više o ovoj značajci potražite u mapi doc XCLM instalacije. MPLAB X IDE uključuje prozor Licence (Alati > Licence) za vizualno upravljanje roamingom.

Rješavanje problema s instalacijom
Ako naiđete na poteškoće s instaliranjem prevoditelja pod bilo kojim od Windows operativnih sustava, pokušajte sljedeće prijedloge.

  • Pokrenite instalaciju kao administrator.
  • Postavite dopuštenja aplikacije za instalaciju na 'Potpuna kontrola'. (Desnom tipkom miša kliknite datoteku, odaberite Svojstva, karticu Sigurnost, odaberite korisnika, uredite.)
  • Postavite dopuštenja privremene mape na 'Potpuna kontrola'.

Da biste odredili lokaciju privremene mape, upišite %temp% u naredbu Pokreni (tipka s logotipom sustava Windows + R). Ovo će otvoriti dijaloški okvir istraživača datoteka koji prikazuje taj direktorij i omogućit će vam da odredite put do te mape.

Dokumentacija kompilatora
Korisničke vodiče prevoditelja možete otvoriti s HTML stranice koja se otvara u vašem pregledniku kada kliknete plavi gumb za pomoć na nadzornoj ploči MPLAB X IDE, kao što je prikazano na snimci zaslona.MICROCHIP-XC8-C-Compiler-Version-2-45-Release-Notes-for-AVR-MCU-1

Ako gradite za 8-bitne AVR ciljeve, MPLAB® XC8 C Compiler User's Guide for AVR® MCU sadrži informacije o tim opcijama kompajlera i značajkama koje su primjenjive na ovu arhitekturu.

Korisnička podrška
Možete postavljati pitanja drugim korisnicima ovog proizvoda na forumu XC8. Microchip pozdravlja izvješća o greškama, prijedloge ili komentare u vezi s ovom verzijom prevoditelja. Sva izvješća o greškama ili zahtjeve za značajkama uputite putem sustava podrške.

Ažuriranja dokumentacije

Za on-line i ažurirane verzije MPLAB XC8 dokumentacije, molimo posjetite Microchipovu online tehničku dokumentaciju webmjesto.
Nova ili ažurirana AVR dokumentacija u ovom izdanju:

Nijedan

  • Vodič za migraciju AVR® GNU Toolchaina na MPLAB® XC8 opisuje promjene izvornog koda i mogućnosti izrade koje bi mogle biti potrebne ako odlučite migrirati projekt temeljen na jeziku C s AVR 8-bitnog GNU Toolchaina na Microchip MPLAB XC8 C prevodilac.
  • Referentni vodič za Microchip Unfied Standard Library opisuje ponašanje i sučelje funkcija koje definira Microchip Unfied Standard Library, kao i namjeravanu upotrebu tipova biblioteke i makronaredbi. Neke od ovih informacija ranije su bile sadržane u MPLAB® XC8 C Compiler User's Guide for AVR® MCU. Podaci o biblioteci specifični za uređaj i dalje su sadržani u ovom vodiču za prevoditelj.
  • Ako tek počinjete s 8-bitnim uređajima i MPLAB XC8 C kompajlerom, MPLAB® XC8 korisnički
  • Vodič za ugrađene inženjere – AVR® MCU (DS50003108) sadrži informacije o postavljanju projekata u MPLAB X IDE i pisanju koda za vaš prvi MPLAB XC8 C projekt. Ovaj vodič se sada distribuira s kompajlerom.
  • Hexmate User's Guide namijenjen je onima koji koriste Hexmate kao samostalnu aplikaciju.

Što je novo

Sljedeće su nove AVR-target značajke koje kompajler sada podržava. Broj verzije u podnaslovima označava prvu verziju prevoditelja koja podržava značajke koje slijede.

Verzija 2.45
Univerzalni upravitelj licenci (XC8-3175, XCLM-224) MacOS verzija upravitelja licencama koja se koristi s kompajlerom sada je univerzalna i nudi izvornu podršku za strojeve temeljene na Intelu i M1. Linux verzija upravitelja licenci sada zahtijeva barem verziju 2.25 glibc-a. Mac univerzalne binarne datoteke (XC8-3168, XC8-2951) Binarne datoteke prevoditelja za macOS sada su univerzalne, nudeći izvornu podršku za strojeve temeljene na Intelu i M1. Smanjene veličine biblioteke s pomičnim zarezom (XC8-3112, XC8-3071) Učinjena su poboljšanja funkcija biblioteke s pomičnim zarezom, uključujući sinf() pow(), sqrt(), expf(), log1fp() i nextafterf() , koji vide smanjenje veličine koda za ove rutine. Nova podrška za uređaje Podrška je sada dostupna za sljedeće AVR dijelove: AVR16EA28, AVR16EA32, AVR16EA48, AVR32EA28, AVR32EA32, AVR32EA48, AVR16EB14, AVR16EB20, AVR16EB28 i AVR16EB32.

Verzija 2.41

  • Podrška za bootrow (XC8-3053) Kompajler će smjestiti sadržaj svih odjeljaka s prefiksom .bootrow na adresu 0x860000 u HEX datoteci. Ovi se odjeljci koriste za BOOTROW memoriju, koja je dizajnirana za pohranjivanje ključeva i drugih sigurnih informacija kojima bi trebao pristupiti samo bootloader.
  • Eliminacija redundantnog povrata (XC8-3048) Kompajler će sada eliminirati suvišne instrukcije ret u funkcijama s repnim skokom kada se koriste prilagođene skripte povezivača. Ovo je slična optimizacija onoj prethodno provedenoj, ali sada se provodi na svim odjeljcima bez roditelja, čak i ako se koristi prilagođena skripta povezivača i nije u igri najbolja shema dodjele.
  • Promjena tipa vremena (XC8-2982, 2932) Tip C99 standardne biblioteke, time_t je promijenjen iz dugog dugog u nepredpisani dugi tip, što daje poboljšanja veličine koda u nekim funkcijama vezanim uz vrijeme, kao što je mktime().
  • Novi nop (XC8-2946, 2945) Makro NOP() je dodan u . Ova makronaredba umeće instrukciju nop no-operation u izlaz.
  • Ažuriranje na XCLM (XC8-2944) Upravitelj licenci koji se koristi s kompajlerom ažuriran je i sada bolje reagira pri provjeri pojedinosti licence kompajlera.
  • Trampolinirani pozivi (XC8-2760) Kompajler sada može izvršiti zamjenu pozivnih instrukcija dugog oblika s kraćim relativnim pozivima kada bi relativni oblici instrukcija inače bili izvan dosega svog odredišta. U ovoj situaciji, kompajler će pokušati zamijeniti rcall instrukcije u jmp pozivnu instrukciju koja će 'trampoline' izvršenje na traženu adresu, nprampono:

Verzija 2.40

  • Nova podrška za uređaje Podrška je sada dostupna za sljedeće AVR dijelove: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 i AVR64EA48.
  • Poboljšana proceduralna apstrakcija Alat za optimizaciju proceduralne apstrakcije (PA) poboljšan je tako da se može prikazati kod koji sadrži instrukcije za poziv funkcije (call/rcall). To će se dogoditi samo ako se stog ne koristi za prosljeđivanje argumenata niti za dobivanje povratne vrijednosti od funkcije. Stog se koristi kada se poziva funkcija s popisom promjenjivih argumenata ili kada se poziva funkcija koja uzima više argumenata nego što ima registara određenih za tu svrhu. Ova se značajka može onemogućiti pomoću opcije – mno-pa-outline-calls ili se proceduralna apstrakcija može u potpunosti onemogućiti za objektnu datoteku i/ili funkciju pomoću opcije -mno-pa-on-file -mno-pa-on-function, ili korištenjem atributa nopa (specifikator __nopa) selektivno s funkcijama.
  • Makro pokrivenosti koda Prevodilac sada definira makronaredbu __CODECOV ako je navedena valjana opcija -mcodecov.
  • Opcija rezervacije memorije Upravljački program xc8-cc sada će prihvatiti opciju -mreserve=space@start:end prilikom izgradnje za AVR ciljeve. Ova opcija rezervira navedeni raspon memorije u prostoru memorije podataka ili programa, sprječavajući povezivač da popuni kod ili objekte u ovom području.
  • Pametniji pametni IO Učinjeno je nekoliko poboljšanja u Smart IO funkcijama, uključujući opća podešavanja printf osnovnog koda, tretiranje %n specifikatora konverzije kao neovisne varijante, povezivanje u vararg pop rutinama na zahtjev, korištenje kraćih tipova podataka gdje je to moguće za rukovanje Argumenti IO funkcije i faktoring uobičajenog koda u rukovanju širinom polja i preciznošću. To može rezultirati značajnim uštedama koda i podataka, kao i povećanjem brzine izvršavanja IO-a.

Verzija 2.39 (funkcionalno sigurnosno izdanje)
Licenca mrežnog poslužitelja Ovo izdanje MPLAB XC8 Functional Safety Compiler podržava licencu mrežnog poslužitelja.

Verzija 2.36
Nijedan.

Verzija 2.35

  • Nova podrška za uređaje Podrška je dostupna za sljedeće AVR dijelove: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 i AVR64DD32.
  • Poboljšano prebacivanje konteksta Nova opcija -mcall-isr-prologues mijenja način na koji funkcije prekida spremaju registre pri unosu i kako se ti registri obnavljaju kada prekine rutina prekida. Radi na sličan način kao opcija -mcall-prologues, ali utječe samo na funkcije prekida (ISR).
  • Još poboljšano prebacivanje konteksta Nova opcija -mgas-isr-prologues kontrolira kod za prebacivanje konteksta generiran za rutine servisiranja malih prekida. Kada je omogućena, ova značajka će natjerati asembler da skenira ISR u potrazi za korištenjem registra i spremiti ove korištene registre samo ako je potrebno.
  • Konflabilno flash mapiranje Neki uređaji u AVR DA i AVR DB obitelji imaju SFR (npr. FLMAP) koji specificira koji će se 32k dio programske memorije mapirati u podatkovnu memoriju. Nova opcija – mconst-data-in-config-mapped-progmem može se koristiti kako bi povezivač smjestio sve kvalificirane podatke u jedan odjeljak od 32k i automatski inicijalizirao relevantni SFR registar kako bi se osiguralo da su ti podaci mapirani u prostor podatkovne memorije , gdje će mu se pristupiti učinkovitije.
  • Microchip Unfied Standard Library Svi MPLAB XC kompajleri dijelit će Microchip Unfied Standard Library, koji je sada dostupan s ovim izdanjem MPLAB XC8. MPLAB® XC8 C Compiler User's Guide for AVR® MCU više ne uključuje dokumentaciju za ove standardne funkcije. Ove se informacije sada mogu pronaći u Referentnom vodiču za Microchip Unfied Standard Library. Imajte na umu da neke funkcije koje je prethodno definirao avr-libc više nisu dostupne. (Pogledajte funkcionalnost biblioteke.)
  • Pametni IO Kao dio novih objedinjenih biblioteka, IO funkcije u obiteljima printf i scanf sada se generiraju po narudžbi za svaku verziju, na temelju načina na koji se te funkcije koriste u programu. Ovo može značajno smanjiti resurse koje koristi program.
  • Opcija pomoći za pametni IO Prilikom analize poziva funkcijama pametnog IO (kao što je printf() ili scanf(), prevodilac ne može uvijek odrediti iz niza formata ili zaključiti iz argumenata one specifikacije pretvorbe koje zahtijeva poziv. Prethodno bi prevodilac uvijek napravio bez pretpostavki i osigurati da su potpuno funkcionalne IO funkcije povezane u konačnu sliku programa. Dodana je nova opcija -msmart-io-format=fmt tako da korisnik umjesto toga može informirati kompajler o specifikacijama konverzije koje koristi pametni IO funkcije čija je upotreba dvosmislena, sprječavajući povezivanje predugih IO rutina. (Pogledajte Opciju smart-io-format za više detalja.)
  • Postavljanje prilagođenih odjeljaka Prethodno je opcija -Wl,–section-start samo postavljala navedeni odjeljak na traženu adresu kada je skripta povezivača definirala izlazni odjeljak s istim imenom. Kad to nije bio slučaj, odjeljak je postavljen na adresu koju je odabrao povezivač, a opcija je u biti zanemarena. Sada će se opcija poštovati za sve prilagođene odjeljke, čak i ako skripta povezivača ne definira odjeljak. Imajte na umu, međutim, da će za standardne odjeljke, kao što su .text, .bss ili .data, alokator koji najbolje odgovara i dalje imati potpunu kontrolu nad njihovim postavljanjem, a opcija neće imati učinka. Koristite opciju -Wl,-Tsection=addr, kao što je opisano u korisničkom priručniku.

Verzija 2.32

  • Stack Guidance Dostupno uz PRO licencu za kompajler, značajka kompilatora za stack guidance može se koristiti za procjenu maksimalne dubine bilo kojeg stoga koji koristi program. Konstruira i analizira graf poziva programa, utvrđuje korištenje stogova svake funkcije i proizvodi izvješće iz kojeg se može zaključiti o dubini stogova koje koristi program. Ova je značajka omogućena putem opcije naredbenog retka -mchp-stack-usage. Sažetak upotrebe stoga ispisuje se nakon izvođenja. Detaljno izvješće o skupu dostupno je u datoteci mape, koja se može zatražiti na uobičajeni način.
  • Nova podrška za uređaje Podrška je dostupna za sljedeće AVR dijelove: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 i AVR32DB48.
  • Podrška za povučeni uređaj Podrška više nije dostupna za sljedeće AVR dijelove: AVR16DA28, AVR16DA32 i AVR16DA48.

Verzija 2.31
Nijedan.

Verzija 2.30

  • Nova opcija za sprječavanje inicijalizacije podataka Nova opcija upravljačkog programa -mno-data-init sprječava inicijalizaciju podataka i brisanje bss odjeljaka. Djeluje tako da potiskuje izlaz simbola do_clear_bss u asemblerskim datotekama, što će zauzvrat spriječiti uključivanje tih rutina od strane povezivača.
  • Poboljšane optimizacije Napravljena su brojna poboljšanja optimizacije, uključujući uklanjanje suvišnih povratnih instrukcija, uklanjanje nekih skokova nakon instrukcije preskoči ako je bit-je te poboljšana proceduralna apstrakcija i mogućnost ponavljanja ovog procesa.
    Sada su dostupne dodatne opcije za kontrolu nekih od ovih optimizacija, posebno -fsection- sidra, koja dopuštaju pristup statičkim objektima koji se izvode u odnosu na jedan simbol; -mpa- iterations=n, što dopušta promjenu broja ponavljanja proceduralne apstrakcije sa zadanih 2; i -mpa-callcost-shortcall, koji izvodi agresivniju proceduralnu apstrakciju, u nadi da povezivač može opustiti duge pozive. Ova posljednja opcija može povećati veličinu koda ako temeljne pretpostavke nisu ostvarene.
  • Nova podrška za uređaje Podrška je dostupna za sljedeće AVR dijelove: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 i A VR128DB64.
  • Podrška za uvučene uređaje Podrška više nije dostupna za sljedeće AVR dijelove: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C i ATA664251.

Verzija 2.29 (funkcionalno sigurnosno izdanje)

  • Datoteka zaglavlja za ugrađene kompajlere Kako bi se osiguralo da prevodilac može biti usklađen sa specifikacijama jezika kao što je MISRA, , je ažurirano. Ovo zaglavlje sadrži prototipove za sve ugrađene funkcije, kao što su __builtin_avr_nop() i __builtin_avr_delay_cycles(). Neki ugrađeni elementi možda nisu usklađeni s MISRA-om; oni se mogu izostaviti dodavanjem define __XC_STRICT_MISRA u naredbeni redak prevoditelja. Ugrađeni elementi i njihove deklaracije ažurirani su za korištenje tipova fiksne širine.

Verzija 2.20

  • Nova podrška za uređaje Podrška je dostupna za sljedeće AVR dijelove: ATTINY1624, ATTINY1626 i ATTINY1627.
  • Bolja dodjela najbolje fit alokacije Najbolje fit alokator (BFA) u kompajleru je poboljšan tako da se odjeljci dodjeljuju redoslijedom koji omogućuje bolju optimizaciju. BFA sada podržava imenovane adresne prostore i bolje obrađuje inicijalizaciju podataka.
  • Poboljšana proceduralna apstrakcija Optimizacije proceduralne apstrakcije sada se izvode na više sekvenci koda. Prethodne situacije u kojima je ova optimizacija mogla povećati veličinu koda riješene su tako što je optimizacijski kod bio svjestan procesa skupljanja smeća povezivača.
  • Odsutnost AVR asemblera AVR asembler više nije uključen u ovu distribuciju.

Verzija 2.19 (funkcionalno sigurnosno izdanje)
Nijedan.

Verzija 2.10

  • Pokrivenost koda Ovo izdanje uključuje značajku pokrivenosti koda koja olakšava analizu opsega do kojeg je izvorni kod projekta izvršen. Koristite opciju -mcodecov=ram da biste je omogućili. Nakon izvođenja programa na vašem hardveru, informacije o pokrivenosti koda će se prikupiti u uređaju, a to se može prenijeti i prikazati u MPLAB X IDE putem dodatka za pokrivenost koda. Pogledajte IDE dokumentaciju za informacije o ovom dodatku koji se mogu dobiti.
    #pragma nocodecov može se koristiti za isključivanje naknadnih funkcija iz analize pokrivenosti. Idealno bi pragmu trebalo dodati na početak datoteke kako bi se cijela datoteka isključila iz analize pokrivenosti. Alternativno, __atribut__((nocodecov)) može se koristiti za isključivanje određene funkcije iz analize pokrivenosti.
  • Datoteke opisa uređaja Nova datoteka uređaja pod nazivom avr_chipinfo.html nalazi se u direktoriju dokumenata distribucije prevoditelja. Ova datoteka navodi sve uređaje koje podržava kompajler. Kliknite na naziv uređaja i otvorit će se stranica koja prikazuje sve dopuštene parove postavki/vrijednosti konfiguracijskih bitova za taj uređaj, s npr.amples.
  • Proceduralna apstrakcija Optimizacije proceduralne apstrakcije, koje zamjenjuju uobičajene blokove asemblerskog koda pozivima ekstrahirane kopije tog bloka, dodane su prevoditelju. Njih izvodi zasebna aplikacija, koju prevodilac automatski poziva prilikom odabira optimizacije razine 2, 3 ili s. Ove optimizacije smanjuju veličinu koda, ali mogu smanjiti brzinu izvršenja i mogućnost uklanjanja pogrešaka koda. Proceduralna apstrakcija može se onemogućiti na višim razinama optimizacije pomoću opcije -mno-pa ili se može omogućiti na nižim razinama optimizacije (ovisno o vašoj licenci) pomoću -mpa. Može se onemogućiti za objektnu datoteku pomoću -mno-pa-on-file=filename , ili onemogućeno za funkciju pomoću -mno-pa-on- function=function. Unutar vašeg izvornog koda, proceduralna apstrakcija može se onemogućiti za funkciju korištenjem __attribute__((nopa)) s definicijom funkcije ili korištenjem __nopa, koji se proširuje na __attribute__((nopa,noinline)) i na taj način sprječava umetanje funkcija i postoji apstrakcija ugrađenog koda.
  • Podrška za zaključavanje bitova u pragmi #pragma config sada se može koristiti za određivanje AVR bitova za zaključavanje kao i ostalih konfiguracijskih bitova. Provjerite datoteku avr_chipinfo.html (gore spomenutu) za parove postavka/vrijednost za korištenje s ovom pragmom.
  • Podrška za nove uređaje Podrška je dostupna za sljedeće dijelove: AVR28DA128, AVR64DA128, AVR32DA128 i AVR48DA128.

Verzija 2.05

  • Više bitova za vaš novac. MacOS verzija ovog prevoditelja i upravitelja licencama sada je 64-bitna aplikacija. To će osigurati da će se kompajler instalirati i pokrenuti bez upozorenja na novijim verzijama macOS-a.
  • Konstantni objekti u programskoj memoriji Kompajler sada može smjestiti const-kvalificirane objekte u Flash memoriju programa, umjesto da ih smjesti u RAM. Kompajler je modificiran tako da se globalni podaci kvalificirani za const pohranjuju u programsku flash memoriju i tim se podacima može izravno i neizravno pristupiti korištenjem odgovarajućih instrukcija programske memorije. Ova je nova značajka omogućena prema zadanim postavkama, ali se može onemogućiti pomoću opcije -mno-const-data-in-progmem. Za arhitekture avrxmega3 i avrtiny, ova značajka nije potrebna i uvijek je onemogućena, budući da je programska memorija preslikana u adresni prostor podataka za te uređaje.
  • Standardno za besplatno Nelicencirane (besplatne) verzije ovog prevoditelja sada dopuštaju optimizacije do i uključujući razinu 2. To će omogućiti sličan, iako ne identičan, izlaz onome što je prije bilo moguće korištenjem standardne licence.
  • Dobrodošli AVRASM2 Asembler AVRASM2 za 8-bitne uređaje sada je uključen u instalacijski program XC8 prevoditelja. XC8 prevodilac ne koristi ovaj asembler, ali je dostupan za projekte koji se temelje na rukom pisanom asemblerskom izvoru.
  • Podrška za nove uređaje Podrška je dostupna za sljedeće dijelove: ATMEGA1608, ATMEGA1609, ATMEGA808 i ATMEGA809.

Verzija 2.00

  • Upravljački program najviše razine Novi upravljački program, nazvan xc8-cc, sada se nalazi iznad prethodnog upravljačkog programa avr-gcc i xc8 upravljačkog programa i može pozvati odgovarajući kompajler na temelju odabira ciljnog uređaja. Ovaj upravljački program prihvaća opcije u stilu GCC-a, koje se prevode ili prosljeđuju prevoditelju koji se izvršava. Ovaj upravljački program omogućuje korištenje sličnog skupa opcija sa sličnom semantikom s bilo kojim AVR ili PIC ciljem i stoga je preporučeni način za pozivanje kompajlera. Ako je potrebno, stari avr-gcc upravljački program može se pozvati izravno pomoću opcija starog stila koje je prihvaćao u ranijim verzijama prevoditelja.
  • Zajedničko C sučelje Ovaj kompajler se sada može prilagoditi MPLAB Common C sučelju, omogućujući jednostavniji prijenos izvornog koda na sve MPLAB XC kompajlere. Opcija -mext=cci zahtijeva ovu značajku, omogućavajući alternativnu sintaksu za mnoga jezična proširenja.
  • Novi upravljački program knjižničara Novi upravljački program knjižničara postavljen je iznad prethodnog knjižničara PIC libr i AVR avr-ar knjižničara. Ovaj upravljački program prihvaća opcije u stilu GCC-arhivatora, koje su ili prevedene ili proslijeđene knjižničaru koji se izvršava. Novi upravljački program omogućuje korištenje sličnog skupa opcija sa sličnom semantikom za stvaranje ili rukovanje bilo kojom PIC ili AVR bibliotečkom datotekom i stoga je preporučeni način za pozivanje knjižničara. Ako je potrebno za naslijeđene projekte, prethodni knjižničar može se pozvati izravno pomoću opcija starog stila koje je prihvaćao u ranijim verzijama prevoditelja.

Pitanja migracije

Sljedeće su značajke koje sada drugačije obrađuje prevodilac. Ove promjene mogu zahtijevati modifikaciju vašeg izvornog koda ako prenosite kod na ovu verziju prevoditelja. Broj verzije u podnaslovima označava prvu verziju prevoditelja koja podržava promjene koje slijede.

Verzija 2.45
Nijedan.

Verzija 2.41
Uklonjene netočne fma funkcije (XC8-2913) Standardna biblioteka C99 ( ) nije izračunao množenje-zbrajanje s beskonačnom preciznošću za jedno zaokruživanje, već je umjesto toga akumulirao pogreške zaokruživanja sa svakom operacijom. Ove funkcije su uklonjene iz isporučene biblioteke.

Verzija 2.40
Nijedan.

Verzija 2.39 (funkcionalno sigurnosno izdanje)
Nijedan.

Verzija 2.36
Nijedan.

Verzija 2.35

  • Rukovanje string-to bases (XC8-2420) Kako bi se osigurala dosljednost s drugim XC prevodiocima, XC8 string-to funkcije, poput strtol() itd., više neće pokušavati pretvoriti ulazni niz ako je navedena baza veća od 36 i umjesto toga će postaviti . Standard C ne specificira ponašanje funkcija kada se prekorači ova osnovna vrijednost.
  • Neodgovarajuće optimizacije brzine Optimizacije proceduralne apstrakcije bile su omogućene pri odabiru optimizacije razine 3 (-O3). Ove optimizacije smanjuju veličinu koda nauštrb brzine koda, pa ih nije trebalo izvoditi. Projekti koji koriste ovu razinu optimizacije mogu primijetiti razlike u veličini koda i brzini izvršenja kada se izgrade s ovim izdanjem.
  • Funkcionalnost biblioteke Kod za mnoge standardne funkcije C biblioteke sada dolazi iz Microchipove objedinjene standardne biblioteke, koja bi mogla pokazivati ​​drugačije ponašanje u nekim okolnostima u usporedbi s onim koje pruža bivša biblioteka avr-libc. Na primjerample, više nije potrebno povezivati ​​se u biblioteku lprintf_flt (opcija -lprintf_flt) da biste uključili formatiranu IO podršku za specifikacije float-formata. Pametne IO značajke Microchip Unfied Standard Library čine ovu opciju suvišnom. Dodatno, upotreba _P sufiksiranih rutina za nizove i memorijske funkcije (npr. strcpy_P() itd..) koje rade na konstantnim nizovima u flashu više nisu potrebne. Standardne C rutine (npr. strcpy() ispravno će raditi s takvim podacima kada je omogućena značajka const-data-in-program-memory.

Verzija 2.32
Nijedan.

Verzija 2.31
Nijedan.

Verzija 2.30
Nijedan.

Verzija 2.29 (funkcionalno sigurnosno izdanje)
Nijedan.

Verzija 2.2
Promijenjeni DFP izgled Kompajler sada pretpostavlja drugačiji raspored koji koriste DFP (Device Family Packs). To će značiti da stariji DFP možda neće raditi s ovim izdanjem, a stariji prevoditelji neće moći koristiti najnovije DFP-ove.

Verzija 2.19 (funkcionalno sigurnosno izdanje)
Nijedan.

Verzija 2.10
Nijedan

Verzija 2.05
Konstantni objekti u programskoj memoriji Imajte na umu da će prema zadanim postavkama, const-kvalificirani objekti biti postavljeni i pristupiti im se u programskoj memoriji (kako je ovdje opisano). To će utjecati na veličinu i brzinu izvršenja vašeg projekta, ali bi trebalo smanjiti upotrebu RAM-a. Ova se značajka može onemogućiti, ako je potrebno, pomoću opcije -mno-const-data-in-progmem.

Verzija 2.00

  • Osigurači za konfiguraciju Osigurači za konfiguraciju uređaja sada se mogu programirati korištenjem pragme konfiguracije nakon koje slijede parovi vrijednosti postavki za određivanje stanja osigurača, npr. #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3
  • Apsolutni objekti i funkcije Objekti i funkcije sada se mogu postaviti na određenu adresu u memoriji pomoću CCI __at(address) specifikacije, npr.ampono:
    • #uključi
      int foobar __at(0x800100);
      char __at(0x250) getID(int offset) { … }
      Argument za ovaj specifikator mora biti konstanta koja predstavlja adresu na koju će biti postavljen prvi bajt ili instrukcija. RAM adrese su naznačene korištenjem pomaka od 0x800000. Omogućite CCI za korištenje ove značajke.
  • Nova sintaksa funkcije prekida Kompajler sada prihvaća CCI __interrupt(num) specifikaciju da označi da su C funkcije rukovatelji prekidima. Specifikator uzima broj prekida, nprample: #uključi void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }

Riješeni problemi

Sljedeće su ispravke koje su napravljene na prevoditelju. Oni bi mogli popraviti greške u generiranom kodu ili promijeniti rad kompajlera prema onome što je bilo predviđeno ili navedeno u korisničkom priručniku. Broj verzije u podnaslovima označava prvu verziju prevoditelja koja sadrži popravke za probleme koji slijede. Oznaka(e) u zagradama u naslovu je identifikacija tog problema u bazi podataka za praćenje. Ovo može biti korisno ako trebate kontaktirati podršku.
Imajte na umu da su neki problemi specifični za uređaj ispravljeni u paketu obitelji uređaja (DFP) povezanom s uređajem. Pogledajte MPLAB Pack Manager za informacije o promjenama na DFP-ovima i za preuzimanje najnovijih paketa.

Verzija 2.45

  • Kvar licence za roaming (XCLM-235) Licence za roaming nisu uspjele ispravno raditi na Linux platformama koje koriste glibc verzije kasnije od 2.28.
  • Unutarnja pogreška s nizovima struktura (XC8-3069) Kada su obrađeni višedimenzionalni članovi niza strukture, kvalifikator adresnog prostora nije ispravno proslijeđen na niz. To je dovelo do neusklađenosti informacija o kvalifikatoru adresnog prostora i interne pogreške prevoditelja. Ova situacija je ispravljena.
  • Loši zapisi u neinicijalizirane tokove (ML-353, XC8-3100) Ako standardni tokovi izlaza/pogreške nisu bili eksplicitno postavljeni pomoću FDEV_SETUP_STREAM ili _init_stdout/_init_stderr, pokušaj pisanja u njih rezultirao je nedefiniranim ponašanjem. To je također utjecalo na pisanje iz stdlib funkcija, kao što je perror(). Svako pisanje u ove tokove prije nego što su inicijalizirani sada će biti zanemareno.
  • Nepodržani modifikator (XC8-2505) Biblioteka avr-libc nije podržavala modifikator * u specifikacijama pretvorbe u printf stilu, npr.ample “%.*f”. Ovo je sada podržano uvođenjem Microchip Unified Standard Library.
  • Višestruka neinicijalizirana upozorenja (XC8-2409) Prevodilac je izdavao više identičnih poruka upozorenja kada je naišao na const niz koji nije inicijaliziran. Poruka je trebala biti izdana samo jednom, što je sada slučaj kada se dogodi ova situacija.

Verzija 2.41

  • Problemi s dongleom na Ventura (XC8-3088) Dongleovi korišteni za licenciranje kompajlera možda nisu pravilno očitani na macOS Ventura hostovima, što je rezultiralo neuspjehom licenciranja. Promjene u XCLM upravitelju licenci ispravljaju ovaj problem.
  • Netočna indikacija dodjele memorije (XC8-2925) Pokušaj dodjele SIZE_MAX bajtova (ili vrijednosti bliske ovoj) memorije korištenjem standardnih funkcija upravljanja memorijom knjižnice (malloc() et al.) koje se zahtijevaju pri korištenju implementacije jednostavne dinamičke dodjele memorije. Sada će se vratiti NULL pointer i errno postaviti na ENOMEM u takvim situacijama.
  • Uklonjene netočne fma funkcije (XC8-2913) C99 standardna biblioteka fma()-funkcija ( ) nije izračunao množenje-zbrajanje s beskonačnom preciznošću za jedno zaokruživanje, već je umjesto toga akumulirao pogreške zaokruživanja sa svakom operacijom. Ove funkcije su uklonjene iz isporučene biblioteke.
  • Loše rukovanje pretvorbom niza (XC8-2921, XC8-2652) Kada je 'subjektni niz' za pretvorbu pomoću strtod() sadržavao ono što se činilo kao broj s pomičnim zarezom u eksponencijalnom formatu i postojao je neočekivani znak nakon e/E znak, onda tamo gdje je bio naveden endptr, dodijeljena mu je adresa koja pokazuje na znak nakon , dok je trebao pokazivati ​​na sam znak e//E, budući da on nije pretvoren. Na primjerample, strtod(“100exx”, &ep) trebao bi vratiti 100.00 i postaviti ep da pokazuje na “exx” dio niza, dok je funkcija vraćala ispravnu vrijednost, ali postavlja dio “xx” niza.

Verzija 2.40

  • Previše opušteno (XC8-2876) Prilikom korištenja opcije -mrelax, prevodilac nije zajedno dodjeljivao neke odjeljke, što je rezultiralo manje optimalnom veličinom koda. To se moglo dogoditi s kodom koji je koristio nove MUSL biblioteke ili sa slabim simbolima.
  • Značajka mapiranja nije onemogućena kao što je navedeno u upozorenju (XC8-2875) Značajka const-data-in-config-mapped- progmem ovisi o omogućenoj značajci const-data-in-progmem. Ako je značajka const-data-in-config-mapped-progmem bila izričito omogućena korištenjem opcije, a značajka const-data-in-progmem je bila onemogućena, korak povezivanja nije uspio, unatoč poruci upozorenja koja navodi da const-data-in Značajka -config-mapped-progmem bila je automatski onemogućena, što nije bilo sasvim točno. Značajka const-data-in-config-mapped-progmem sada je potpuno onemogućena u ovoj situaciji.
  • DFP mijenja za ispravan pristup NVMCTRL-u (XC8-2848) Kod pokretanja vremena izvođenja koji koriste uređaji AVR64EA nije uzeo u obzir da je NVMCTRL registar bio pod zaštitom od promjene konfiguracije (CCP) i nije mogao postaviti IO SFR na korištenu stranicu značajkom prevoditelja const-data-in-config-mapped-progmem. Promjene napravljene u AVR-Ex_DFP verziji 2.2.55 omogućit će kodu za pokretanje ispravno pisanje u ovaj registar.
  • Promjene DFP-a za izbjegavanje flash mapiranja (XC8-2847) Implementirano je rješenje za problem sa značajkom uređaja za flash mapiranje prijavljen u AVR128DA28/32/48/64 Silicon Errata (DS80000882). Značajka prevoditelja const-data-in-config-mapped-progmem neće se primjenjivati ​​prema zadanim postavkama za zahvaćene uređaje, a ova će se promjena pojaviti u AVR-Dx_DFP verziji 2.2.160.
  • Pogreška u izradi sa sinhf ili coshf (XC8-2834) Pokušaji korištenja funkcija knjižnice sinhf() ili coshf() rezultirali su pogreškom povezivanja, opisujući nedefiniranu referencu. Referencirana funkcija koja nedostaje sada je uključena u distribuciju prevoditelja.
  • Pogreške u izradi s nopa (XC8-2833) Korištenje atributa nopa s funkcijom čiji je naziv asemblera naveden pomoću __asm__() pokrenulo je poruke o pogrešci od asemblera. Ova kombinacija nije moguća.
  • Kvar varijabilne funkcije s argumentima pokazivača (XC8-2755, XC8-2731) Funkcije s varijabilnim brojem argumenata očekuju da se 24-bitni (tip __memx) pokazivači prosljeđuju na popisu varijabilnih argumenata kada je značajka const-data-in-progmem omogućeno. Argumenti koji su bili pokazivači na podatkovnu memoriju prosljeđivani su kao 16-bitni objekti, što je uzrokovalo kvar koda kada su konačno pročitani. Kada je značajka const-data-in-progmem omogućena, svi argumenti 16-bitnih pokazivača sada se pretvaraju u 24-bitne pokazivače.
  • Neuspješne funkcije knjižnice strtoxxx (XC8-2620) Kada je značajka const-data-in-progmem bila omogućena, parametar endptr u funkcijama knjižnice strtoxxx nije ispravno ažuriran za argumente izvornog niza koji nisu u memoriji programa.
  • Upozorenja za nevažeća pretvaranja (XC8-2612) Kompajler će sada izdati pogrešku ako je značajka const-in-progmem omogućena i adresa literala niza je eksplicitno prikazana u adresni prostor podataka (ispuštanjem kvalifikatora const), na primjerample, (uint8_t *) "Zdravo svijete!" . Upozorenje je problem ako bi adresa mogla biti nevažeća kada se konstantni pokazivač podataka eksplicitno usmjerava na prostor adrese podataka.
  • Postavljanje neinicijaliziranih const objekata (XC8-2408) Neinicijalizirani i const nepostojani objekti const
    nisu bili smješteni u programsku memoriju na uređajima koji mapiraju cijelu ili dio svoje programske memorije u adresni prostor podataka. Za te se uređaje takvi objekti sada smještaju u programsku memoriju, čineći njihov rad usklađenim s drugim uređajima.

Verzija 2.39 (funkcionalno sigurnosno izdanje)
Nijedan.

Verzija 2.36
Pogreška prilikom odgode (XC8-2774) Manje promjene u zadanim optimizacijama slobodnog načina rada spriječile su stalno presavijanje izraza operanda u ugrađene funkcije odgode, što je rezultiralo njihovim tretiranjem kao nekonstantama i pokretanjem pogreške: __builtin_avr_delay_cycles očekuje cijeli broj vremena kompajliranja konstantno.

Verzija 2.35

  • Kontinuirana dodjela pomoću __at (XC8-2653) Kontinuirana dodjela višestrukih objekata stavlja u odjeljak s istim imenom i pomoću __at() nije ispravno radila. Na primjerampono:
    const char arr1[] __atribut__((odjeljak(“.mysec”))) __at (0x500) = {0xAB, 0xCD}; const char arr2[] __atribut__((odjeljak(“.mysec”))) = {0xEF, 0xFE}; trebao staviti arr2 odmah iza arr1
  • Određivanje početnih adresa odjeljaka (XC8-2650) Opcija -Wl,–section-start tiho nije uspjela postaviti odjeljke na nominiranu početnu adresu. Ovaj problem je riješen za sve odjeljke s prilagođenim nazivom; međutim, neće raditi za standardne odjeljke, kao što su .text ili .bss, koji se moraju postaviti pomoću -Wl,-T opcije. Linker se ruši prilikom opuštanja (XC8-2647) Kada je optimizacija -mrelax bila omogućena i postojali su dijelovi koda ili podataka koji nisu stali u dostupnu memoriju, povezivač se srušio. Sada se u takvim okolnostima umjesto toga izdaju poruke o pogrešci.
  • Bez vraćanja (XC8-2646) Opcija –no-fallback nije ispravno implementirana niti dokumentirana. Ovo se sada može odabrati kako bi se osiguralo da se prevodilac neće vratiti na nižu postavku optimizacije ako je prevodilac nelicenciran i da će umjesto toga izdati pogrešku.
  • Neodgovarajuće optimizacije brzine (XC8-2637) Optimizacije proceduralne apstrakcije bile su omogućene pri odabiru optimizacije razine 3 (-O3). Ove optimizacije smanjuju veličinu koda nauštrb brzine koda, pa ih nije trebalo izvoditi.
  • Loš pristup EEPROM-u (XC8-2629) Rutina eeprom_read_block nije ispravno radila na Xmega uređajima kada je opcija – mconst-data-in-progmem bila omogućena (što je zadano stanje), što je rezultiralo neispravnim čitanjem EEPROM memorije.
  • Nevažeća dodjela memorije (XC8-2593, XC8-2651) Kada je opcija povezivača -Ttext ili -Tdata (npr.ampdatoteka koja je prošla pomoću opcije -Wl drajvera) je naveden, odgovarajuće podrijetlo regije teksta/podataka je ažurirano; međutim, krajnja adresa nije prilagođena u skladu s tim, što je moglo dovesti do toga da regija premaši raspon memorije ciljnog uređaja.
  • Pad s prekomjerno dodijeljenom funkcijom (XC8-2580) Prevodilac se srušio ako je funkcija deklarirana korištenjem više od jednog atributa prekida, signala ili nmi, npr. __attribute__((__signal__, __interrupt__)).
  • Nevažeći ATtiny kod prekida (XC8-2465) Prilikom izgradnje za ATtiny uređaje i optimizacije su bile onemogućene (-O0), funkcije prekida možda su pokrenule operand izvan raspona
  • Opcije koje nisu proslijeđene (XC8-2452) Prilikom korištenja opcije -Wl s višestrukim opcijama povezivača odvojenim zarezima, nisu sve opcije povezivača proslijeđene povezivaču.
  • Pogreška pri neizravnom čitanju programske memorije (XC8-2450) U nekim je slučajevima kompajler proizveo internu pogrešku (neprepoznatljiv insn) prilikom čitanja dvobajtne vrijednosti iz pokazivača u programsku memoriju

Verzija 2.32
Drugi pristup biblioteci nije uspio (XC8-2381) Pozivanje Windows verzije programa za arhiviranje biblioteke xc8-ar.exe po drugi put za pristup postojećoj arhivi biblioteke možda nije uspjelo uz poruku o pogrešci nemogućnosti preimenovanja.

Verzija 2.31
Neobjašnjivi kvarovi prevoditelja (XC8-2367) Prilikom rada na Windows platformama koje su imale sistemski privremeni direktorij postavljen na stazu koja uključuje točku '.' znakova, kompajler možda nije uspio izvršiti.

Verzija 2.30

  • Globalne oznake pogrešno postavljene nakon ocrtavanja (XC8-2299) Rukom pisani sklopovni kod koji postavlja globalne oznake unutar sklopovskih nizova koji su faktorizirani proceduralnom apstrakcijom možda nije ispravno premješten.
  • Opuštajuće rušenje (XC8-2287) Korištenje opcije -mrelax moglo je uzrokovati rušenje povezivača kada su optimizacije opuštanja skoka repa pokušale ukloniti ret instrukcije koje nisu bile na kraju odjeljka.
  • Pad pri optimizaciji oznaka kao vrijednosti (XC8-2282) Kod koji koristi jezično proširenje GNU C "Oznake kao vrijednosti" mogao je uzrokovati rušenje proceduralne optimizacije apstrakcije, s pogreškom popravka raspona raspona.
  • Not so const (XC8-2271) Prototipovi za strstr() i druge funkcije iz više ne navode nestandardni kvalifikator na vraćenim pokazivačima niza kada je značajka const -mconst-data-in-progmem onemogućena. Imajte na umu da je s uređajima avrxmega3 i avrtiny ova značajka trajno omogućena.
  • Izgubljeni inicijalizatori (XC8-2269) Kada je više od jedne varijable u jedinici prevođenja postavljeno u odjeljak (koristeći __section ili __attribute__((section))), a prva takva varijabla je inicijalizirana nulom ili nije imala inicijalizator, inicijalizatori za ostale varijable u istoj jedinici prevođenja koje su bile smještene u isti odjeljak su izgubljene.

Verzija 2.29 (funkcionalno sigurnosno izdanje)
Nijedan.

Verzija 2.20

  • Pogreška s dugim naredbama (XC8-1983) Kada koristite AVR cilj, kompajler je možda stao s pogreškom datoteka nije pronađena, ako je naredbeni redak bio iznimno velik i sadržavao posebne znakove kao što su navodnici, kose crte, itd.
  • Nedodijeljena rodata sekcija (XC8-1920) AVR povezivač nije uspio dodijeliti memoriju za prilagođene rodata sekcije prilikom izgradnje za avrxmega3 i avrtiny arhitekture, potencijalno stvarajući pogreške preklapanja memorije

Verzija 2.19 (funkcionalno sigurnosno izdanje)
Nijedan.

Verzija 2.10

  • Neuspjesi premještanja (XC8-1891) Najprikladniji alokator ostavljao je memorijske 'rupe' između odjeljaka nakon opuštanja povezivača. Osim fragmentacije memorije, ovo je povećalo mogućnost kvarova premještanja povezivača koji se odnose na skokove u odnosu na računalo ili pozive koji izlaze izvan dometa.
  • Instrukcije koje nisu transformirane opuštanjem (XC8-1889) Opuštanje povezivača nije se dogodilo za instrukcije skoka ili poziva čiji ciljevi postaju dostupni ako su opušteni.
  • Nedostaje funkcionalnost (XC8E-388) Nekoliko definicija iz , kao što su clock_div_t i clock_prescale_set() , nisu definirani za uređaje, uključujući ATmega324PB, ATmega328PB, ATtiny441 i ATtiny841.
  • Makronaredbe koje nedostaju Makronaredbe pretprocesora _XC8_MODE_, __XC8_VERSION, __XC i __XC8 koje je automatski definirao kompajler. Ove su sada dostupne.

Verzija 2.05

  • Unutarnja pogreška prevoditelja (XC8-1822) Prilikom izgradnje u sustavu Windows, možda je nastala interna pogreška prevoditelja prilikom optimizacije koda.
  • Nije otkriveno prekoračenje RAM-a (XC8-1800, XC8-1796) Kompajler u nekim situacijama nije otkrio programe koji su premašili raspoloživi RAM, što je rezultiralo greškom koda za vrijeme izvođenja.
  • Izostavljena flash memorija (XC8-1792) Za uređaje avrxmega3 i avrtiny, dijelovi flash memorije možda su ostali neprogramirani u MPLAB X IDE.
  • Neuspjeh u izvršavanju main (XC8-1788) U nekim situacijama u kojima program nije imao definirane globalne varijable, kod za pokretanje nije izašao i funkcija main() nikada nije dosegnuta.
  • Netočne informacije o memoriji (XC8-1787) Za uređaje avrxmega3 i avrtiny, program veličine avr javljao je da podaci samo za čitanje troše RAM umjesto programske memorije.
  • Netočno čitanje programske memorije (XC8-1783) Projekti kompajlirani za uređaje s programskom memorijom mapiranom u adresni prostor podataka i koji definiraju objekte pomoću makronaredbe/atributa PROGMEM možda su te objekte pročitali s pogrešne adrese.
  • Interna pogreška s atributima (XC8-1773) Do interne pogreške došlo je ako ste definirali objekte pokazivača s tokenima __at() ili attribute() između naziva pokazivača i dereferenciranog tipa, npr.ample, char * __at(0x800150) cp; Sada se izdaje upozorenje ako se naiđe na takav kod.
  • Neuspjeh u izvršavanju main (XC8-1780, XC8-1767, XC8-1754) Korištenje EEPROM varijabli ili definiranje osigurača pomoću config pragme moglo je uzrokovati neispravnu inicijalizaciju podataka i/ili zaključati izvršavanje programa u kodu za pokretanje vremena izvođenja, prije nego što se dosegne main( ).
  • Pogreška osigurača s malim uređajima (XC8-1778, XC8-1742) Uređaji attiny4/5/9/10/20/40 imali su netočnu duljinu osigurača navedenu u svojim datotekama zaglavlja što je dovelo do pogrešaka povezivača pri pokušaju izrade koda koji definira osigurače .
  • Pogreška segmentacije (XC8-1777) Ispravljena je povremena pogreška segmentacije.
  • Pad asemblera (XC8-1761) avr-as asembler se možda srušio kada je kompajler pokrenut pod Ubuntu 18.
  • Objekti nisu izbrisani (XC8-1752) Neinicijalizirani objekti trajanja statičke pohrane možda nisu izbrisani kodom pokretanja vremena izvođenja.
  • Konfliktna specifikacija uređaja zanemarena (XC8-1749) Kompajler nije generirao pogrešku kada je korišteno više opcija specifikacije uređaja i ukazivalo je na različite uređaje.
  • Oštećenje memorije hrpom (XC8-1748) Simbol __heap_start bio je netočno postavljen, što je rezultiralo mogućnošću da obične varijable budu oštećene hrpom.
  • Pogreška premještanja povezivača (XC8-1739) Pogreška premještanja povezivača mogla je biti emitirana kada je kod sadržavao rjmp ili rcall s ciljem udaljenim točno 4k bajta.

Verzija 2.00
Nijedan.

Poznati problemi

Sljedeća su ograničenja u radu prevoditelja. To mogu biti opća ograničenja kodiranja ili odstupanja od informacija sadržanih u korisničkom priručniku. Oznaka(e) u zagradama u naslovu je identifikacija tog problema u bazi podataka za praćenje. Ovo može biti od koristi ako trebate kontaktirati podršku. One stavke koje nemaju oznake su ograničenja koja opisuju modi operandi i koja će vjerojatno ostati trajno na snazi.

MPLAB X IDE integracija

  • MPLAB IDE integracija Ako će se Compiler koristiti iz MPLAB IDE-a, morate instalirati MPLAB IDE prije instaliranja Compiler-a.
  • Informacije o otklanjanju pogrešaka niza (XC8-3157) Informacije o otklanjanju pogrešaka koje proizvodi prevodilac ne prenose točno tip objekta za nizove u adresnom prostoru __memx. Ovo će spriječiti promatranje objekta u IDE-u.

Generiranje koda

  • Segfault s opcijom sidra odjeljka (XC8-3045) Program koji je definirao funkcije s popisima promjenjivih argumenata i koji koristi opciju -fsection-anchors možda je pokrenuo internu pogrešku prevoditelja: Greška segmentacije
  • Informacije o otklanjanju pogrešaka nisu sinkronizirane (XC8-2948) Kada optimizacija opuštanja povezivača smanjuje upute (npr.ampinstrukcije poziva za rcall), preslikavanja izvorne linije u adresu možda neće ostati sinkronizirana kada se u odjeljku pojavljuje više od jedne operacije skupljanja. U donjem example, postoje dva poziva na foo koji završavaju opušteno na relativne pozive.
  • Greška dodjele PA memorije (XC8-2881) Kada koristite optimizatore proceduralne apstrakcije, povezivač bi mogao prijaviti pogreške dodjele memorije kada je veličina koda blizu količine dostupne programske memorije na uređaju, iako bi program trebao moći fiktirati dostupnu prostor.
  • Nije tako pametan Smart-IO (XC8-2872) Značajka kompajlera smart-io generira valjani, ali neoptimalan kod za funkciju snprintf ako je značajka const-data-in-progmem onemogućena ili ako uređaj ima sve svoje flash preslikan u podatkovnu memoriju.
  • Čak i manje pametan Smart-IO (XC8-2869) Značajka prevoditelja smart-io će generirati važeći, ali suboptimalan kod kada se koriste obje opcije -flto i -fno-builtin.
  • Podoptimalan smještaj podataka samo za čitanje (XC8-2849) Linker trenutno nije svjestan memorijskih odjeljaka APPCODE i APPDATA, niti podjela [No-]Read-While-Write u memorijskoj mapi. Kao rezultat toga, postoji mala vjerojatnost da povezivač može dodijeliti podatke samo za čitanje u neprikladno područje memorije. Mogućnost pogrešno postavljenih podataka povećava se ako je omogućena značajka const-data-in-progmem, posebno ako je također omogućena značajka const-data-in-config-mapped-progmem. Ove značajke mogu se onemogućiti ako je potrebno.
  • Redoslijed obrade objektne datoteke (XC8-2863) Redoslijed kojim će objektne datoteke obrađivati ​​povezivač može se razlikovati na temelju upotrebe proceduralne optimizacije apstrakcije (opcija -mpa). To bi utjecalo samo na kod koji definira slabe funkcije u više modula.
  • Pogreška povezivača s apsolutom (XC8-2777) Kada je objekt postavljen kao apsolutan na adresi na početku RAM-a i također su definirani neinicijalizirani objekti, može se pokrenuti pogreška povezivača.
  • Kratki ID-ovi za buđenje (XC8-2775) Za ATA5700/2 uređaje, PHID0/1 registri definirani su samo kao široki 16 bita, umjesto 32 bita.
  • Pad povezivača pri pozivanju simbola (XC8-2758) Povezivač bi se mogao srušiti ako se koristi opcija upravljačkog programa -mrelax kada izvorni kod poziva simbol koji je definiran pomoću opcije povezivača – Wl,–defsym.
  • Netočna inicijalizacija (XC8-2679) Postoji razlika između mjesta gdje su početne vrijednosti za neke globalne/statičke objekte veličine bajta smještene u podatkovnoj memoriji i mjesta na kojem će se varijablama pristupati tijekom izvođenja.
  • Loši neizravni pozivi funkcija (XC8-2628) U nekim slučajevima, pozivi funkcija napravljeni putem pokazivača funkcije pohranjenog kao dio strukture mogu biti neuspješni.
  • strtof vraća nulu za heksadecimalni broj s pomičnim zarezom (XC8-2626) Funkcije knjižnice strtof() et al i scanf() et al, uvijek će pretvoriti heksadecimalni broj s pomičnim zarezom koji ne specificira eksponent u nulu. Na primjerample: strtof(“0x1”, &endptr); će vratiti vrijednost 0, a ne 1.
  • Netočno slanje poruka savjetnika za stog (XC8-2542, XC8-2541) U nekim se slučajevima ne emitira upozorenje savjetnika za stog u vezi s rekurzijom ili korištenim neodređenim stogom (moguće upotrebom alloca()).
  • Neuspjeh s dvostrukim kodom prekida (XC8-2421) Gdje više od jedne funkcije prekida ima isto tijelo, kompajler bi mogao imati izlaz za jednu funkciju prekida poziva drugu. To će rezultirati nepotrebnim spremanjem svih registara zatrpanih pozivima, a prekidi će biti omogućeni čak i prije nego što se izvede epilog trenutnog rukovatelja prekidima, što može dovesti do kvara koda.
  • Loš izlaz s nevažećom DFP stazom (XC8-2376) Ako se prevodilac pozove s nevažećom DFP stazom i postoji datoteka 'spec' za odabrani uređaj, prevodilac ne prijavljuje nedostajući paket obitelji uređaja i umjesto toga odabire 'spec' datoteku, što bi onda moglo dovesti do nevažećeg izlaza. Datoteke 'spec' možda nisu ažurne za distribuirane DFP-ove i bile su namijenjene samo za korištenje s internim testiranjem prevoditelja.
  • Neotkriveno preklapanje memorije (XC8-1966) Kompajler ne otkriva preklapanje memorije objekata koji su apsolutni na adresi (preko __at()) i drugih objekata koji koriste __section() specifikaciju i koji su povezani na istu adresu.
  • Kvar s funkcijama biblioteke i __memx (XC8-1763) Pozvane funkcije libgcc float s argumentom u adresnom prostoru __memx mogu biti neuspješne. Imajte na umu da se rutine biblioteke pozivaju iz nekih C operatora, pa nprample, zahvaćen je sljedeći kod: return regFloatVar > memxFloatVar;
  • Ograničena implementacija libgcc (AVRTC-731) Za proizvode ATTiny4/5/9/10/20/40, implementacija standardne C / Math knjižnice u libgcc je vrlo ograničena ili nije prisutna.
  • Ograničenja programske memorije (AVRTC-732) Alatni lanac podržava slike programske memorije veće od 128 kb; međutim, postoje poznati slučajevi prekida povezivača bez opuštanja i bez korisne poruke o pogrešci umjesto generiranja potrebnih funkcijskih stubova kada se koristi opcija -mrelax.
  • Ograničenja prostora naziva (AVRTC-733) Lanac alata podržava imenovane adresne prostore, podložno ograničenjima navedenim u odjeljku Posebni kvalifikatori tipa korisničkog vodiča.
  • Vremenske zone The funkcije biblioteke pretpostavljaju GMT i ne podržavaju lokalne vremenske zone, stoga će localtime() vratiti isto vrijeme kao gmtime(), npr.ample.

Dokumenti / Resursi

MICROCHIP XC8 C kompajler verzija 2.45 Napomene o izdanju za AVR MCU [pdfUpute
AVR MCU, XC8 C, XC8 C prevoditelj verzija 2.45 Napomene o izdanju za AVR MCU, prevoditelj verzija 2.45 Napomene o izdanju za AVR MCU, verzija 2.45 Napomene o izdanju za AVR MCU, Napomene o izdanju za AVR MCU, Napomene za AVR MCU, AVR MCU

Reference

Ostavite komentar

Vaša email adresa neće biti objavljena. Obavezna polja su označena *