MPLAB® XC8 C kompajler verzija 2.41 Napomene o izdanju za AVR® MCU
Vlasnički priručnik
MPLAB XC8 C softver za razvoj kompilatora
OVAJ DOKUMENT SADRŽI VAŽNE INFORMACIJE KOJE SE ODNOSE NA MPLAB XC8 C KOMPILER KADA CILJAJU MICROCHIP AVR UREĐAJE.
PROČITAJTE GA PRIJE POKRETANJA OVOG SOFTVERA. POGLEDAJTE BILJEŠKE O IZDANJU MPLAB XC8 C KOMPILERA ZA PIC DOKUMENT AKO KORISTITE KOMPILER ZA 8-BITNE PIC UREĐAJE.
Nadview
1.1. Uvod
Ovo izdanje Microchip MPLAB® XC8 C kompajlera sadrži nekoliko novih značajki i ispravke grešaka.
1.2. Datum izrade
Službeni datum izgradnje ove verzije prevoditelja je 8. veljače 2023.
1.3. Prethodna verzija
Prethodna verzija MPLAB XC8 C kompajlera bila je 2.40 izgrađena 3. srpnja 2022.
1.4. 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.
1.5. 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. GNU GPL možete pročitati u datoteci pod nazivom koja se nalazi u poddirektoriju vaše instalacijske licence.txt direktorija avr/doc. Ovdje se može pronaći opća rasprava o načelima na kojima se temelji GPL.
Kod podrške za datoteke zaglavlja, skripte povezivača i biblioteke vremena izvođenja vlasnički je kod i nije obuhvaćen GPL-om.
Ovaj prevoditelj je implementacija GCC verzije 5.4.0, binutils verzije 2.26 i koristi avr-libc verziju 2.0.0.
1.6. Zahtjevi sustava
MPLAB XC8 C kompajler i softver za licenciranje koji koristi dostupni su za različite operativne sustave, uključujući 64-bitne verzije sljedećeg: Profesionalna izdanja Microsoft® Windows® 10; Ubuntu® 18.04; i macOS® 10.15.5. Binarne datoteke za Windows su potpisane kodom. Binarne datoteke za macOS su potpisane 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 Hate 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 (u imeniku prevoditelja) za popis svih podržanih uređaja. Ove datoteke također navode
avr_chipinfo.html postavke bitova konfiguracije dokumenta za svaki uređaj.
1.7. 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.
1.8. 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 (Windows), (Linux) ili (macOS) .exe .run .app aplikaciju za instalaciju prevoditelja, npr. i slijedite upute na zaslonu. XC8-1.00.11403-windows.exe Preporučuje 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.
1.8.1. 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.
1.9. 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.
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.
1.10.Podrška za kupce
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:
- MPLAB® XC8 C Compiler Korisnički vodič za AVR® MCU (revizija G)
- AVR® GNU Toolchain na MPLAB® XC8 Vodič za migraciju (revizija A)
- Hexmate korisnički priručnik (revizija B)
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 Unified Standard Library opisuje ponašanje i sučelje funkcija koje definira Microchip Unified Standard Library, kao i namjeravanu upotrebu tipova knjižnica i makronaredbi. Neke od ovih informacija ranije su bile sadržane u MPLAB® XC8 C Compiler User's Guide for AVR® MCU. Podaci o knjižnici 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 priručnik 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.
3.1. Verzija 2.41
Podrška za bootrow (XC8-3053) Kompajler će smjestiti sadržaj svih odjeljaka s prefiksom at.bootrow adresa 0x860000 u HEX datoteku. 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 redundantne instrukcije u ret 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) Standardni tip biblioteke C99 promijenjen je iz time_t u tip, što daje poboljšanja veličine koda u nekim funkcijama koje se odnose na vrijeme, kao što je. nepredpisano dugo mktime()
Novi nop (XC8-2946, 2945) Makro je dodan. Ova makronaredba umeće no-NOP() nop radna uputa 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, prevodilac će pokušati zamijeniti instrukcijom za pozivanje rcall instrukciju koja će 'trampoline' izvršenje na traženu adresu, nprample: jmp
rcall tramp_foo ;bio je poziv foo
…
rcall tramp_foo
…
tramp_foo:
jmp foo
Ovom optimizacijom, zajedno sa sličnim optimizacijama toka programa, upravlja opcija -mrelax.
3.2. 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 kod koji sadrži instrukciju poziva funkcije (/) može razgraničiti. Ovo će se dogoditi samo poziv rcall 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 ili se proceduralna apstrakcija može u potpunosti onemogućiti za objektnu datoteku ili funkciju korištenjem - i, odnosno, korištenjem atributa (specifikatora) selektivno s funkcijama.
mno-pa-outline-poziva -mno-pa-na-file -mno-pa-on-function nopa Makro pokrivenosti koda Prevodilac sada definira makronaredbu ako je navedena važeća opcija __nopa __CODECOV -mcodecov.
Opcija rezervacije memorije Upravljački program će sada prihvatiti opciju xc8-cc -mreserve=space@start:end kada gradi 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.
3.3. 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.
3.4. Verzija 2.36
Nijedan.
3.5. 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.
Podesivo flash mapiranje Neki uređaji u obitelji AVR DA i AVR DB imaju SFR (npr. FLMAP) koji određuje koji će se dio programske memorije od 32k mapirati u podatkovnu memoriju. Nova opcija – mconst-data-in-config-mapped-progmem može se koristiti kako bi povezivač smjestio sve const-kvalificirane podatke u jedan odjeljak od 32k i automatski inicijalizirao relevantni SFR registar kako bi se osiguralo da su ti podaci mapirani u podatkovnu memoriju prostor, gdje će mu se učinkovitije pristupiti.
Microchip Unified Standard Library Svi MPLAB XC kompajleri dijelit će Microchip Unified Standard Library, koji je sada dostupan s ovim izdanjem MPLAB XC8. MPLA# XC8 C Compiler User's Guide za AVO MCU više ne uključuje dokumentaciju za ove standardne funkcije. Ove se informacije sada mogu pronaći u Referentnom vodiču za Microchip Unified Standard Library. Imajte na umu da neke funkcije koje je prethodno definirao avr-libc više nisu dostupne. (Pogledajte Lila funkcionalnost.)
Smart I0 Kao dio novih objedinjenih biblioteka, funkcije I0 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.
Smart ICI opcija pomoći Prilikom analize poziva pametnih I0 funkcija (kao što su print f () ili scanf ()), kompajler ne može uvijek odrediti iz niza formata ili zaključiti iz argumenata one specifikatore konverzije koje zahtijeva poziv. Prethodno prevodilac uvijek ne bi pravio nikakve pretpostavke i osiguravao da je potpuno funkcionalnih 10 funkcija povezano u konačnu sliku programa. Dodana je nova opcija – msmart-io-format=fmt tako da korisnik umjesto toga kompajler može obavijestiti o specifikatorima pretvorbe koje koriste pametne I0 funkcije čija je upotreba dvosmislena, sprječavajući povezivanje predugih 10 rutina. (Pogledajte opciju smart-io-format za više detalja.)
Postavljanje prilagođenih odjeljaka Prethodno je opcija -W1, –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 za standardne odjeljke, kao što je . tekst,. bss ili . podataka, alokator koji najbolje odgovara i dalje će imati potpunu kontrolu nad njihovim postavljanjem, a opcija neće imati učinka. Koristite opciju -ton, -Tsection=addr, kao što je opisano u korisničkom priručniku.
3.6. 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 hrpi dostupno je na karti file, koji 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.
3.7. Verzija 2.31
Nijedan.
3.8. 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 do copy podataka i do clear bss simbola u sklopu files, š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 -f sidra odjeljaka, koja dopušta pristup statičkim objektima koji se može izvršiti 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.
3.9. Verzija 2.29 (funkcionalno sigurnosno izdanje)
Zaglavlje file za ugrađene kompajlere Kako bi se osiguralo da prevodilac može biti usklađen sa specifikacijama jezika kao što je MISRA, Zaglavlje file, koju automatski uključuje , je ažurirano. Ovo zaglavlje sadrži prototipove za sve ugrađene funkcije, kao što su builtin_avr_nop () i ugrađeni avr delay_cycles (). Neki ugrađeni elementi možda nisu usklađeni s MISRA-om; oni se mogu izostaviti dodavanjem defineXCSTRICT_MISRA u naredbeni red prevoditelja. Ugrađeni elementi i njihove deklaracije ažurirani su za korištenje tipova fiksne širine.
3.10. 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.
3.11. Verzija 2.19 (funkcionalno sigurnosno izdanje)
Nijedan.
3.12. 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četku file isključiti taj cijeli file iz analize pokrivenosti. Alternativno, _atribut_ ( (nocodecov) ) može se koristiti za isključivanje određene funkcije iz analize pokrivenosti.
Opis uređaja files Novi uređaj file pod nazivom avr_chipinfo. html se nalazi u direktoriju docs distribucije prevoditelja. Ovaj file navodi sve uređaje koje prevodilac podržava. Kliknite na naziv uređaja i otvorit će se stranica koja prikazuje sve dopuštene postavke/vrijednosti konfiguracijskih bitova za taj uređaj, s npr.amples. Proceduralna apstrakcija
Optimizacije proceduralne apstrakcije, koje zamjenjuju uobičajene blokove montažnog 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 objekt file pomoću -mno-pa-on-file=fileime ili onemogućeno za funkciju korištenjem -mno-pa-on-function=function. Unutar vašeg izvornog koda, proceduralna apstrakcija može se onemogućiti za funkciju upotrebom atributa ( (nopa) ) s definicijom funkcije ili upotrebom nope, koja se proširuje na atribut ( (nopa, noinline) ) i tako sprječava umetanje funkcije i postoji apstrakcija ugrađenog koda.
Podrška za bit zaključavanja u pragmi #pragma config sada se može koristiti za određivanje bitova za zaključavanje AVR-a, kao i ostalih konfiguracijskih bitova. Provjerite avr_chipinfo. html file (gore spomenuto) za parove postavka/vrijednost za korištenje s ovom pragmom. Podrška za nove uređaje Podrška je dostupna za sljedeće dijelove: AVR28DAl28, AVR64DAl28, AVR32DA 128 i AVR48DA 128.
3.13. 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 cons t pohranjuju u flash memoriju programa 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.
3.14. 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 manipuliranje bilo kojom PIC ili AVR bibliotekom file 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.
4.1. Verzija 2.41
Uklonjene netočne fma funkcije (XC8-2913) C99 standardna biblioteka fma 0 -obitelj 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.
4.2. Verzija 2.40
Nijedan.
4.3. Verzija 2.39 (funkcionalno sigurnosno izdanje)
Nijedan.
4.4. Verzija 2.36 Ništa.
4.5. Verzija 2.35
Rukovanje string-to bases (XC8-2420) Kako bi se osigurala dosljednost s drugim XC prevoditeljima, 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 errno postaviti na EINVAL. 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 (-03). 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 knjižnice Kod za mnoge funkcije standardne 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 biblioteku 1printf flt (opcija -1printf_flt) za uključivanje formatiranog I0 podrška za specifikatore float-formata. Pametni I0 značajke Microchipove objedinjene standardne knjižnice čini ovu opciju suvišnom. Dodatno, upotreba rutina sa sufiksom _P za funkcije niza i memorije (npr. strcpy_P ( ) itd.) koje rade na nizovima const 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.
4.6. Verzija 2.32
Nijedan.
4.7. Verzija 2.31
Nijedan.
4.8. Verzija 2.30
Nijedan.
4.1. Verzija 2.29 (funkcionalno sigurnosno izdanje)
Nijedan.
4.2. Verzija 2.20
Promijenjen je DFP izgled Kompajler sada pretpostavlja drugačiji izgled koji koriste DFP-ovi (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.
4.3. Verzija 2.19 (funkcionalno sigurnosno izdanje)
Nijedan.
4.4. Verzija 2.10
Nijedan
4.5. 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 (kao što je opisano nijansom). 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 -mnoconst-data-in-progmem.
4.6. Verzija 2.00
Osigurači za konfiguraciju Osigurači za konfiguraciju uređaja sada se mogu programirati korištenjem konfiguracijske pragme 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 smjestiti na određenu adresu u memoriji pomoću CCI (adrese) specifikatora, 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 specifikator CCI _interrupt (num) da označi da su C funkcije rukovatelji prekidima. Specifikator uzima broj prekida, nprampono:
#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.
5.1. Verzija 2.41
Problemi s ključevima na Ventura (XC8-3088) ključevima koji se koristio za licenciranje kompilatora možda nije bio pravilno pročitan na hostovima macOS Ventura, š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 biblioteke (malloc () et al) je neispravno uspio. Nije uzeto u obzir da su potrebni dodatni bajtovi uz traženi blok kada se koristi implementacija jednostavne dinamičke dodjele memorije. Sada će se vratiti NULL pointer i errno postaviti na ENOMEM u takvim situacijama.
Netočne fma funkcije uklonjene (XC8-2913) C99 standardna biblioteka fma ( ) -obitelj 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 konverzijom niza (XC8-2921, XC8-2652) Kada je 'subjektni niz' za pretvorbu pomoću strtod Cr sadržavao ono što se činilo kao broj s pomičnim zarezom u eksponencijalnom formatu i postojao je neočekivani znak nakon znaka e/E, tamo gdje je bio dostavljen endptr, dodijeljena mu je adresa koja da je pokazivao na znak nakon e/E, 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 postavljajući ep da pokazuje na "xx" dio niza .
5.2. Verzija 2.40
Previše opušteno (XCS-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-mappedprogmem oslanja se na omogućenu značajku const-data-in-progmem. Ako je značajka const-data-inconfig-mapped-progmem bila izričito omogućena korištenjem opcije, a značajka const-data-inprogmem bila je onemogućena, korak povezivanja nije uspio, unatoč poruci upozorenja koja navodi da const-data-in-con fig- značajka 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 promjene za ispravan pristup NVMCTRL (XC8-2848) Kod pokretanja za vrijeme 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 I0 SFR na stranicu koju koristi const-data-in-configmapped-progmem značajka kompilatora. Promjene napravljene u AVR-Ex_DFP verziji 2.2.55 omogućit će kodu za pokretanje ispravno pisanje u ovaj registar.
DFP promjene koje treba izbjegavati flash mapping (XC8-2847) Implementirano je rješenje za problem sa značajkom uređaja za flash-mapping prijavljen u AVR128DA28/32/48/64 Silicon Errata (D580000882). Značajka prevoditelja const-data-in-config-mapped-progmem neće se primjenjivati prema zadanim postavkama za pogođene uređaje, a ova će se promjena pojaviti u AVR-Dx_DFP verziji 2.2.160.
Pogreška izrade 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 (XC,8-2833) Korištenje atributa nopa s funkcijom čije je ime asemblera navedeno korištenjem asm ( ) pokrenulo je poruke o pogrešci od asemblera. Ova kombinacija nije moguća.
Greška 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ćena. 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 constdata-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 biblioteke strtoxxx nije ispravno ažuriran za argumente izvornog niza koji nisu u memoriji programa.
Upozorenja za nevažeće odljeve (XC8-2612) Kompajler će sada izdati pogrešku ako je značajka const-in-progmem omogućena, a adresa literala niza eksplicitno je prebačena u adresni prostor podataka (ispuštanje kvalifikatora const), npr.ample, (uint 8_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 const i const volatile objekti nisu bili smješteni u programsku memoriju na uređajima koji mapiraju cijelu ili dio svoje programske memorije u podatkovni adresni prostor. Za te se uređaje takvi objekti sada smještaju u programsku memoriju, čineći njihov rad usklađenim s drugim uređajima.
5.3. Verzija 2.39 (funkcionalno sigurnosno izdanje)
Nijedan.
5.4. 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 kašnjenja, što je rezultiralo njihovim tretiranjem kao nekonstantama i pokretanjem pogreške: ugrađeni avr delay_cycles očekuje cjelobrojnu konstantu vremena kompajliranja.
5.5. Verzija 2.35
Kontinuirana dodjela pomoću _at (XC8-2653) Kontinuirana dodjela višestrukih objekata u odjeljak s istim imenom i korištenje _at ( ) nije radila ispravno. 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 odjeljka (XC8-2650) The -W1, – opcija početka odjeljka tiho nije uspjela postaviti odjeljke na nominiranu početnu adresu. Ovaj je problem riješen za sve odjeljke s prilagođenim nazivom; međutim, neće raditi ni za jedan standardni odjeljak, kao što je . tekst ili . bss, koji se mora postaviti pomoću opcije -W1, -T.
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.
Nema povratka (XC8-2646) The – opcija nofallback 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 (X03-2637) Optimizacije proceduralne apstrakcije bile su omogućene pri odabiru optimizacije razine 3 (-03). Ove optimizacije smanjuju veličinu koda nauštrb brzine koda, pa ih nije trebalo izvoditi.
Loš EEPROM pristup (XC8-2629) The eeprom_read_block rutina 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 -Ttext ili -Tdata opcija povezivača (nprampdatoteka koja je prošla pomoću opcije -vl drajvera) navedena, 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 pretjerano dodijeljenom funkcijom (XC8-2580) Prevodilac se srušio ako je funkcija deklarirana korištenjem više od jednog atributa prekida, signala ili nmi, npr. atributa ( (signal, prekid)).
Nevažeći ATtiny kod prekida (XC8-2465) Prilikom izgradnje za ATtiny uređaje i optimizacije su bile onemogućene (-00), funkcije prekida možda su pokrenule poruke asemblera operanda izvan raspona.
Opcije se ne prolaze (XC8-2452) Prilikom korištenja opcije s više opcija povezivača odvojenih zarezom, nisu sve opcije povezivača proslijeđene povezivaču.
Pogreška neizravnog čitanja programske memorije (X03-2450) U nekim je slučajevima kompajler proizveo internu pogrešku (neprepoznatljiv insn) prilikom čitanja dvobajtne vrijednosti iz pokazivača u programsku memoriju
5.6. Verzija 2.32
Drugi pristup od knjižnica ne radi (XC8-2381) Pozivanje Windows verzije xc8-ar. .exe knjižnica za arhiviranje po drugi put pristupiti postojećoj arhivi knjižnice možda nije uspjela s porukom o pogrešci nemogućnosti preimenovanja.
5.7. Verzija 2.31
Neobjašnjeni prevodilac kvarovi (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.
5.8. Verzija 2.30
Globalne oznake zagubljene nakon ocrtavanja (XC8-2299) Rukom pisani asemblerski kod koji postavlja globalne oznake unutar asemblerskih sekvenci koje su faktorizirane proceduralnom apstrakcijom možda nije ispravno premješten.
Opuštajući sudar (XC8-2287) Korištenje opcije -mrelax moglo je uzrokovati rušenje povezivača kada su optimizacije opuštanja skoka repa pokušale ukloniti instrukcije ret koje nisu bile na kraju odjeljka.
Rušenje pri optimizaciji oznaka kao vrijednosti (XC8-2282) Kod koji koristi jezično proširenje GNU C "Oznake kao vrijednosti" možda je prouzročio rušenje proceduralne optimizacije apstrakcije, s pogreškom popravka raspona okvira Ocrtanog VMA.
Nije tako konst (XC8-2271) Prototipovi za st rstr ( ) i druge funkcije iz više ne navodi nestandardni kvalifikator const na vraćenim pokazivačima niza kada je značajka -mconst-data-inprogmem 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 jedna varijabla u jedinici prevođenja postavljena je u odjeljak (pomoću _section ili _attribute_ ( (section) )), a prva takva varijabla bila je inicijalizirana nulom ili nije imala inicijalizator, inicijalizatori za druge varijable u istoj jedinici prevođenja koji su postavljeni u istom dijelu su izgubljeni.
5.1. Verzija 2.29 (funkcionalno sigurnosno izdanje)
Nijedan.
5.2. Verzija 2.20
Pogreška s dugim naredbama (XC8-1983) Kada koristite AVR cilj, kompajler se možda zaustavio s a file pogreška nije pronađena, ako je naredbeni redak bio iznimno velik i sadržavao posebne znakove kao što su navodnici, kose crte, itd.
Nedodijeljeni dio rodata (XC8-1920) AVR povezivač nije uspio dodijeliti memoriju za prilagođene odjeljke rodata prilikom izgradnje za avrxmega3 i avrtiny arhitekture, potencijalno stvarajući pogreške preklapanja memorije
5.3. Verzija 2.19 (Funkcionalno sigurnosno izdanje)
Nijedan.
5.4. Verzija 2.10
Neuspjesi preseljenja (XC8-1891) Alokator koji najbolje odgovara 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.
Nedostaju makronaredbe Kompajler nije automatski definirao makronaredbe pretprocesora _XC8_MODE_, _XC8_VERS ION, _XC i _XC8. Ove su sada dostupne.
5.5. Verzija 2.05
Interna 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 avrxmega3 i avrtiny uređaje, MPLAB X možda nije programirao dijelove flash memorije IDE.
Neuspjeh u izvršavanju glavnog (XC8-1788) U nekim situacijama u kojima program nije imao definirane globalne varijable, kod pokretanja vremena izvođenja nije izašao i glavna ( ) funkcija 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 memorije programa (XC8-1783) Projekti kompilirani za uređaje s programskom memorijom preslikanom 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šlo je do interne pogreške ako ste objekte pokazivača definirali s
_at () ili attribute() tokeni između naziva pokazivača i dereferenciranog tipa, nprample, char *
_at (0x800150) cp; Sada se izdaje upozorenje ako se naiđe na takav kod.
Neuspjeh u izvršavanju glavnog (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 dođe do glavnog ( ) .
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 zaglavlju filekoji dovode do pogrešaka povezivača pri pokušaju izgradnje koda koji definira osigurače.
Segmentacija greška (XC8-1777) Ispravljena je greška povremene 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) Neinicijalizirane objekte trajanja statičke pohrane možda nije obrisao kod za pokretanje 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) The 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.
5.6. 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. Oznake u zagradama u naslovu su 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.
6.1. MPLAB X IDE Integracija
MPLAB IDE integracija Ako će se Compiler koristiti iz MPLAB IDE-a, tada morate instalirati MPLAB IDE prije instaliranja Compiler-a.
6.2. Generiranje koda
Segfault s opcijom sidra odjeljaka (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 (nprampinstrukcije 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 nastavku 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 stati u raspoloživi prostor.
Ne tako pametan Smart-I0 (XC8-2872) Značajka prevoditelja smart-io generira valjani, ali ispod optimalnog koda za funkciju snprint f ako je značajka const-data-in-progmem bila onemogućena ili ako je uređaj sav svoj flash mapirao u podatkovnu memoriju.
Još manje pametan Smart-I0 (XC8-2869) Značajka prevoditelja smart-io će generirati važeći, ali suboptimalan kod kada se koriste opcije -flto i -fno-builtin.
Neoptimalan smještaj podataka samo za čitanje (XC8-2849) Povezivač 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 značajka const-data-in-progmem omogućena, posebno ako je značajka const-data-in-config-mapped-progmem također omogućena. Ove značajke mogu se onemogućiti ako je potrebno.
Objekt file narudžba za obradu (XC8-2863) Redoslijed kojim objekti files koje će povezivač obraditi mogu se razlikovati na temelju upotrebe optimizacija proceduralne apstrakcije (opcija -mpa). To bi utjecalo samo na kôd koji definira slabe funkcije u više modula.
Pogreška povezivača s apsolutnim (XC8-2777) Kada je objekt učinjen apsolutnim na adresi na početku RAM-a i također su definirani neinicijalizirani objekti, može se pokrenuti greška povezivača.
Kratki ID-ovi za buđenje (XC8-2775) Za ATA5700/2 uređaje, PHIDO/1 registri definirani su samo kao široki 16 bita, umjesto 32 bita.
Pad povezivača prilikom pozivanja 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 -cc., –de f sym.
Netočna inicijalizacija (XC8-2679) Postoji je neslaganje 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 heksadecimalne float (XC8-2626) Knjižnične funkcije strtof et al i scanf ( ) et al uvijek će pretvoriti heksadecimalni broj s pomičnim zarezom koji ne specificira eksponent u nulu. Na primjerampono:
strtof ("Oxl", &endptr) ;
vratit će vrijednost 0, a ne I.
Netočna poruka savjetnika za snop (XC8-2542, XC8-2541) U nekim se slučajevima ne emitira upozorenje savjetnika o snopu u vezi s korištenim rekurzijom ili neodređenim snopom (moguće upotrebom alloca()).
Kvar s duplim 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ćim DFP putem (XC8-2376) Ako se prevodilac pozove s nevažećom DFP stazom i 'spec' file postoji za odabrani uređaj, kompajler ne prijavljuje paket obitelji uređaja koji nedostaje i umjesto toga odabire 'spec' file, što bi onda moglo dovesti do nevažećeg izlaza. 'specifikacija' files možda nisu ažurirani s distribuiranim DFP-ovima i bili su namijenjeni 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 specifikator odjeljka ( ) i koji su povezani na istu adresu.
Kvar s funkcijama knjižnice i _memx (XC8-1763) Pozvane libgcc float funkcije s argumentom u memx adresnom prostoru možda neće uspjeti. 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 standardna implementacija C / Math biblioteke 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 -mre lax.
Ograničenja prostora imena (AVRTC-733) Imenovani adresni prostori podržani su od strane alatnog lanca, podložno ograničenjima navedenim u odjeljku Kvalifikatori posebnih vrsta korisničkog vodiča.
Vremenske zone The funkcije biblioteke pretpostavljaju GMT i ne podržavaju lokalne vremenske zone, stoga će lokalno vrijeme ( ) vratiti isto vrijeme kao i gmtime ( ), npr.ample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Dokumenti / Resursi
![]() |
MICROCHIP MPLAB XC8 C softver za razvoj kompajlera [pdf] Priručnik za vlasnika MPLAB XC8 C, MPLAB XC8 C softver za razvoj kompajlera, softver za razvoj kompajlera, softver za razvoj, softver |