MPLAB® XC8 C kompajler verzija 2.41 Napomene o izdanju za AVR® MCU
Priručnik za upotrebu
Softver za razvoj kompajlera MPLAB XC8 C
OVAJ DOKUMENT SADRŽI VAŽNE INFORMACIJE KOJE SE ODNOSE NA KOMPILER MPLAB XC8 C KADA CILJATE MICROCHIP AVR UREĐAJE.
PROČITAJTE GA PRIJE POKRETANJA OVAJ SOFTVER. POGLEDAJTE BILJEŠKE O IZDAVANJU MPLAB XC8 C KOMPILER ZA PIC DOKUMENT AKO KORISTITE KOMPILER ZA 8-BITNE PIC UREĐAJE.
Gotovoview
1.1. Uvod
Ovo izdanje Microchip MPLAB® XC8 C kompajlera sadrži nekoliko novih funkcija i ispravki grešaka.
1.2. Datum izgradnje
Zvanični datum izrade ove verzije kompajlera je 8. februar 2023.
1.3. Prethodna verzija
Prethodna verzija MPLAB XC8 C kompajlera bila je 2.40 napravljena 3. jula 2022.
1.4. Priručnik za funkcionalnu sigurnost
Priručnik za funkcionalnu sigurnost za kompajlere MPLAB XC 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 je napisan i distribuiran pod GNU opštom javnom licencom (GPL) što znači da se njegov izvorni kod slobodno distribuira i dostupan javnosti.
Izvorni kod za alate pod GNU GPL može se preuzeti odvojeno od Microchipa website. GNU GPL možete pročitati u datoteci pod nazivom koja se nalazi u poddirektorijumu vašeg direktorija licence.txt avr/doc. Opšta diskusija o principima na kojima se temelji GPL može se naći ovdje.
Kôd podrške za datoteke zaglavlja, skripte povezivača i biblioteke vremena izvršavanja su vlasnički kod i nisu pokriveni GPL-om.
Ovaj kompajler je implementacija GCC verzije 5.4.0, binutils verzije 2.26 i koristi avr-libc verziju 2.0.0.
1.6. Sistemski zahtjevi
MPLAB XC8 C kompajler i softver za licenciranje koji koristi dostupni su za različite operativne sisteme, uključujući 64-bitne verzije sledeć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 kodno potpisane i ovjerene kod notara. MPLAB XC Network License Server je dostupan za razne 64-bitne operativne sisteme, uključujući Microsoft Windows 10 i novije; Ubuntu 18.04 i noviji; ili macOS 10.15 i noviji. Server takođe može raditi na raznim drugim operativnim sistemima 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 sistema. Međutim, MPLAB XC Network License Server nije testiran na ovim operativnim sistemima. MPLAB XC Network License Server može se pokrenuti na virtuelnim mašinama podržanog OS-a koristeći licencu virtuelne mašine za mrežne licence (SW006021-VM). Sve 32-bitne verzije MPLAB XC mrežnog servera se ukidaju počevši od verzije 3.00.
Podržani uređaji
Ovaj kompajler podržava sve dostupne 8-bitne AVR MCU uređaje u trenutku izdavanja. Pogledajte (u direktoriju kompajlera) za listu svih podržanih uređaja. Ove datoteke su također navedene
avr_chipinfo.html postavke bitova konfiguracije dokumenta za svaki uređaj.
1.7. Izdanja i nadogradnje licenci
MPLAB XC8 kompajler se može aktivirati kao licencirani (PRO) ili nelicencirani (besplatni) proizvod. Morate kupiti ključ za aktivaciju da licencirate svoj kompajler. Licenca omogućava viši nivo optimizacije u poređenju sa besplatnim proizvodom. Nelicencirani kompajler može raditi neograničeno bez licence. Kompajler MPLAB XC8 Functional Safety mora biti aktiviran uz licencu za funkcionalnu sigurnost kupljenu od Microchipa. Kompajler neće raditi bez ove licence. Kada se aktivira, možete odabrati bilo koji nivo optimizacije i koristiti sve karakteristike kompajlera. Ovo izdanje MPLAB XC Functional Safety Compiler podržava Licencu mrežnog servera.
Pogledajte dokument Instaliranje i licenciranje MPLAB XC C kompajlera (DS50002059) za informacije o tipovima licenci i instalaciji kompajlera sa licencom.
1.8. Instalacija i aktivacija
Pogledajte i odjeljke Problemi i ograničenja migracije za važne informacije o najnovijem upravitelju licenci uključenom u ovaj kompajler.
Ako koristite MPLAB IDE, obavezno instalirajte najnoviju 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 instalacijsku aplikaciju kompajlera, npr. i pratite uputstva na ekranu. XC8-1.00.11403-windows.exe Preporučuje se podrazumevani instalacioni direktorijum. Ako koristite Linux, morate instalirati kompajler pomoću terminala i sa root naloga. Instalirajte koristeći macOS nalog sa administratorskim privilegijama.
Aktivacija se sada provodi odvojeno od instalacije. Pogledajte dokument License Manager za MPLAB® XC C kompajlere (DS52059) za više informacija.
Ako odlučite da pokrenete kompajler pod licencom za evaluaciju, sada ćete dobiti upozorenje tokom kompilacije kada budete u roku od 14 dana od kraja vašeg perioda evaluacije. Isto upozorenje se izdaje ako ste u roku od 14 dana od kraja vaše HPA pretplate.
XC Network License Server je zaseban instalater i nije uključen u instalacijski program kompajlera za jednog korisnika.
XC License Manager sada podržava roaming plutajućih mrežnih licenci. Namijenjena mobilnim korisnicima, ova funkcija omogućava da se plutajuća licenca na kratko vrijeme isključi iz mreže. Koristeći ovu funkciju, možete prekinuti vezu sa mrežom i dalje koristiti svoj MPLAB XC kompajler. Više o ovoj funkciji potražite u fascikli doc XCLM instalacije.
MPLAB X IDE uključuje prozor Licence (Alati > Licence) za vizuelno upravljanje romingom.
1.8.1. Rješavanje problema sa instalacijom
Ako naiđete na poteškoće pri instalaciji kompajlera pod bilo kojim od Windows operativnih sistema, pokušajte sa sljedećim sugestijama.
Pokrenite instalaciju kao administrator.
Postavite dozvole aplikacije za instalaciju na 'Puna kontrola'. (Kliknite desnim tasterom miša na datoteku, odaberite Svojstva, karticu Sigurnost, odaberite korisnika, uredite.)
Postavite dozvole za privremeni folder na 'Puna kontrola'.
Da biste odredili lokaciju privremene fascikle, otkucajte %temp% u naredbu Pokreni (tipka s logotipom Windows + R).
Ovo će otvoriti dijalog istraživača datoteka koji prikazuje taj direktorij i omogućit će vam da odredite putanju te mape.
1.9. Dokumentacija kompajlera
Korisnički vodiči za kompajler mogu se otvoriti sa HTML stranice koja se otvara u vašem pretraživaču kada kliknete na plavo dugme pomoći na MPLAB X IDE kontrolnoj tabli, kao što je prikazano na snimku ekrana.
Ako gradite za 8-bitne AVR ciljeve, Uputstvo za upotrebu kompajlera MPLAB® XC8 C za AVR® MCU sadrži informacije o onim opcijama i karakteristikama kompajlera koje su primenljive na ovu arhitekturu.

1.10. Korisnička podrška
Microchip pozdravlja izvještaje o greškama, sugestije ili komentare u vezi sa ovom verzijom kompajlera. Molimo vas da sve izvještaje o greškama ili zahtjeve za funkcije uputite putem sistema podrške.
Ažuriranja dokumentacije
Za on-line i ažurirane verzije MPLAB XC8 dokumentacije, posjetite Microchipovu internetsku tehničku dokumentaciju website. Nova ili ažurirana AVR dokumentacija u ovom izdanju:
- Korisnički vodič za MPLAB® XC8 C kompajler 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 alata na MPLAB® XC8 opisuje promjene izvornog koda i opcije izgradnje koje bi mogle biti potrebne ako odlučite da migrirate C-based projekat sa AVR 8-bitnog GNU Toolchaina na Microchip MPLAB XC8 C kompajler. Referentni vodič za objedinjenu standardnu biblioteku Microchip opisuje ponašanje i interfejs za funkcije definisane od strane Microchip Unified Standard Library, kao i nameravanu upotrebu tipova biblioteka i makroa. Neke od ovih informacija su ranije bile sadržane u Uputstvu za upotrebu kompajlera MPLAB® XC8 C za AVR® MCU. Informacije o biblioteci specifične za uređaj i dalje su sadržane u ovom vodiču za kompajler.
Ako tek počinjete sa 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 projekat. Ovaj vodič je sada distribuiran sa kompajlerom.
Uputstvo za upotrebu Hexmatea je namenjeno onima koji koriste Hexmate kao samostalnu aplikaciju.
Šta je novo
Sljedeće su nove AVR-target karakteristike koje kompajler sada podržava. Broj verzije u podnaslovima označava prvu verziju kompajlera koja podržava funkcije koje slijede.
3.1. Verzija 2.41
Podrška za pokretanje (XC8-3053) Kompajler će smjestiti sadržaj bilo koje sekcije sa prefiksom at.bootrow adrese 0x860000 u HEX datoteku. Ovi odeljci se koriste za BOOTROW memoriju, koja je dizajnirana za skladištenje ključeva i drugih sigurnih informacija koje bi trebalo da budu dostupne samo pokretaču.
Eliminacija redundantnog povratka (XC8-3048) Kompajler će sada eliminisati suvišne instrukcije u ret funkcijama sa skokom na rep kada se koriste prilagođene skripte povezivača. Ovo je slična optimizacija onoj koja je izvršena ranije, ali se sada izvodi na svim napuštenim sekcijama, čak i ako se koristi prilagođena skripta povezivača i nije u igri najbolja šema alokacije. Promjena tipa vremena (XC8-2982, 2932) Tip standardne biblioteke C99, promijenjen je iz time_t u tip, što daje poboljšanja veličine koda u nekim dugim dugim funkcijama vezanim za vrijeme, kao što je. nepotpisani dugi mktime()
Novi broj (XC8-2946, 2945) Makro je dodat. Ovaj makro umeće no-NOP() nop upute za rad u izlaz.
Ažuriranje na XCLM (XC8-2944) Upravljač licencama koji se koristi sa kompajlerom je ažuriran i sada bolje reagira kada provjerava detalje licence kompajlera.
Tramppodređeni pozivi (XC8-2760) Kompajler sada može izvršiti zamjenu dugih instrukcija poziva sa kraćim relativnim pozivima kada bi relativni oblici instrukcija normalno bili izvan dometa njihovog odredišta. U ovoj situaciji, kompajler će pokušati zamijeniti instrukcijama da pozove rcall instrukciju koja će 'trampoline' izvršenje na traženu adresu, nprample: jmp
rcall tramp_foo ;je bio poziv foo
...
rcall tramp_foo
...
tramp_foo:
jmp foo
Ovu optimizaciju, zajedno sa sličnim optimizacijama toka programa, kontrolira opcija -mrelax.
3.2. Verzija 2.40
Podrška za nove uređaje je sada dostupna za sljedeće AVR dijelove: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32, AVREA64EAVR i
Poboljšana proceduralna apstrakcija Alat za optimizaciju proceduralne apstrakcije (PA) je poboljšan tako da se kod koji sadrži instrukciju za poziv funkcije (/) može prikazati. Ovo će se dogoditi samo pozivom rcall ako se stek ne koristi za prosljeđivanje argumenata niti za dobivanje povratne vrijednosti iz funkcije. Stek se koristi kada se poziva funkcija s promjenjivom listom argumenata ili kada se poziva funkcija koja uzima više argumenata nego što je registara određenih za ovu svrhu. Ova funkcija se 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, ili korištenjem atributa (specifier) selektivno sa funkcijama.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa Makro pokrivanja koda Kompajler sada definiše makro ako je navedena važeća opcija __nopa __CODECOV -mcodecov.
Opcija rezervisanja memorije Vozač će sada prihvatiti opciju xc8-cc -mreserve=space@start:end prilikom izgradnje za AVR ciljeve. Ova opcija rezerviše specificirani memorijski opseg u memorijskom prostoru podataka ili programa, sprečavajući linker da popuni kod ili objekte u ovoj oblasti. Pametniji pametni IO Napravljeno je nekoliko poboljšanja u funkcijama Smart IO, uključujući opća podešavanja koda printf jezgre, tretiranje %n specifikacije konverzije kao nezavisne varijante, povezivanje u vararg pop rutinama na zahtjev, korištenje kraćih tipova podataka gdje je moguće za rukovanje Argumenti IO funkcije i faktoring uobičajenog koda u širini polja i preciznom rukovanju. Ovo 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 servera Ovo izdanje kompajlera za funkcionalnu sigurnost MPLAB XC8 podržava licencu mrežnog servera.
3.4. Verzija 2.36
Nema.
3.5. Verzija 2.35
Podrška za nove 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 ulasku i kako se ti registri vraćaju kada se rutina prekida završi. 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 male servisne rutine prekida. Kada je omogućena, ova funkcija će omogućiti asembleru da skenira ISR za korištenje registra i samo ako je potrebno pohrani ove korištene registre.
Konfigurabilno fleš mapiranje Neki uređaji u porodici AVR DA i AVR DB imaju SFR (npr. FLMAP) koji određuje koji će 32k odsječak programske memorije biti mapiran u memoriju podataka. Nova opcija – mconst-data-in-config-mapped-progmem može se koristiti da bi povezivač smjestio sve podatke kvalificirane za konst u jednu sekciju od 32k i automatski inicijalizirao relevantni SFR registar kako bi osigurao da su ovi podaci mapirani u memoriju podataka prostor, gdje će mu se pristupiti efikasnije.
Microchip Unified Standard Libraries Svi MPLAB XC kompajleri će dijeliti Microchip Unified Standard Library, koja je sada dostupna uz ovo izdanje MPLAB XC8. Uputstvo za upotrebu kompajlera MPLA# XC8 C za AVO MCU više ne uključuje dokumentaciju za ove standardne funkcije. Ove informacije se sada mogu naći u Referentnom vodiču za Microchip Unified Standard Library. Imajte na umu da neke funkcionalnosti koje je prethodno definirao avr-libc više nisu dostupne. (Pogledajte Lila funkcionalnost.)
Smart I0 Kao dio novih objedinjenih biblioteka, funkcije I0 u porodicama printf i scanf sada se generiraju po mjeri za svaku verziju, na osnovu 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 analiziranja 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 specifikacije konverzije koje zahtijeva poziv. Ranije je kompajler uvijek pravio nikakve pretpostavke i osiguravao da je 10 potpuno funkcionalnih funkcija povezano u konačnu sliku programa. Dodata je nova opcija – msmart-io-format=fmt, tako da kompajler umjesto toga može biti informiran od strane korisnika o specifikacijama konverzije koje koriste pametne I0 funkcije čija je upotreba dvosmislena, sprječavajući prekomjerno duge 10 rutina da budu povezane. (Pogledajte opciju smart-io-format za više detalja.)
Postavljanje prilagođenih sekcija Ranije je opcija -W1, –section-start samo postavljala navedeni odeljak na traženu adresu kada je skripta povezivača definisala izlaznu sekciju sa istim imenom. Kada to nije bio slučaj, sekcija je postavljena na adresu koju je odabrao linker i opcija je u suštini zanemarena. Sada će opcija biti poštovana za sve prilagođene sekcije, čak i ako linker skripta ne definira odjeljak. Imajte na umu, međutim, da za standardne sekcije, 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 efekta. Koristite opciju -ton, -Tsection=addr, kao što je opisano u korisničkom vodiču.
3.6. Verzija 2.32
Navođenje steka Dostupno uz PRO licencu kompajlera, funkcija navođenja steka kompajlera može se koristiti za procjenu maksimalne dubine bilo kojeg steka koji koristi program. On konstruiše i analizira graf poziva programa, određuje upotrebu steka za svaku funkciju i proizvodi izveštaj iz kojeg se može zaključiti o dubini stekova koje program koristi. Ova funkcija je omogućena preko opcije komandne linije -mchp-stack-usage. Sažetak upotrebe steka se štampa nakon izvršenja. Detaljan izvještaj o stogu je dostupan na mapi file, koji se može zatražiti na uobičajen način.
Podrška za nove uređaje Podrška je dostupna za sljedeće AVR dijelove: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB, AVR28DB, AVR64DB i AVR32. Podrška za uvučene uređaje Podrška više nije dostupna za sljedeće AVR dijelove: AVR32DA48, AVR16DA28 i, AVR16DA32.
3.7. Verzija 2.31
Nema.
3.8. Verzija 2.30
Nova opcija za sprečavanje inicijalizacije podataka Nova opcija drajvera -mno-data-init sprečava inicijalizaciju podataka i brisanje bss sekcija. Radi tako što potiskuje izlaz podataka do kopiranja i brisanja bss simbola u asembleru files, što će zauzvrat spriječiti uključivanje tih rutina od strane povezivača.
Unaprijeđene optimizacije Napravljen je niz poboljšanja optimizacije, uključujući uklanjanje suvišnih instrukcija za vraćanje, uklanjanje nekih skokova nakon instrukcije preskoči ako-bit-je, te poboljšanu proceduralna apstrakcija i mogućnost ponavljanja ovog procesa. Dodatne opcije su sada dostupne za kontrolu nekih od ovih optimizacija, posebno -f sekcija-sidra, što omogućava pristup statičkim objektima koji se obavljaju u odnosu na jedan simbol; -mpa-iterations=n, što dozvoljava da se broj iteracija proceduralne apstrakcije promijeni od zadanog od 2; i -mpa-callcost-shortcall, koji izvodi agresivniju proceduralnu apstrakciju, u nadi da linker može opustiti duge pozive. Ova posljednja opcija može povećati veličinu koda ako se osnovne pretpostavke ne realizuju.
Podrška za nove uređaje je dostupna za sljedeće AVR dijelove: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128, AVR32 128DB48. Podrška za uvučene uređaje više nije dostupna za sljedeće AVR dijelove: ATA128, ATA64, ATA5272N, ATA5790, ATA5790, ATA5791, ATA5795, ATA6285C, ATA6286C, ATA6612Q, ATA6613ATA6614C, ATA6616ATA6617.
3.9. Verzija 2.29 (Funkcionalno sigurnosno izdanje)
Zaglavlje file za ugrađene kompajlere Da bi se osiguralo da kompajler može biti u skladu sa jezičnim specifikacijama kao što je MISRA, header file, koji je automatski uključen , je ažuriran. 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 moduli možda nisu usklađeni sa MISRA; oni se mogu izostaviti dodavanjem defineXCSTRICT_MISRA u komandnu liniju kompajlera. Ugrađeni elementi i njihove deklaracije su ažurirani da koriste tipove fiksne širine.
3.10. Verzija 2.20
Podrška za nove uređaje Podrška je dostupna za sljedeće AVR dijelove: ATTINY1624, ATTINY1626 i ATTINY1627.
Bolja alokacija najboljeg uklapanja Najbolji alokator najboljeg uklapanja (BFA) u kompajleru je poboljšan tako da se sekcije dodjeljuju redoslijedom koji omogućava bolju optimizaciju. BFA sada podržava imenovane adresne prostore i bolje upravlja inicijalizacijom podataka.
Poboljšana proceduralna apstrakcija Optimizacije proceduralne apstrakcije sada se izvode na više kodnih sekvenci. Prethodne situacije u kojima je ova optimizacija mogla povećati veličinu koda bile su riješene tako što je kod za optimizaciju bio svjestan procesa prikupljanja smeća povezivača.
Odsustvo AVR asemblera AVR asembler više nije uključen u ovu distribuciju.
3.11. Verzija 2.19 (Funkcionalno sigurnosno izdanje)
Nema.
3.12. Verzija 2.10
Pokrivenost koda Ovo izdanje uključuje funkciju pokrivenosti koda koja olakšava analizu obima do koje je izvorni kod projekta izvršen. Koristite opciju -mcodecov=ram da biste je omogućili. Nakon izvršenja programa na vašem hardveru, informacije o pokrivenosti koda će se uporediti u uređaju, a to može biti preneto i prikazano od strane MPLAB X IDE preko dodatka za pokrivenost koda. Pogledajte IDE dokumentaciju za informacije o ovom dodatku koje možete dobiti. #pragma nocodecov se može koristiti za isključivanje naknadnih funkcija iz analize pokrivenosti. Idealno bi bilo da se pragma doda na početak file da se to u celini isključi file iz analize pokrivenosti. Alternativno, _attribute_ ( (nocodecov) ) se može koristiti za isključivanje specifične funkcije iz analize pokrivenosti.
Opis uređaja files Novi uređaj file pod nazivom avr_chipinfo . html se nalazi u direktoriju dokumenata distribucije kompajlera. Ovo file navodi sve uređaje koje podržava kompajler. Kliknite na naziv uređaja i otvorit će se stranica koja prikazuje sve dozvoljene postavke konfiguracijskih bitova/vrijednost za taj uređaj, s examples. Proceduralna apstrakcija
Proceduralne optimizacije apstrakcije, koje zamjenjuju uobičajene blokove asemblerskog koda pozivima ekstrahirane kopije tog bloka, dodane su kompajleru. One se izvode od strane posebne aplikacije, koju automatski poziva kompajler kada bira nivoe 2, 3 ili s optimizacije. Ove optimizacije smanjuju veličinu koda, ali mogu smanjiti brzinu izvršavanja i otklanjanje grešaka koda. Proceduralna apstrakcija se može onemogućiti na višim nivoima optimizacije pomoću opcije -mno-pa, ili se može omogućiti na nižim nivoima optimizacije (u zavisnosti od vaše licence) korištenjem -mpa. Može se onemogućiti za objekat file koristeći -mno-pa-on-file=fileime, ili onemogućeno za funkciju korištenjem -mno-pa-on-function=function. Unutar vašeg izvornog koda, proceduralna apstrakcija se može onemogućiti za funkciju korištenjem atributa ( (nopa) ) s definicijom funkcije ili korištenjem nopa, koji se proširuje na atribut ( (nopa, noinline) ) i na taj način sprječava umetanje funkcije i postoji apstrakcija umetnutog koda.
Podrška za zaključavanje u pragma Konfiguracija #pragma sada se može koristiti za specificiranje AVR bitova za zaključavanje kao i drugih konfiguracijskih bitova. Provjerite avr_chipinfo. html file (gore spomenuto) za parove postavke/vrijednosti koje se koriste sa ovom pragmom. Podrška za novi uređaj 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 kompajlera i upravitelja licencama je sada 64-bitna aplikacija. Ovo će osigurati da će se kompajler instalirati i pokrenuti bez upozorenja na novijim verzijama macOS-a.
Const objekti u programskoj memoriji Kompajler sada može postaviti const kvalifikovane objekte u Flash memoriju programa, umjesto da ih ima u RAM-u. Kompajler je modifikovan tako da se globalni podaci kvalifikovani cons t pohranjuju u programsku fleš memoriju i tim podacima se može direktno i indirektno pristupiti korišćenjem odgovarajućih instrukcija programske memorije. Ova nova funkcija je podrazumevano omogućena, ali se može onemogućiti pomoću opcije -mno-const-data-in-progmem. Za avrxmega3 i avrtiny arhitekture, ova funkcija nije potrebna i uvijek je onemogućena, budući da je programska memorija mapirana u adresni prostor podataka za ove uređaje.
Standardne za besplatne nelicencirane (besplatne) verzije ovog kompajlera sada dozvoljavaju optimizacije do i uključujući nivo 2. Ovo će omogućiti sličan, iako ne identičan, izlaz onome što je ranije bilo moguće korištenjem standardne licence.
Dobrodošli AVRASM2 AVRASM2 asembler za 8-bitne uređaje sada je uključen u instalater kompajlera XC8. Ovaj asembler ne koristi kompajler XC8, ali je dostupan za projekte zasnovane na ručno 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
Drajver najvišeg nivoa Novi drajver, nazvan xc8-cc, sada se nalazi iznad prethodnog avr-gcc drajvera i xc8 drajvera, i može pozvati odgovarajući kompajler na osnovu izbora ciljnog uređaja. Ovaj drajver prihvata opcije GCC stila, koje se ili prevode za ili prosleđuju kompajleru koji se izvršava. Ovaj drajver dozvoljava sličan skup opcija sa sličnom semantikom da se koristi sa bilo kojim AVR ili PIC ciljem i stoga je preporučeni način za pozivanje kompajlera. Ako je potrebno, stari avr-gcc drajver se može pozvati direktno koristeći opcije starog stila koje je prihvatao u ranijim verzijama kompajlera.
Common C Interface Ovaj kompajler sada može da se prilagodi MPLAB Common C Interface, omogućavajući da se izvorni kod lakše prenese na sve MPLAB XC kompajlere. Opcija -mext=cci zahtijeva ovu funkciju, omogućavajući alternativnu sintaksu za mnoge jezičke ekstenzije.
Novi drajver bibliotekara Novi drajver bibliotekara je pozicioniran iznad prethodnog PIC bibliotekara bibliotekara i AVR avr-ar bibliotekara. Ovaj drajver prihvata opcije u stilu GCC-arhivatora, koje se ili prevode za ili prosleđuju bibliotekaru koji se izvršava. Novi drajver omogućava sličan skup opcija sa sličnom semantikom da se koristi za kreiranje ili manipulisanje bilo kojom PIC ili AVR bibliotekom file i stoga je preporučeni način za pozivanje bibliotekara. Ako je potrebno za naslijeđene projekte, prethodni bibliotekar se može pozvati direktno koristeći opcije starog stila koje je prihvatio u ranijim verzijama kompajlera.
Migration Issues
Sljedeće su karakteristike kojima kompajler sada rukuje drugačije. Ove promjene mogu zahtijevati modifikciju vašeg izvornog koda ako se kod prenosi na ovu verziju kompajlera. Broj verzije u podnaslovima označava prvu verziju kompajlera koja podržava promjene koje slijede.
4.1. Verzija 2.41
Uklonjene neprecizne fma funkcije (XC8-2913) Standardna biblioteka C99 fma 0 -porodične funkcije ( ) nije izračunao množenje sa beskonačnom preciznošću za jedno zaokruživanje, već je umjesto toga akumulirao greške zaokruživanja sa svakom operacijom. Ove funkcije su uklonjene iz isporučene biblioteke.
4.2. Verzija 2.40
Nema.
4.3. Verzija 2.39 (Funkcionalno sigurnosno izdanje)
Nema.
4.4. Verzija 2.36 Ništa.
4.5. Verzija 2.35
Rukovanje bazama string-to (XC8-2420) Kako bi se osigurala konzistentnost sa drugim XC kompajlerima, funkcije XC8 string-to, poput strtol () itd., više neće pokušavati da konvertuju ulazni niz ako je specificirana baza veća od 36 i umjesto toga će postaviti errno na EINVAL. C standard ne specificira ponašanje funkcija kada je ova osnovna vrijednost premašena.
Neprikladne optimizacije brzine Optimizacije proceduralne apstrakcije su bile omogućene prilikom odabira optimizacije nivoa 3 (-03). Ove optimizacije smanjuju veličinu koda na račun brzine koda, tako da ih nije trebalo izvoditi. Projekti koji koriste ovu razinu optimizacije mogu vidjeti razlike u veličini koda i brzini izvršavanja kada su napravljeni s ovim izdanjem.
Funkcionalnost biblioteke Kod za mnoge funkcije standardne C biblioteke sada dolazi iz Microchipove Unified Standard Library, koja bi mogla pokazati drugačije ponašanje u nekim okolnostima u poređenju sa onim koje je pružala bivša biblioteka avr-libc. Za nprampda, više nije potrebno povezivati u biblioteci 1printf flt (opcija -1printf_flt) da biste uključili formatiran I0 podrška za specifikacije float formata. Pametan I0 karakteristike Microchip Unified Standard Library čine ovu opciju suvišnom. Dodatno, upotreba rutina sa sufiksom _P za nizove i memorijske funkcije (npr. strcpy_P ( ) itd.) koje rade na konst stringovima u flashu više nije potrebna. Standardne C rutine (npr. strcpy) će ispravno raditi sa takvim podacima kada je omogućena funkcija const-data-in-program-memory.
4.6. Verzija 2.32
Nema.
4.7. Verzija 2.31
Nema.
4.8. Verzija 2.30
Nema.
4.1. Verzija 2.29 (Funkcionalno sigurnosno izdanje)
Nema.
4.2. Verzija 2.20
Promijenjen DFP izgled Kompajler sada pretpostavlja drugačiji izgled koji koriste DFP-ovi (Paketi porodice uređaja). To će značiti da stariji DFP možda neće raditi s ovim izdanjem, a stariji prevodioci neće moći koristiti najnovije DFP-ove.
4.3. Verzija 2.19 (Funkcionalno sigurnosno izdanje)
Nema.
4.4. Verzija 2.10
Nema
4.5. Verzija 2.05
Konstantni objekti u programskoj memoriji Imajte na umu da će se po defaultu, objekti kvalificirani konstom, smjestiti i pristupiti u programskoj memoriji (kao što je opisano nijansa). Ovo će uticati na veličinu i brzinu izvršavanja vašeg projekta, ali bi trebalo smanjiti upotrebu RAM-a. Ova funkcija se može onemogućiti, ako je potrebno, pomoću opcije -mnoconst-data-in-progmem.
4.6. Verzija 2.00
Konfiguracijski osigurači Osigurači za konfiguraciju uređaja sada se mogu programirati korištenjem konfiguracijske pragme praćene parovima vrijednosti-postavke za određivanje stanja osigurača, npr.
#pragma config WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
Apsolutni objekti i funkcije Objekti i funkcije sada mogu biti postavljeni na određenu adresu u memoriji koristeći CCI (adresni) specificer, nprample:
#include
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
Argument ovog specifikacija mora biti konstanta koja predstavlja adresu na kojoj će biti postavljen prvi bajt ili instrukcija. RAM adrese su naznačene korišćenjem pomaka od 0x800000. Omogućite CCI-ju da koristi ovu funkciju.
Nova sintaksa funkcije prekida Kompajler sada prihvata specifikaciju CCI _interrupt (num) da naznači da su C funkcije rukovaoci prekida. Specifikator uzima broj prekida, na primjerample:
#include
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Fiksni problemi
Sljedeće su ispravke koje su napravljene na kompajleru. Ovo bi moglo popraviti greške u generiranom kodu ili promijeniti rad kompajlera na ono što je bilo predviđeno ili specificirano u korisničkom vodiču. Broj verzije u podnaslovima označava prvu verziju kompajlera koja sadrži popravke za probleme koji slijede. Oznake u zagradama u naslovu su 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 porodice uređaja (DFP) koji je povezan sa uređajem. Pogledajte MPLAB Pack Manager za informacije o promjenama napravljenim na DFP-ovima i za preuzimanje najnovijih paketa.
5.1. Verzija 2.41
Problemi sa ključem na Ventura (XC8-3088) ključevima koji se koristi za licenciranje kompajlera možda nije pravilno pročitan na macOS Ventura hostovima, što je rezultiralo neuspjehom licenciranja. Promjene XCLM upravitelja licenci rješavaju ovaj problem.
Neispravna indikacija dodjele memorije (XC8-2925) Pokušaj dodjeljivanja SIZE_MAX bajtova (ili vrijednosti bliske ovoj) memorije korištenjem standardnih funkcija upravljanja memorijom biblioteke (malloc () et al) nije ispravno uspio. Nije uzeo u obzir da su dodatni bajtovi potrebni pored bloka koji se traži kada se koristi implementacija jednostavne dinamičke dodjele memorije. NULL pokazivač će sada biti vraćen i errno postavljen na ENOMEM u takvim situacijama.
Uklonjene neprecizne fma funkcije (XC8-2913) Standardna biblioteka C99 fma ( ) -porodične funkcije ( ) nije izračunao množenje sa beskonačnom preciznošću za jedno zaokruživanje, već je umjesto toga akumulirao greške zaokruživanja sa svakom operacijom. Ove funkcije su uklonjene iz isporučene biblioteke.
Loše rukovanje konverzijom nizova (XC8-2921, XC8-2652) Kada je 'predmetni niz' za konverziju od strane strtod Cr sadržavao ono što je izgledalo kao broj s pomičnim zarezom u eksponencijalnom formatu i postojao je neočekivani znak nakon e/E znaka, tada mu je tamo gdje je naveden endptr dodijeljena adresa koja da je ukazivao na znak iza e/E, dok je trebao da ukazuje na sam e/E znak, pošto on nije konvertovan. Za nprample, strtod (“100exx”, &ep) bi trebao vratiti 100.00 i postaviti ep da pokazuje na “exx” dio niza, dok je funkcija vraćala ispravnu vrijednost, ali je postavljala ep da pokazuje na “xx” dio niza .
5.2. Verzija 2.40
Previše opušteno (XCS-2876) Kada je koristio opciju -mrelax, kompajler nije alocirao neke sekcije zajedno, što je rezultiralo manje optimalnim veličinama koda. Ovo se moglo dogoditi s kodom koji je koristio nove MUSL biblioteke ili sa slabim simbolima.
Funkcija mapiranja nije onemogućena kao što je navedeno u upozorenju (XC8-2875) Funkcija const-data-in-config-mappedprogmem se oslanja na omogućenu funkciju const-data-in-progmem. Ako je funkcija const-data-inconfig-mapped-progmem eksplicitno omogućena pomoću opcije i funkcija const-data-inprogmem je onemogućena, korak povezivanja nije uspio, uprkos poruci upozorenja u kojoj se navodi da je const-data-in-conf fig- mapped-progmem funkcija je bila automatski onemogućena, što nije bilo sasvim tačno. Funkcija const-data-in-config-mapped-progmem je sada potpuno onemogućena u ovoj situaciji.
DFP se mijenja za ispravan pristup NVMCTRL (XC8-2848) Početni kod 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 karakteristika kompajlera. Promjene napravljene u AVR-Ex_DFP verziji 2.2.55 omogućit će kodu za pokretanje da ispravno upiše u ovaj registar.
DFP promjene koje treba izbjegavati fleš mapiranje (XC8-2847) Zaobilazno rešenje za problem sa funkcijom uređaja za fleš mapiranje prijavljen u AVR128DA28/32/48/64 Silicon Errata (D580000882) je implementirano. Funkcija kompajlera const-data-in-config-mapped-progmem neće biti primijenjena prema zadanim postavkama za pogođene uređaje, a ova promjena će se pojaviti u AVR-Dx_DFP verziji 2.2.160.
Greška građenja sa sinhf ili coshf (XC8-2834) Pokušaji korištenja bibliotečkih funkcija sinhf () ili coshf () rezultirali su greškom veze koja opisuje nedefiniranu referencu. Referentna funkcija koja nedostaje sada je uključena u distribuciju kompajlera.
Greške u izradi sa nopa (XC,8-2833) Korištenje atributa nopa s funkcijom kojoj je ime asemblera specificirano pomoću asm ( ) pokrenulo je poruke o grešci od asemblera. Ova kombinacija nije moguća.
Promjenljiva greška funkcije s argumentima pokazivača (XC8-2755, XC8-2731) Funkcije s promjenjivim brojem argumenata očekuju da se 24-bitni (tip memx) pokazivači proslijede na listu varijabilnih argumenata kada je omogućena funkcija const-data-in-progmem. Argumenti koji su bili pokazivači na memoriju podataka bili su proslijeđeni kao 16-bitni objekti, uzrokujući neuspjeh koda kada su na kraju pročitani. Kada je omogućena funkcija constdata-in-progmem, svi argumenti 16-bitnih pokazivača sada se konvertuju u 24-bitne pokazivače.
Funkcije biblioteke strtoxxx ne uspijevaju (XC8-2620) Kada je omogućena funkcija const-data-in-progmem, parametar endptr u funkcijama biblioteke strtoxxx nije pravilno ažuriran za argumente izvornog niza koji nisu u memoriji programa.
Upozorenja za nevažeće zalihe (XC8-2612) Kompajler će sada izdati grešku ako je omogućena funkcija const-in-progmem i ako je adresa stringovog literala eksplicitno prebačena u adresni prostor podataka (ispuštajući kvalifikator const), npr.ample, (uint 8_t *) “Hello World!”. Upozorenje je problem ako adresa može biti nevažeća kada se pokazivač konst podataka eksplicitno dovede u adresni prostor 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 adresni prostor podataka. Za ove uređaje, takvi objekti su sada smješteni u programsku memoriju, čineći njihov rad dosljednim s drugim uređajima.
5.3. Verzija 2.39 (Funkcionalno sigurnosno izdanje)
Nema.
5.4. Verzija 2.36
Greška prilikom odlaganja (XC8-2774) Manje promjene u zadanim optimizacijama slobodnog načina rada spriječile su konstantno savijanje izraza operanda u ugrađene funkcije kašnjenja, što je rezultiralo time da se oni tretiraju kao nekonstante i pokreću grešku: ugrađeni avr delay_cycles očekuje cjelobrojnu konstantu vremena kompajliranja.
5.5. Verzija 2.35
Kontinuirana alokacija pomoću _at (XC8-2653) Kontinualna alokacija više objekata u sekciju s istim imenom i korištenjem _at ( ) nije radila ispravno. Za nprample:
const char arr1[] __attribute__((section(.mysec”))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((section(.mysec”))) = {0xEF, 0xFE};
trebao postaviti arr2 odmah nakon arr1.
Određivanje početnih adresa odjeljka (XC8-2650) The -W1, opcija –section-start je tiho propustila da postavi sekcije na nominovanu početnu adresu. Ovaj problem je popravljen za sve sekcije sa prilagođenim imenom; međutim, neće raditi ni za jednu standardnu sekciju, 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 omogućena optimizacija -mrelax i postoje dijelovi koda ili podataka koji se ne uklapaju u dostupnu memoriju, linker se srušio. Sada, u takvim okolnostima, umjesto toga se izdaju poruke o grešci.
Bez vraćanja (XC8-2646) The –nofallback opcija nije ispravno implementirana, niti dokumentirana. Ovo se sada može odabrati kako bi se osiguralo da se kompajler neće vratiti na nižu postavku optimizacije ako kompajler nije licenciran, već će umjesto toga izdati grešku.
Neprikladne optimizacije brzine (X03-2637) Optimizacije proceduralne apstrakcije su bile omogućene prilikom odabira optimizacije nivoa 3 (-03). Ove optimizacije smanjuju veličinu koda na račun brzine koda, tako da ih nije trebalo izvoditi.
Loš EEPROM pristup (XC8-2629) The eeprom_read_block rutina nije radila ispravno 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 linker opcija (nprampje naveden kroz opciju -vl drajvera), odgovarajuće poreklo regiona teksta/podataka je ažurirano; međutim, krajnja adresa nije prilagođena u skladu s tim, što je moglo dovesti do toga da region premašuje opseg memorije ciljnog uređaja.
Pad s prekomjerno pripisanom funkcijom (XC8-2580) Kompajler se srušio ako je funkcija deklarirana korištenjem više od jednog atributa prekida, signala ili nmi, npr. atributa ( ( signal , interrupt )).
Nevažeći ATtiny kod prekida (XC8-2465) Kada se gradi za ATtiny uređaje i optimizacije su onemogućene (-00), funkcije prekida su možda pokrenule poruke asemblera za operand izvan opsega.
Opcije se ne prolaze kroz (XC8-2452) Kada koristite opciju sa višestrukim opcijama povezivača odvojenim zarezima, nisu sve opcije povezivača prosleđene povezivaču.
Greška indirektnog čitanja programske memorije (X03-2450) U nekim slučajevima, kompajler je proizveo internu grešku (neprepoznatljiv insn) prilikom čitanja vrijednosti od dva bajta iz pokazivača u memoriju programa
5.6. Verzija 2.32
Drugi pristup od biblioteka ne uspijeva (XC8-2381) Pozivanje Windows verzije xc8-ar. .exe arhiver biblioteke drugi put za pristup postojećoj arhivi biblioteke možda nije uspio s porukom o grešci nemogućnost preimenovanja.
5.7. Verzija 2.31
Neobjašnjivi kompajler kvarovi (XC8-2367) Prilikom pokretanja na Windows platformama koje su imale sistemski privremeni direktorij postavljen na putanju koja uključuje tačku '.' karaktera, kompajler možda nije uspio da izvrši.
5.8. Verzija 2.30
Globalne naljepnice zagubljene nakon opisa (XC8-2299) Ručno pisani asemblerski kod koji postavlja globalne oznake unutar nizova sklopova koji su razdvojeni proceduralnim apstrakcijama možda nije ispravno repozicioniran.
Opuštajući sudar (XC8-2287) Korištenje opcije -mrelax je moglo uzrokovati pad linkera kada su optimizacije opuštanja skoka repa pokušale ukloniti ret instrukcije koje nisu bile na kraju odjeljka.
Pad prilikom optimizacije oznaka kao vrijednosti (XC8-2282) Kôd koji koristi ekstenziju jezika GNU C „Oznake kao vrijednosti“ je možda uzrokovao pad optimizacije proceduralne apstrakcije, s greškom popravljanja ocrtanog VMA raspona raspona.
Nije tako konstantno (XC8-2271) Prototipovi za st rstr ( ) i druge funkcije iz više ne navodi nestandardni konst kvalifikator na vraćenim stringovima pokazivača kada je funkcija -mconst-data-inprogmem onemogućena. Imajte na umu da je kod uređaja avrxmega3 i avrtiny ova funkcija trajno omogućena.
Izgubljeni inicijalizatori (XC8-2269) Kada je više od jedna varijabla u jedinici prijevoda je stavljena u sekciju (koristeći _section ili _attribute_ ( (section) )), a prva takva varijabla je bila inicijalizirana nula ili nije imala inicijalizator, inicijalizatore za druge varijable u istoj prijevodnoj jedinici koje su postavljene u istom dijelu su izgubljeni.
5.1. Verzija 2.29 (Funkcionalno sigurnosno izdanje)
Nema.
5.2. Verzija 2.20
Greška sa dugim komandama (XC8-1983) Kada se koristi AVR cilj, kompajler je možda stao sa a file nije pronađena greška, ako je komandna linija bila izuzetno velika i sadržavala posebne znakove kao što su navodniki, obrnute kose crte itd.
Nedodijeljena sekcija rodata (XC8-1920) AVR linker nije uspio dodijeliti memoriju za prilagođene rodata sekcije prilikom izgradnje za avrxmega3 i avrtiny arhitekture, potencijalno stvarajući greške preklapanja memorije
5.3. Verzija 2.19 (Funkcionalno sigurnosno izdanje)
Nema.
5.4. Verzija 2.10
Neuspjesi preseljenja (XC8-1891) Alokator koji najbolje odgovara bio je ostavljajući memorijske 'rupe' između sekcija nakon opuštanja linkera. Osim fragmentacije memorije, ovo je povećalo mogućnost da dođe do kvarova pri premeštanju linkera koji se odnose na skokove u odnosu na računar ili da pozivi postanu izvan dometa.
Instrukcije koje nisu transformisane opuštanjem (XC8-1889) Relaksacija linkera se nije dogodila 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 makroi Makroi predprocesora _XC8_MODE_, _XC8_VERS ION, _XC i _XC8 nisu automatski definirani od strane kompajlera. Ovi su sada dostupni.
5.5. Verzija 2.05
Interna greška kompajlera (XC8-1822) Prilikom izrade pod Windowsom, možda je došlo do interne greške kompajlera prilikom optimizacije koda.
Prelivanje RAM-a nije otkriveno (XC8-1800, XC8-1796) Programe koji su premašili dostupnu RAM memoriju kompajler nije otkrio u nekim situacijama, što je rezultiralo neuspjehom koda izvođenja.
Izostavljena flash memorija (XC8-1792) Za uređaje avrxmega3 i avrtiny, MPLAB X je možda ostavio neprogramirane dijelove fleš memorije IDE.
Neuspjeh u izvršavanju glavnog (XC8-1788) U nekim situacijama u kojima program nije imao definirane globalne varijable, startni kod za vrijeme izvođenja nije izašao i glavna ( ) funkcija nikada nije dosegnuta.
Netačne informacije o memoriji (XC8-1787) Za avrxmega3 i avrtiny uređaje, program veličine avr je izvještavao da podaci samo za čitanje troše RAM umjesto programske memorije.
Neispravno očitanje programske memorije (XC8-1783) Projekti kompajlirani za uređaje s programskom memorijom mapiranom u adresni prostor podataka i koji definiraju objekte koristeći PROGMEM makro/atribut možda su pročitali ove objekte s pogrešne adrese.
Interna greška s atributima (XC8-1773) Došlo je do interne greške ako ste definirali objekte pokazivača sa
_at () ili attribute() tokeni između imena pokazivača i dereferenciranog tipa, na primjerample, char *
_at (0x800150) cp; Sada se izdaje upozorenje ako se naiđe na takav kod.
Neuspješno izvršavanje glavnog (XC8-1780, XC8-1767, XC8-1754) Korištenje EEPROM varijabli ili definiranje osigurača korištenjem konfiguracijske pragme moglo je uzrokovati neispravnu inicijalizaciju podataka i/ili zaključano izvršavanje programa u kodu pokretanja vremena izvođenja, prije nego što se dosegne main ( ) .
Greška osigurača sa sićušnim uređajima (XC8-1778, XC8-1742) Uređaji attiny4/5/9/ 10/20/40 imali su netačnu dužinu osigurača navedenu u zaglavlju filekoji dovode do grešaka povezivača pri pokušaju izrade koda koji definira osigurače.
Segmentacija greška (XC8-1777) Ispravljena je povremena greška segmentacije.
Pad asemblera (XC8-1761) Avr-as asembler se možda srušio kada je kompajler pokrenut pod Ubuntu 18.
Objekti nisu očišćeni (XC8-1752) Neinicijalizirani objekti trajanja statičke memorije možda nisu bili obrisani kodom pokretanja vremena izvođenja.
Ignorirana je proturječna specifikacija uređaja (XC8-1749) Kompajler nije generirao grešku kada je korišteno više opcija specifikacije uređaja i naznačio je različite uređaje.
Oštećenje memorije zbog hrpe (XC8-1748) The Simbol _heap_start je bio pogrešno postavljen, što je rezultiralo mogućnošću da obične varijable budu oštećene hrpom.
Greška premještanja linkera (XC8-1739) Greška premještanja povezivača je možda bila emitirana kada je kod sadržavao rjmp ili rcall s ciljem udaljenom točno 4k bajta.
5.6. Verzija 2.00
Nema.
Poznati problemi
Slijede ograničenja u radu kompajlera. 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 vjerovatno ostati na snazi trajno.
6.1. MPLAB X IDE Integracija
MPLAB IDE integracija Ako će se kompajler koristiti iz MPLAB IDE-a, onda morate instalirati MPLAB IDE prije instaliranja kompajlera.
6.2. Generacija koda
Segfault s opcijom section-anchors (XC8-3045) Program koji je definirao funkcije s promjenjivim listama argumenata i koji koristi opciju -fsection-anchors mogao je pokrenuti internu grešku kompajlera: Greška segmentacije.
Informacije o otklanjanju grešaka nisu sinhronizirane (XC8-2948) Kada optimizacija opuštanja linkera smanji instrukcije (nprample call to rcall uputstva), mapiranja izvorne linije u adresu možda neće ostati sinhronizovana kada se u sekciji dešava više od jedne operacije skupljanja.
U nastavku exampDakle, postoje dva poziva foo koji završavaju opušteno na relativne pozive.
Greška pri dodjeli PA memorije (XC8-2881) Kada se koriste optimizatori proceduralne apstrakcije, povezivač može prijaviti greške u dodjeli memorije kada je veličina koda blizu količini dostupne programske memorije na uređaju, iako bi program trebao biti u stanju da stane u raspoloživi prostor.
Nije tako pametan Smart-I0 (XC8-2872) Funkcija smart-io kompajlera će generisati važeći, ali suboptimalan kod za funkciju snprint f ako je funkcija const-data-in-progmem onemogućena ili ako uređaj ima sav svoj fleš mapiran u memoriju podataka.
Još manje pametan Smart-I0 (XC8-2869) Funkcija smart-io kompajlera će generisati validan, ali suboptimalan kod kada se koriste opcije -flto i -fno-builtin.
Suboptimalno postavljanje podataka samo za čitanje (XC8-2849) Linker trenutno ne zna za memorijske sekcije APPCODE i APPDATA, niti za podjele [No-Read-While-Write] u memorijskoj mapi. Kao rezultat toga, postoji mala šansa da bi linker mogao dodijeliti podatke samo za čitanje u neprikladnom području memorije. Šansa za pogrešno postavljene podatke se povećava ako je omogućena funkcija const-data-in-progmem, posebno ako je također omogućena funkcija const-data-in-config-mapped-progmem. Ove funkcije se mogu onemogućiti ako je potrebno.
Objekat file obrada naloga (XC8-2863) Redoslijed po kojem su objekti files koje će obraditi linker može se razlikovati ovisno o korištenju optimizacije proceduralne apstrakcije (-mpa opcija). Ovo bi utjecalo samo na kod koji definira slabe funkcije u više modula.
Greška linkera sa apsolutnim (XC8-2777) Kada je objekt postao apsolutan na adresi na početku RAM-a i neinicijalizirani objekti su također definirani, može se pokrenuti greška povezivača.
Kratki ID-ovi za buđenje (XC8-2775) Za ATA5700/2 uređaje, PHIDO/1 registri su definirani samo kao široki 16 bita, umjesto 32 bita.
Pad linkera prilikom pozivanja simbola (XC8-2758) Linker se može srušiti ako se opcija drajvera -mrelax koristi kada izvorni kod poziva simbol koji je definiran pomoću opcije -cc., –de f sym linkera.
Neispravna 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 memoriju podataka i gdje će se varijablama pristupati u vrijeme izvođenja.
Loši indirektni pozivi funkcija (XC8-2628) U nekim slučajevima, pozivi funkcija napravljeni preko pokazivača funkcije pohranjenog kao dio strukture mogu propasti.
strtof vraća nulu za heksadecimalne float (XC8-2626) Bibliotečke funkcije strtof et al i scanf ( ) et al, uvijek će pretvoriti heksadecimalni broj s pomičnim zarezom koji ne specificira eksponent u nulu. Za nprample:
strtof (“Oxl”, &endptr) ;
će vratiti vrijednost 0, a ne I.
Netačne poruke savjetnika za stek (XC8-2542, XC8-2541) U nekim slučajevima, upozorenje savjetnika steka u vezi sa rekurzijom ili neodređenim stekom koji se koristi (moguće korištenjem alloca()) se ne emituje.
Greška s dupliranim kodom prekida (XC8-2421) Kada više od jedne funkcije prekida ima isto tijelo, kompajler može imati izlaz za jednu funkciju prekidanja poziva drugu. Ovo će rezultirati nepotrebnim pohranjivanjem svih registra koji su blokirani pozivima, a prekidi će biti omogućeni čak i prije nego što se pokrene epilog trenutnog rukovaoca prekida, što može dovesti do neuspjeha koda.
Loš izlaz s nevažećom DFP putanjom (XC8-2376) Ako je kompajler pozvan sa nevažećom DFP putanjom i 'specifikacijom' file postoji za odabrani uređaj, kompajler ne prijavljuje familijarni paket uređaja koji nedostaje i umjesto toga odabire 'spec.' file, što onda može dovesti do neispravnog izlaza. 'specifikacija' files možda nisu ažurirani s distribuiranim DFP-ovima i bili su namijenjeni samo za upotrebu sa internim testiranjem kompajlera.
Neotkriveno preklapanje memorije (XC8-1966) Kompajler ne otkriva preklapanje memorije objekata koji su postali apsolutni na adresi (preko _at ( )) i drugih objekata koji koriste specifikaciju sekcije ( ) i koji su povezani na istu adresu.
Greška s bibliotečkim funkcijama i _memx (XC8-1763) Pozvane libgcc float funkcije s argumentom u memx adresnom prostoru možda neće uspjeti. Imajte na umu da se bibliotečke rutine pozivaju iz nekih C operatora, tako, na primjerample, sljedeći kod je pogođen:
return regFloatVar > memxFloatVar;
Ograničena implementacija libgcc (AVRTC-731) Za ATTiny4/5/9/10/20/40 proizvode, implementacija standardne C / Math biblioteke u libgcc je vrlo ograničena ili nije prisutna.
Ograničenja programske memorije (AVRTC-732) Lanac alata podržava slike programske memorije veće od 128 kb; međutim, poznati su slučajevi prekida veze povezivača bez opuštanja i bez korisne poruke o grešci umjesto generiranja potrebnih funkcijskih stubova kada se koristi opcija -mre lax.
Ograničenja prostora imena (AVRTC-733) Imenovani adresni prostori su podržani od strane lanca alata, podložni ograničenjima navedenim u odeljku korisničkog vodiča Posebni kvalifikatori tipa.
Vremenske zone The funkcije biblioteke pretpostavljaju GMT i ne podržavaju lokalne vremenske zone, tako da ć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
![]() |
Softver za razvoj kompajlera MICROCHIP MPLAB XC8 C [pdf] Uputstvo za upotrebu MPLAB XC8 C, MPLAB XC8 C softver za razvoj kompajlera, softver za razvoj kompajlera, razvojni softver, softver |




