MPLAB® XC8 C kompiliatoriaus 2.41 versijos AVR® MCU išleidimo pastabos
Savininko vadovas
MPLAB XC8 C kompiliatoriaus kūrimo programinė įranga
ŠIAME DOKUMENTE YRA SVARBI INFORMACIJA, SUSIJUSI SU MPLAB XC8 C KOMPILIERIU, KAI TAIKOMA PO MICROCHIP AVR ĮRENGINIUS.
PRAŠOME JĄ PERSKAITYTI PRIEŠ NAUDOJANT ŠIĄ PROGRAMINĘ ĮRANGĄ. ŽR. MPLAB XC8 C KOMPILIATORIAUS IŠLEIDIMO PASTABAS DĖL PIC DOKUMENTO, JEI NAUDOJATE KOMPILIATORIUS 8 BITŲ PIC ĮRENGINIAMS.
Baigėsiview
1.1. Įvadas
Šiame Microchip MPLAB® XC8 C kompiliatoriaus leidime yra keletas naujų funkcijų ir klaidų pataisymų.
1.2. Sukūrimo data
Oficiali šios kompiliatoriaus versijos kūrimo data yra 8 m. vasario 2023 d.
1.3. Ankstesnė versija
Ankstesnė MPLAB XC8 C kompiliatoriaus versija buvo 2.40, sukurta 3 m. liepos 2022 d.
1.4. Funkcinės saugos vadovas
MPLAB XC kompiliatorių funkcinės saugos vadovą rasite dokumentų pakete, kai įsigyjate funkcinės saugos licenciją.
1.5. Komponentų licencijos ir versijos
MPLAB XC8 C kompiliatorius, skirtas AVR MCU įrankiams, yra parašytas ir platinamas pagal GNU bendrąją viešąją licenciją (GPL), o tai reiškia, kad jo šaltinio kodas yra laisvai platinamas ir prieinamas visuomenei.
Įrankių pagal GNU GPL šaltinio kodą galima atsisiųsti atskirai iš Microchip's websvetainę. GNU GPL galite perskaityti faile, pavadintame jūsų diegimo licencijos.txt avr/doc katalogo pakatalogyje. Bendrą GPL principų aptarimą rasite čia.
Antraštės failų, nuorodų scenarijų ir vykdymo laiko bibliotekų palaikymo kodas yra patentuotas kodas ir jam netaikomas GPL.
Šis kompiliatorius yra GCC 5.4.0 versijos, binutils 2.26 versijos ir naudoja 2.0.0 versiją avr-libc.
1.6. Sistemos reikalavimai
MPLAB XC8 C kompiliatorius ir jo naudojama licencijavimo programinė įranga yra prieinama įvairioms operacinėms sistemoms, įskaitant šių 64 bitų versijas: profesionalūs Microsoft® Windows® 10 leidimai; Ubuntu® 18.04; ir macOS® 10.15.5. „Windows“ dvejetainiai failai buvo pasirašyti kodu. „MacOS“ dvejetainiai failai buvo pasirašyti kodu ir patvirtinti notaro. MPLAB XC tinklo licencijos serverį galima naudoti įvairioms 64 bitų operacinėms sistemoms, įskaitant Microsoft Windows 10 ir naujesnes versijas; Ubuntu 18.04 ir naujesnės versijos; arba macOS 10.15 ir naujesnės versijos. Serveris taip pat gali veikti įvairiose kitose operacinėse sistemose, įskaitant Windows Server, Linux platinimus, tokius kaip Oracle® Enterprise Linux® ir Red Hate Enterprise Linux, taip pat senesnėse palaikomų operacinių sistemų versijose. Tačiau MPLAB XC tinklo licencijos serveris nėra išbandytas šiose operacinėse sistemose. MPLAB XC tinklo licencijos serverį galima paleisti palaikomos OS virtualiose mašinose, naudojant virtualios mašinos tinklo licencijų licenciją (SW006021-VM). Visos 32 bitų MPLAB XC tinklo serverio versijos nutraukiamos nuo 3.00 versijos.
Palaikomi įrenginiai
Šis kompiliatorius palaiko visus galimus 8 bitų AVR MCU įrenginius išleidimo metu. Visų palaikomų įrenginių sąrašą rasite (kompiliatoriaus kataloge). Šie failai taip pat pateikiami
avr_chipinfo.html doc konfigūracijos bitų nustatymus kiekvienam įrenginiui.
1.7. Leidimai ir licencijos atnaujinimai
MPLAB XC8 kompiliatorius gali būti aktyvuotas kaip licencijuotas (PRO) arba nelicencijuotas (nemokamas) produktas. Norėdami licencijuoti kompiliatorių, turite įsigyti aktyvinimo raktą. Licencija leidžia pasiekti aukštesnį optimizavimo lygį, palyginti su nemokamu produktu. Nelicencijuotas kompiliatorius be licencijos gali būti naudojamas neribotą laiką. MPLAB XC8 funkcinės saugos kompiliatorius turi būti aktyvuotas naudojant funkcinės saugos licenciją, įsigytą iš Microchip. Kompiliatorius neveiks be šios licencijos. Suaktyvinę galite pasirinkti bet kurį optimizavimo lygį ir naudoti visas kompiliatoriaus funkcijas. Šis MPLAB XC funkcinės saugos kompiliatoriaus leidimas palaiko tinklo serverio licenciją.
Norėdami gauti informacijos apie licencijų tipus ir kompiliatoriaus su licencija diegimą, žr. dokumentą MPLAB XC C kompiliatorių diegimas ir licencijavimas (DS50002059).
1.8. Diegimas ir aktyvinimas
Taip pat žr. skyrius Perkėlimo problemos ir apribojimai, kur rasite svarbios informacijos apie naujausią licencijų tvarkyklę, įtrauktą į šį kompiliatorių.
Jei naudojate MPLAB IDE, prieš diegdami šį įrankį būtinai įdiekite naujausią MPLAB X IDE 5.0 ar naujesnę versiją. Prieš diegdami kompiliatorių, išeikite iš IDE. Paleiskite (Windows), (Linux) arba (macOS) .exe .run .app kompiliatoriaus diegimo programą, pvz., ir vykdykite ekrane pateikiamus nurodymus. XC8-1.00.11403-windows.exe Rekomenduojamas numatytasis diegimo katalogas. Jei naudojate Linux, turite įdiegti kompiliatorių naudodami terminalą ir iš root paskyros. Įdiekite naudodami „MacOS“ paskyrą su administratoriaus teisėmis.
Dabar aktyvinimas atliekamas atskirai nuo diegimo. Norėdami gauti daugiau informacijos, žr. dokumentą License Manager for MPLAB® XC C kompiliatoriai (DS52059).
Jei nuspręsite paleisti kompiliatorių pagal vertinimo licenciją, dabar gausite įspėjimą kompiliavimo metu, kai baigsite 14 dienų nuo vertinimo laikotarpio pabaigos. Tas pats įspėjimas pateikiamas, jei esate per 14 dienų nuo HPA prenumeratos pabaigos.
XC tinklo licencijos serveris yra atskira diegimo programa ir nėra įtraukta į vieno vartotojo kompiliatoriaus diegimo programą.
„XC License Manager“ dabar palaiko slankiojo tinklo licencijų tarptinklinį ryšį. Ši funkcija skirta mobiliojo ryšio naudotojams, todėl slankioji licencija trumpam laikui gali išeiti iš tinklo. Naudodami šią funkciją galite atsijungti nuo tinklo ir vis tiek naudoti savo MPLAB XC kompiliatorių. Norėdami sužinoti daugiau apie šią funkciją, žr. XCLM diegimo aplanką doc.
MPLAB X IDE apima licencijų langą (Įrankiai > Licencijos), kad galėtumėte vizualiai valdyti tarptinklinį ryšį.
1.8.1. Diegimo problemų sprendimas
Jei kyla sunkumų diegiant kompiliatorių bet kurioje iš Windows operacinės sistemos, išbandykite šiuos pasiūlymus.
Paleiskite diegimą kaip administratorius.
Nustatykite diegimo programos leidimus į „Visas valdymas“. (Dešiniuoju pelės mygtuku spustelėkite failą, pasirinkite Ypatybės, Sauga, pasirinkite vartotoją, redaguokite.)
Nustatykite laikinojo aplanko leidimus į „Visa kontrolė“.
Norėdami nustatyti laikinojo aplanko vietą, komandoje Vykdyti įveskite %temp% („Windows“ logotipo klavišas + R).
Tai atvers failų naršyklės dialogo langą, kuriame bus rodomas tas katalogas, ir galėsite nustatyti to aplanko kelią.
1.9. Kompiliatoriaus dokumentacija
Kompiliatoriaus vartotojo vadovus galima atidaryti iš HTML puslapio, kuris atsidaro jūsų naršyklėje spustelėjus mėlyną pagalbos mygtuką MPLAB X IDE prietaisų skydelyje, kaip nurodyta ekrano kopijoje.
Jei kuriate 8 bitų AVR taikinius, MPLAB® XC8 C kompiliatoriaus vartotojo vadove, skirtame AVR® MCU, pateikiama informacija apie tas kompiliatoriaus parinktis ir funkcijas, kurios tinka šiai architektūrai.

1.10.Pagalba klientams
„Microchip“ laukia pranešimų apie klaidas, pasiūlymų ar komentarų apie šią kompiliatoriaus versiją. Visus pranešimus apie klaidas ar funkcijų užklausas nukreipkite per palaikymo sistemą.
Dokumentacijos atnaujinimai
Norėdami gauti internetines ir naujausias MPLAB XC8 dokumentacijos versijas, apsilankykite Microchip internetinėje techninėje dokumentacijoje websvetainę. Nauja arba atnaujinta AVR dokumentacija šioje laidoje:
- MPLAB® XC8 C kompiliatoriaus vartotojo vadovas, skirtas AVR® MCU (G versija)
- AVR® GNU Toolchain į MPLAB® XC8 perkėlimo vadovas (A versija)
- „Hexmate“ vartotojo vadovas (B versija)
AVR® GNU Toolchain į MPLAB® XC8 Migration Guide aprašo šaltinio kodo pakeitimus ir kūrimo parinktis, kurių gali prireikti, jei nuspręstumėte perkelti C pagrindu sukurtą projektą iš AVR 8 bitų GNU Toolchain į Microchip MPLAB XC8 C kompiliatorių. „Microchip Unified Standard Library“ informaciniame vadove aprašoma „Microchip Unified Standard Library“ apibrėžtų funkcijų veikimas ir sąsaja su jomis, taip pat numatomas bibliotekos tipų ir makrokomandų naudojimas. Dalis šios informacijos anksčiau buvo pateikta MPLAB® XC8 C kompiliatoriaus vartotojo vadove, skirtame AVR® MCU. Šiame kompiliatoriaus vadove vis dar yra informacija apie konkretų įrenginį.
Jei tik pradedate naudoti 8 bitų įrenginius ir MPLAB XC8 C kompiliatorių, MPLAB® XC8 vartotojo vadove įterptiesiems inžinieriams – AVR® MCU (DS50003108) yra informacijos apie projektų nustatymą MPLAB X IDE ir kodo rašymą pirmasis MPLAB XC8 C projektas. Šis vadovas dabar platinamas kartu su kompiliatoriumi.
Hexmate vartotojo vadovas skirtas tiems, kurie naudoja Hexmate kaip atskirą programą.
Kas naujo
Toliau pateikiamos naujos AVR tikslinės funkcijos, kurias dabar palaiko kompiliatorius. Versijos numeris paantraštėse nurodo pirmąją kompiliatoriaus versiją, kuri palaiko toliau nurodytas funkcijas.
3.1. 2.41 versija
Bootrow palaikymas (XC8-3053) Kompiliatorius HEX faile įdės bet kokių skyrių, kurių priešdėlis at.bootrow adresu 0x860000, turinį. Šios skiltys naudojamos BOOTROW atminčiai, skirtai raktams ir kitai saugiai informacijai, kuri turėtų būti pasiekiama tik įkrovos įkrovikliui, saugoti.
Perteklinio grąžinimo pašalinimas (XC8-3048) Dabar kompiliatorius pašalins perteklines instrukcijas ret funkcijose su uodegos šuoliu, kai naudojami pasirinktiniai susiejimo scenarijai. Tai yra panašus optimizavimas, kaip ir anksčiau, tačiau dabar jis atliekamas visose našlaičių skiltyse, net jei naudojamas tinkintas susiejimo scenarijus ir neveikia geriausiai tinkanti paskirstymo schema. Laiko tipo keitimas (XC8-2982, 2932) C99 standartinis bibliotekos tipas buvo pakeistas iš time_t į tipą, kuris suteikia kodo dydžio patobulinimų kai kuriose su laiku susijusiose ilgose funkcijose, pvz.,. nepasirašytas ilgas mktime()
Naujas nop (XC8-2946, 2945) Makrokomandas buvo pridėtas. Ši makrokomanda įterpia ne-NOP() nop operacijos instrukcija į išvestį.
XCLM naujinimas (XC8-2944) Su kompiliatoriumi naudojama licencijų tvarkyklė buvo atnaujinta ir dabar geriau reaguoja tikrinant išsamią kompiliatoriaus licencijos informaciją.
Trampolined calls (XC8-2760) Kompiliatorius dabar gali pakeisti ilgos formos skambučio komandas trumpesniais santykiniais iškvietimais, kai santykinės instrukcijų formos paprastai yra už paskirties vietos ribų. Tokiu atveju kompiliatorius bandys pakeisti instrukcijomis iškviesti rccal nurodymą, kurisampoline' vykdymas reikiamu adresu, pvzample: jmp
skambinti tramp_foo ;skambino foo
…
skambinti tramp_foo
…
tramp_foo:
jmp foo
Šį optimizavimą kartu su panašiais programos srauto optimizavimais valdo parinktis -mrelax.
3.2. 2.40 versija
Naujo įrenginio palaikymas Dabar galimas šių AVR dalių palaikymas: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, A64 ir AVR32EA64.
Patobulinta procedūrinė abstrakcija Procedūrinės abstrakcijos (PA) optimizavimo įrankis buvo patobulintas, kad būtų galima apibūdinti kodą, kuriame yra funkcijos iškvietimo instrukcija (/ ). Tai įvyks tik call rcall, jei kaminas nenaudojamas argumentams perduoti ar funkcijos grąžinimo vertei gauti. Stackas naudojamas iškviečiant funkciją su kintamųjų argumentų sąrašu arba funkcijai, kuriai reikia daugiau argumentų, nei yra tam skirtų registrų. Ši funkcija gali būti išjungta naudojant parinktį arba procedūrinė abstrakcija gali būti visiškai išjungta objekto failui arba funkcijai, naudojant atitinkamai - ir arba naudojant atributą (specifikatorių) pasirinktinai su funkcijomis.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa Kodo aprėpties makrokomanda Kompiliatorius dabar apibrėžia makrokomandą, jei nurodyta tinkama parinktis __nopa __CODECOV -mcodecov.
Atminties rezervavimo parinktis Dabar tvarkyklė priims parinktį xc8-cc -mreserve=space@start:end, kai kuria AVR objektus. Ši parinktis rezervuoja nurodytą atminties diapazoną duomenų arba programos atminties erdvėje, neleidžiant nuorodai šioje srityje užpildyti kodo ar objektų. Išmanesnis išmanusis IO Buvo atlikti keli Smart IO funkcijų patobulinimai, įskaitant bendrus printf pagrindinio kodo patobulinimus, %n konversijos specifikatoriaus traktavimą kaip nepriklausomą variantą, vararg pop rutinų susiejimą pagal poreikį, naudojant trumpesnius duomenų tipus, jei įmanoma. IO funkcijos argumentai ir įprasto kodo faktorinavimas lauko pločio ir tikslios tvarkymo srityse. Tai gali žymiai sutaupyti kodo ir duomenų, taip pat padidinti IO vykdymo greitį.
3.3. 2.39 versija (funkcinės saugos leidimas)
Tinklo serverio licencija Šis MPLAB XC8 funkcinės saugos kompiliatoriaus leidimas palaiko tinklo serverio licenciją.
3.4. 2.36 versija
Nėra.
3.5. 2.35 versija
Naujų įrenginių palaikymas Galimas šių AVR dalių palaikymas: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 ir AVR64DD32.
Patobulintas konteksto perjungimas Naujoji parinktis -mcall-isr-prologues pakeičia tai, kaip pertraukimo funkcijos išsaugo registrus įvedus ir kaip tie registrai atkuriami, kai nutraukimo rutina baigiasi. Jis veikia panašiai kaip parinktis -mcall-prologues, bet veikia tik pertraukimo funkcijas (ISR).
Dar labiau patobulintas konteksto perjungimas Naujoji parinktis -mgas-isr-prologues valdo konteksto perjungimo kodą, sugeneruotą mažoms pertraukimo paslaugų rutinoms. Įjungus šią funkciją, surinkėjas nuskaitys ISR ir išsaugos tik tuos naudotus registrus, jei reikia.
Konfigūruojamas „flash“ atvaizdavimas Kai kurie AVR DA ir AVR DB šeimos įrenginiai turi SFR (pvz., FLMAP), kuris nurodo, kuri 32k programos atminties dalis bus susieta su duomenų atmintimi. Naujoji parinktis „mconst-data-in-config-mapped-progmem“ gali būti naudojama, kad linkeris patalpintų visus const kvalifikuotus duomenis į vieną 32k sekciją ir automatiškai inicijuotų atitinkamą SFR registrą, kad šie duomenys būtų susieti duomenų atmintyje. erdvė, kur ji bus efektyviau pasiekiama.
Microchip Unified Standard Libraries Visi MPLAB XC kompiliatoriai dalinsis Microchip Unified Standard biblioteka, kuri dabar pasiekiama su šiuo MPLAB XC8 leidimu. MPLA# XC8 C kompiliatoriaus vartotojo vadove, skirtame AVO MCU, nebėra šių standartinių funkcijų dokumentacijos. Šią informaciją dabar galite rasti „Microchip Unified Standard Library“ informaciniame vadove. Atminkite, kad kai kurios anksčiau avr-libc apibrėžtos funkcijos nebėra prieinamos. (Žr. „Lila“ funkciją.)
Smart I0 Kaip dalis naujų suvienodintų bibliotekų, I0 funkcijos printf ir scanf šeimose dabar yra sugeneruojamos pagal užsakymą kiekvienoje versijoje, atsižvelgiant į tai, kaip šios funkcijos naudojamos programoje. Tai gali žymiai sumažinti programos naudojamus išteklius.
Išmaniosios ICI pagalbos parinktis Analizuodamas iškvietimus į išmaniąsias I0 funkcijas (pvz., print f () arba scanf ()), kompiliatorius ne visada gali nustatyti pagal formato eilutę arba iš argumentų nustatyti iškvietimui reikalingų konversijos specifikacijų. Anksčiau kompiliatorius visada nedarė jokių prielaidų ir užtikrino, kad 10 visiškai veikiančių funkcijų būtų susietos su galutiniu programos vaizdu. Pridėta nauja – msmart-io-format=fmt parinktis, kad vartotojas galėtų informuoti kompiliatorių apie išmaniųjų I0 funkcijų, kurių naudojimas yra dviprasmiškas, konvertavimo specifikacijas, neleidžiančias susieti pernelyg ilgų 10 rutinų. (Norėdami gauti daugiau informacijos, žr. Smart-io-format parinktį.)
Pasirinktinių sekcijų įdėjimas Anksčiau parinktis -W1, -section-start nurodytą sekciją įdėdavo tik prašomu adresu, kai susiejimo scenarijus apibrėžė išvesties sekciją tuo pačiu pavadinimu. Kai to nebuvo, skyrius buvo patalpintas linkerio pasirinktu adresu ir parinktis iš esmės buvo ignoruojama. Dabar ši parinktis bus taikoma visoms pasirinktinėms sekcijoms, net jei nuorodos scenarijus neapibrėžia skyriaus. Tačiau atminkite, kad standartiniams skyriams, tokiems kaip . tekstas,. bss arba . duomenis, geriausiai tinkantis skirstytuvas vis tiek galės visiškai valdyti jų vietą, o parinktis neturės jokios įtakos. Naudokite parinktį -ton, -Tsection=addr, kaip aprašyta vartotojo vadove.
3.6. 2.32 versija
Stack Guidance Galima naudoti su PRO kompiliatoriaus licencija, kompiliatoriaus dėklo valdymo funkcija gali būti naudojama norint įvertinti maksimalų bet kurios programos naudojamo dėklo gylį. Jis sukuria ir analizuoja programos iškvietimo grafiką, nustato kiekvienos funkcijos dėklo naudojimą ir parengia ataskaitą, iš kurios galima spręsti apie programos naudojamų krūvų gylį. Ši funkcija įjungiama naudojant komandinės eilutės parinktį -mchp-stack-usage. Po vykdymo išspausdinama dėklo naudojimo santrauka. Išsamią krūvos ataskaitą rasite žemėlapyje file, kurio galima prašyti įprastu būdu.
Naujo įrenginio palaikymas Galimas šių AVR dalių palaikymas: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64. Atitraukto įrenginio palaikymas Palaikymas nebepasiekiamas šioms AVR dalims: AVR32DA32, AVR48DA16 ir AVR28DA16.
3.7. 2.31 versija
Nėra.
3.8. 2.30 versija
Nauja parinktis užkirsti kelią duomenų inicijavimui Nauja -mno-data-init tvarkyklės parinktis neleidžia inicijuoti duomenų ir išvalyti bss sekciją. Jis veikia slopindamas „do“ kopijavimo duomenų išvestį ir surinkdamas aiškius bss simbolius files, o tai savo ruožtu neleis jungties programai įtraukti šias procedūras.
Patobulintas optimizavimas Buvo atlikta daug optimizavimo patobulinimų, įskaitant perteklinių grąžinimo instrukcijų pašalinimą, kai kurių šuoliukų pašalinimą po nurodymo praleisti bitą, patobulinta procedūrinė abstrakcija ir galimybė kartoti šį procesą. Dabar galimos papildomos parinktys, leidžiančios valdyti kai kuriuos iš šių optimizacijų, ypač -f sekcijos inkarus, kurie leidžia pasiekti statinius objektus, palyginti su vienu simboliu; -mpa-iterations=n, kuri leidžia pakeisti procedūrinių abstrakcijos iteracijų skaičių nuo numatytojo 2; ir -mpa-callcost-shortcall, kuri atlieka agresyvesnę procedūrinę abstrakciją, tikintis, kad nuoroda gali atpalaiduoti ilgus skambučius. Ši paskutinė parinktis gali padidinti kodo dydį, jei pagrindinės prielaidos nebus įgyvendintos.
Naujas įrenginių palaikymas Galimas šių AVR dalių palaikymas: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DA28, AVR128, AVR32DA128, AVR48, AVR128DA64, AVR5272DA5790, AVR5790DA5791, AVR5795DA6285, AVR6286DA6612, AVR6613DA6614, AVR6616DA6617, AVR664251DAXNUMX, AVRXNUMXDAXNUMX, AVRXNUMXDAXNUMX XNUMXDBXNUMX. Atitraukto įrenginio palaikymas nebepasiekiamas šioms AVR dalims: ATAXNUMX, ATAXNUMX, ATAXNUMXN, ATAXNUMX, ATAXNUMX, ATAXNUMX, ATAXNUMX, ATAXNUMXC, ATAXNUMXC, ATAXNUMXQ, ATAXNUMX.
3.9. 2.29 versija (funkcinės saugos leidimas)
Antraštė file integruotiems kompiliatoriams Siekiant užtikrinti, kad kompiliatorius atitiktų kalbos specifikacijas, pvz., MISRA, antraštę file, kuris automatiškai įtraukiamas , buvo atnaujinta. Šioje antraštėje yra visų integruotų funkcijų, tokių kaip builtin_avr_nop ( ) ir builtin avr delay_cycles () prototipai. Kai kurios integruotos gali būti nesuderinamos su MISRA; jų galima praleisti pridedant defineXCSTRICT_MISRA į kompiliatoriaus komandų eilutę. Integruotosios dalys ir jų deklaracijos buvo atnaujintos, kad būtų galima naudoti fiksuoto pločio tipus.
3.10. 2.20 versija
Naujų įrenginių palaikymas Galimas šių AVR dalių palaikymas: ATTINY1624, ATTINY1626 ir ATTINY1627.
Geresnis geriausiai tinkamas paskirstymas Kompiliatoriaus geriausio pritaikymo skirstytuvas (BFA) buvo patobulintas taip, kad skyriai būtų paskirstomi tokia tvarka, kuri leidžia geriau optimizuoti. BFA dabar palaiko pavadintas adresų erdves ir geriau tvarko duomenų inicijavimą.
Patobulinta procedūrinė abstrakcija Dabar procedūrinės abstrakcijos optimizavimas atliekamas daugiau kodų sekų. Ankstesnės situacijos, kai dėl optimizavimo galėjo padidėti kodo dydis, buvo išspręstos optimizavimo kodui informuojant susiejančiojo šiukšlių surinkimo procesą.
Nėra AVR Assembler AVR Assembler nebėra įtrauktas į šį platinimą.
3.11. 2.19 versija (funkcinės saugos leidimas)
Nėra.
3.12. 2.10 versija
Kodo aprėptis Šioje laidoje yra kodo aprėpties funkcija, kuri palengvina projekto šaltinio kodo vykdymo masto analizę. Norėdami ją įjungti, naudokite parinktį -mcodecov=ram. Paleidus programą jūsų aparatinėje įrangoje, kodo aprėpties informacija bus sugretinta įrenginyje ir gali būti perkelta į MPLAB X IDE ir rodoma naudojant kodo aprėpties papildinį. Informaciją apie šį papildinį galite rasti IDE dokumentacijoje. #pragma nocodecov gali būti naudojamas norint neįtraukti paskesnių funkcijų iš aprėpties analizės. Idealiu atveju pragma turėtų būti pridėta pradžioje file pašalinti tą visą file iš aprėpties analizės. Arba _atributas_ ( (nocodecov) ) gali būti naudojamas norint neįtraukti konkrečių funkcijų iš aprėpties analizės.
Įrenginio aprašymas files Naujas įrenginys file vadinamas avr_chipinfo . html yra kompiliatoriaus paskirstymo docs kataloge. Tai file išvardija visus įrenginius, kuriuos palaiko kompiliatorius. Spustelėkite įrenginio pavadinimą ir bus atidarytas puslapis, kuriame bus rodomi visi leistini konfigūracijos bitų nustatymai / vertės tam įrenginiui, pvz.amples. Procedūrinė abstrakcija
Į kompiliatorių buvo įtrauktas procedūrinis abstrakcijos optimizavimas, kuris pakeičia įprastus surinkimo kodo blokus iškvietimais į ištrauktą to bloko kopiją. Tai atlieka atskira programa, kurią automatiškai iškviečia kompiliatorius, pasirinkdamas 2, 3 ar s optimizavimo lygį. Šie optimizavimai sumažina kodo dydį, tačiau gali sumažinti vykdymo greitį ir kodo derinimo galimybes. Procedūrinę abstrakciją galima išjungti aukštesniuose optimizavimo lygiuose naudojant parinktį -mno-pa arba įjungti žemesniuose optimizavimo lygiuose (pagal jūsų licenciją) naudojant -mpa. Jis gali būti išjungtas objektui file naudojant -mno-pa-on-file=filepavadinimą arba išjungti funkcijai naudojant -mno-pa-on-function=function. Šaltinio kode funkcijos procedūrinę abstrakciją galima išjungti naudojant atributą ( (nopa) ) su funkcijos apibrėžimu arba naudojant nopa, kuris išplečiamas iki atributo ( (nopa, noinline) ) ir taip neleidžiama atlikti funkcijos įtraukimo. ir yra įtraukto kodo abstrakcija.
Užrakinimo bitų palaikymas pragmoje Dabar #pragma konfigūracija gali būti naudojama AVR užrakinimo bitams ir kitiems konfigūracijos bitams nurodyti. Patikrinkite avr_chipinfo. html file (minėta aukščiau), kad nustatytumėte / reikšmes poras, kurios bus naudojamos su šia pragma. Naujų įrenginių palaikymas Galimas šių dalių palaikymas: AVR28DAl28, AVR64DAl28, AVR32DA 128 ir AVR48DA 128.
3.13. 2.05 versija
Daugiau bitų už jūsų pinigus Šio kompiliatoriaus ir licencijų tvarkyklės MacOS versija dabar yra 64 bitų programa. Tai užtikrins, kad kompiliatorius bus įdiegtas ir veiks be įspėjimų naujausiose „MacOS“ versijose.
Const objektai programos atmintyje Dabar kompiliatorius gali įdėti const kvalifikuotus objektus į programos Flash atmintį, o ne turėti juos RAM. Kompiliatorius buvo modifikuotas taip, kad „cons t“ kvalifikuoti pasauliniai duomenys būtų saugomi programos „flash“ atmintyje ir šiuos duomenis būtų galima tiesiogiai ir netiesiogiai pasiekti naudojant atitinkamas programos atminties instrukcijas. Ši nauja funkcija įjungta pagal numatytuosius nustatymus, tačiau ją galima išjungti naudojant parinktį -mno-const-data-in-progmem. Avrxmega3 ir avrtiny architektūroms ši funkcija nereikalinga ir visada išjungta, nes programos atmintis yra susieta su šių įrenginių duomenų adresų erdve.
Standartinis nemokamas nelicencijuotos (nemokamos) šio kompiliatoriaus versijos dabar leidžia optimizuoti iki 2 lygio imtinai. Tai leis gauti panašų, nors ir ne identišką, išvestį, kaip anksčiau buvo galima naudojant standartinę licenciją.
Sveiki atvykę AVRASM2 2 bitų įrenginių AVRASM8 surinkėjas dabar įtrauktas į XC8 kompiliatoriaus diegimo programą. Šis surinkėjas nenaudojamas XC8 kompiliatoriuje, bet yra prieinamas projektams, pagrįstiems ranka parašytu surinkimo šaltiniu.
Naujų įrenginių palaikymas Galimas šių dalių palaikymas: ATMEGA1608, ATMEGA1609, ATMEGA808 ir ATMEGA809.
3.14. 2.00 versija
Aukščiausio lygio tvarkyklė Nauja tvarkyklė, vadinama xc8-cc, dabar yra virš ankstesnės avr-gcc tvarkyklės ir xc8 tvarkyklės ir gali iškviesti atitinkamą kompiliatorių pagal tikslinio įrenginio pasirinkimą. Ši tvarkyklė priima GCC stiliaus parinktis, kurios yra išverstos arba perduodamos vykdomam kompiliatoriui. Ši tvarkyklė leidžia naudoti panašų parinkčių rinkinį su panašia semantika su bet kokiu AVR arba PIC tikslu, todėl yra rekomenduojamas būdas iškviesti kompiliatorių. Jei reikia, seną avr-gcc tvarkyklę galima iškviesti tiesiogiai naudojant senojo stiliaus parinktis, kurias ji priėmė ankstesnėse kompiliatoriaus versijose.
Bendroji C sąsaja Šis kompiliatorius dabar gali atitikti MPLAB bendrąją C sąsają, todėl šaltinio kodą lengviau perkelti į visus MPLAB XC kompiliatorius. Parinktis -mext=cci reikalauja šios funkcijos, įgalindama alternatyvią daugelio kalbų plėtinių sintaksę.
Naujas bibliotekininko vairuotojas Naujas bibliotekininko vairuotojas yra virš ankstesnio PIC bibliotekininko ir AVR avr-ar bibliotekininko. Ši tvarkyklė priima GCC archyvatoriaus stiliaus parinktis, kurios yra išverstos arba perduodamos vykdomam bibliotekininkui. Naujoji tvarkyklė leidžia naudoti panašų parinkčių rinkinį su panašia semantika kuriant ar manipuliuojant bet kokia PIC arba AVR biblioteka file ir todėl yra rekomenduojamas būdas kreiptis į bibliotekininką. Jei reikia seniems projektams, ankstesnį bibliotekininką galima iškviesti tiesiogiai naudojant senojo stiliaus parinktis, kurias jis priėmė ankstesnėse kompiliatoriaus versijose.
Migracijos problemos
Toliau pateikiamos funkcijos, kurias dabar kompiliatorius tvarko skirtingai. Dėl šių pakeitimų gali tekti pakeisti šaltinio kodą, jei kodą perkeliate į šią kompiliatoriaus versiją. Versijos numeris paantraštėse nurodo pirmąją kompiliatoriaus versiją, kuri palaiko tolesnius pakeitimus.
4.1. 2.41 versija
Pašalintos netikslios fma funkcijos (XC8-2913) C99 standartinės bibliotekos fma 0 šeimos funkcijos ( ). Šios funkcijos buvo pašalintos iš pateiktos bibliotekos.
4.2. 2.40 versija
Nėra.
4.3. 2.39 versija (funkcinės saugos leidimas)
Nėra.
4.4. 2.36 versija Nėra.
4.5. 2.35 versija
Eilučių į bazes tvarkymas (XC8-2420) Siekiant užtikrinti suderinamumą su kitais XC kompiliatoriais, XC8 eilutės į pagrindų funkcijos, pvz., strtol () ir kt., nebebandys konvertuoti įvesties eilutės, jei nurodyta bazė yra didesnė nei 36 ir vietoj to nustatys errno į EINVAL. C standartas nenurodo funkcijų elgesio, kai ši bazinė vertė viršijama.
Netinkamas greičio optimizavimas Pasirinkus 3 lygio optimizavimą (-03) buvo įjungtas procedūrinis abstrakcijos optimizavimas. Šie optimizavimai sumažina kodo dydį kodo greičio sąskaita, todėl neturėjo būti atliekami. Projektuose, kuriuose naudojamas šis optimizavimo lygis, gali skirtis kodo dydis ir vykdymo greitis, kai jie sukurti naudojant šį leidimą.
Bibliotekos funkcionalumas Daugelio standartinių C bibliotekos funkcijų kodas dabar gaunamas iš Microchip Unified Standard Library, kuri tam tikromis aplinkybėmis gali elgtis kitaip, palyginti su buvusia avr-libc biblioteka. Pavyzdžiui,ample, nebereikia susieti 1printf flt bibliotekoje (parinktis -1printf_flt), kad įjungtumėte formatavimą I0 slankaus formato specifikatorių palaikymas. Protingas I0 „Microchip Unified Standard Library“ funkcijos daro šią parinktį nereikalingą. Be to, eilučių ir atminties funkcijoms (pvz., strcpy_P ( ) ir tt), kurios veikia su const eilutėmis, nebereikia naudoti eilučių ir atminties funkcijų _P. Standartinės C rutinos (pvz., strcpy ) tinkamai veiks su tokiais duomenimis, kai įjungta const-data-in-program-memory funkcija.
4.6. 2.32 versija
Nėra.
4.7. 2.31 versija
Nėra.
4.8. 2.30 versija
Nėra.
4.1. 2.29 versija (funkcinės saugos leidimas)
Nėra.
4.2. 2.20 versija
Pakeistas DFP išdėstymas Dabar kompiliatorius naudoja kitokį DFP (įrenginių šeimos paketų) naudojamą išdėstymą. Tai reikš, kad senesnis DFP gali neveikti su šiuo leidimu, o senesni kompiliatoriai negalės naudoti naujausių DFP.
4.3. 2.19 versija (funkcinės saugos leidimas)
Nėra.
4.4. 2.10 versija
Nėra
4.5. 2.05 versija
Const objektai programos atmintyje Atminkite, kad pagal numatytuosius nustatymus const kvalifikuoti objektai bus patalpinti ir pasiekiami programos atmintyje (kaip aprašyta atspalvyje). Tai turės įtakos jūsų projekto dydžiui ir vykdymo greičiui, tačiau turėtų sumažinti RAM naudojimą. Jei reikia, šią funkciją galima išjungti naudojant parinktį -mnoconst-data-in-progmem.
4.6. 2.00 versija
Konfigūracijos saugikliai Dabar įrenginio konfigūracijos saugiklius galima užprogramuoti naudojant konfigūracijos pragma, po kurios nustatymų ir reikšmių poras nurodo saugiklio būseną, pvz.
#pragma config WDTON = NUSTATYTI
#pragma config BODLEVEL = BODLEVEL_4V3
Absoliutūs objektai ir funkcijos Objektai ir funkcijos dabar gali būti talpinami tam tikru adresu atmintyje naudojant CCI (adreso) specifikaciją, pvz.ampLe:
#įtraukti
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
Šio specifikatoriaus argumentas turi būti konstanta, nurodanti adresą, kuriame bus įdėtas pirmasis baitas arba instrukcija. RAM adresai nurodomi naudojant poslinkį 0x800000. Įgalinkite CCI, kad galėtumėte naudoti šią funkciją.
Nauja pertraukimo funkcijos sintaksė Dabar kompiliatorius priima CCI _interrupt (num) specifikaciją, nurodydamas, kad C funkcijos yra pertraukimų tvarkyklės. Specifikacija paima pertraukimo skaičių, pvzampLe:
#įtraukti
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Išspręstos problemos
Toliau pateikiami kompiliatoriaus pataisymai. Tai gali ištaisyti sugeneruoto kodo klaidas arba pakeisti kompiliatoriaus veikimą į tą, kuris buvo numatytas arba nurodytas vartotojo vadove. Versijos numeris paantraštėse nurodo pirmąją kompiliatoriaus versiją, kurioje yra tolesnių problemų pataisymai. Pavadinimo etiketė (-ės) skliausteliuose yra tos problemos identifikavimas stebėjimo duomenų bazėje. Tai gali būti naudinga, jei reikia susisiekti su palaikymo tarnyba.
Atminkite, kad kai kurios su įrenginiu susijusios problemos ištaisytos su įrenginiu susietame įrenginių šeimos pakete (DFP). Norėdami gauti informacijos apie DFP pakeitimus ir atsisiųsti naujausius paketus, žr. MPLAB paketų tvarkytuvę.
5.1. 2.41 versija
„Ventura“ (XC8-3088) raktų raktų problemos Kompiliatoriaus licencijai naudojami „macOS Ventura“ pagrindiniuose kompiuteriuose galėjo būti netinkamai nuskaityti, todėl licencijavimo nepavyko. XCLM licencijų tvarkyklės pakeitimai ištaiso šią problemą.
Neteisinga atminties paskirstymo nuoroda (XC8-2925) Bandymas priskirti SIZE_MAX baitus (arba artimą jai reikšmę) atminties naudojant standartines bibliotekos atminties valdymo funkcijas (malloc () ir kt.) nesėkmingai. Neatsižvelgta į tai, kad naudojant paprastą dinaminio atminties paskirstymo įgyvendinimą, be reikalaujamo bloko, reikia papildomų baitų. Dabar tokiose situacijose bus grąžintas NULL rodyklė, o klaida nustatyta į ENOMEM.
Pašalintos netikslios fma funkcijos (XC8-2913) C99 standartinės bibliotekos fma ( ) -šeimos funkcijos ( ). Šios funkcijos buvo pašalintos iš pateiktos bibliotekos.
Blogai valdomas eilučių konvertavimas (XC8-2921, XC8-2652) Kai strtod Cr konvertuojamoje „dalyko sekoje“ buvo rodomas slankiojo kablelio skaičius eksponentiniu formatu, o po e/E simbolio buvo netikėtas simbolis, tada, kai buvo pateikta endptr, jam buvo priskirtas adresas, turėjo nurodyti po e/E esantį simbolį, tuo tarpu jis turėjo nurodyti patį e/E simbolį, nes jis nebuvo konvertuotas. Pavyzdžiui,ample, strtod („100exx“, &ep) turėtų grąžinti 100.00 ir nustatyti ep, kad būtų nurodyta eilutės dalis „exx“, o funkcija grąžino teisingą reikšmę, tačiau nustatė ep, kad būtų nurodyta eilutės „xx“ dalis. .
5.2. 2.40 versija
Per daug atsipalaidavęs (XCS-2876) Naudodamas parinktį -mrelax, kompiliatorius kai kurių skyrių nepaskirstė kartu, todėl kodo dydžiai buvo ne tokie optimalūs. Tai galėjo nutikti naudojant kodą, kuriame buvo naudojamos naujos MUSL bibliotekos, arba su silpnais simboliais.
Atvaizdavimo funkcija neišjungta, kaip nurodyta įspėjime (XC8-2875) Funkcija const-data-in-config-mappedprogmem priklauso nuo to, ar įjungta const-data-in-progmem funkcija. Jei funkcija const-data-inconfig-mapped-progmem buvo aiškiai įjungta naudojant parinktį, o funkcija const-data-inprogmem buvo išjungta, susiejimo veiksmas nepavyko, nepaisant įspėjimo pranešimo, kad const-data-in-con fig- „mapped-progmem“ funkcija buvo automatiškai išjungta, o tai nebuvo visiškai teisinga. Šiuo atveju funkcija const-data-in-config-mapped-progmem yra visiškai išjungta.
DFP pakeitimai, siekiant tinkamai pasiekti NVMCTRL (XC8-2848) Vykdymo laiko paleisties kodas, kurį naudoja AVR64EA įrenginiai, neatsižvelgė į tai, kad NVMCTRL registrui taikoma konfigūracijos keitimo apsauga (CCP), ir negalėjo nustatyti I0 SFR į puslapį, kurį naudoja const-data-in-configmapped-progmem. kompiliatoriaus funkcija. Pakeitimai, atlikti AVR-Ex_DFP 2.2.55 versijoje, leis vykdymo laiko paleisties kodui teisingai įrašyti į šį registrą.
DFP pakeitimų, kurių reikia vengti „Flash“ atvaizdavimas (XC8-2847) Įdiegtas AVR128DA28/32/48/64 Silicon Errata (D580000882) aprašytos blykstės atvaizdavimo įrenginio funkcijos problemos sprendimas. Kompiliatoriaus const-data-in-config-mapped-progmem funkcija paveiktiems įrenginiams nebus taikoma pagal numatytuosius nustatymus, o šis pakeitimas bus rodomas AVR-Dx_DFP 2.2.160 versijoje.
Sukūrimo klaida naudojant sinhf arba coshf (XC8-2834) Bandant naudoti sinhf () arba coshf () bibliotekos funkcijas, įvyko nuorodos klaida, apibūdinanti neapibrėžtą nuorodą. Trūkstamoji nurodyta funkcija dabar buvo įtraukta į kompiliatoriaus paskirstymą.
Sukūrimo klaidos naudojant nopa (XC,8-2833) Naudojant atributą nopa su funkcija, kurios surinkėjo pavadinimas buvo nurodytas naudojant asm ( ), suaktyvino surinkėjo klaidų pranešimus. Šis derinys neįmanomas.
Kintamosios funkcijos gedimas su žymeklio argumentais (XC8-2755, XC8-2731) Funkcijos su kintamu argumentų skaičiumi tikisi, kad kintamųjų argumentų sąraše bus perduotos 24 bitų (memx tipo) rodyklės, kai įjungta const-data-in-progmem funkcija. Argumentai, kurie buvo rodyklės į duomenų atmintį, buvo perduodami kaip 16 bitų objektai, todėl galiausiai nuskaitant juos įvyko kodo gedimas. Kai įgalinta constdata-in-progmem funkcija, visi 16 bitų rodyklių argumentai dabar konvertuojami į 24 bitų rodykles.
strtoxxx bibliotekos funkcijos sugenda (XC8-2620) Kai buvo įjungta const-data-in-progmem funkcija, endptr parametras strtoxxx bibliotekos funkcijose nebuvo tinkamai atnaujintas šaltinio eilutės argumentams, kurie nėra programos atmintyje.
Įspėjimai apie netinkamus išmetimus (XC8-2612) Kompiliatorius dabar išduos klaidą, jei įjungta const-in-progmem funkcija ir eilutės literalo adresas yra aiškiai perduotas į duomenų adresų erdvę (atmetamas const kvalifikatorius), pvz.ample, (uint 8_t *) „Sveikas pasaulis!“. Įspėjimas yra problema, jei adresas gali būti neteisingas, kai const duomenų žymeklis yra aiškiai perduodamas į duomenų adresų erdvę.
Neinicijuotų const objektų išdėstymas (XC8-2408) Neinicijuoti const ir const nepastovi objektai nebuvo patalpinti į programos atmintį įrenginiuose, kurie visą arba dalį savo programos atminties susieja į duomenų adresų erdvę. Šiems įrenginiams tokie objektai dabar patalpinami į programos atmintį, todėl jų veikimas suderinamas su kitais įrenginiais.
5.3. 2.39 versija (funkcinės saugos leidimas)
Nėra.
5.4. 2.36 versija
Klaida delsiant (XC8-2774) Nedideli numatytųjų laisvojo režimo optimizavimo pakeitimai neleido nuolat sulankstyti operandų išraiškų į vėlavimo įtaisytąsias funkcijas, todėl jos buvo traktuojamos kaip nekonstantos ir suaktyvėjo klaida: įtaisytasis avr delay_cycles tikisi kompiliavimo laiko konstantos.
5.5. 2.35 versija
Gretimas paskirstymas naudojant _at (XC8-2653) Gretimas kelių objektų vietų paskirstymas skyriuje tuo pačiu pavadinimu ir naudojant _at ( ) neveikė tinkamai. Pavyzdžiui,ampLe:
const char arr1[] __atributas__((section(.mysec)))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((section(.mysec”)))) = {0xEF, 0xFE};
turėjo įdėti arr2 iškart po arr1.
Skyriaus pradžios adresų nurodymas (XC8-2650) -W1, -Section-start parinktis tyliai nesugebėjo patalpinti atkarpų nurodytu starto adresu. Ši problema buvo išspręsta bet kokioms pasirinktinio pavadinimo sekcijoms; tačiau jis neveiks jokiems standartiniams skyriams, pvz., . tekstas arba . bss, kuris turi būti įdėtas naudojant -W1, -T parinktį.
Linker užstringa atsipalaiduojant (XC8-2647) Kai buvo įjungtas -mrelax optimizavimas ir buvo kodo ar duomenų sekcijų, kurios netilpo į turimą atmintį, linkeris sudužo. Dabar tokiomis aplinkybėmis vietoj to pateikiami klaidų pranešimai.
Neatsitraukti (XC8-2646) – „nofallback“ parinktis nebuvo tinkamai įdiegta ar dokumentuota. Dabar tai galima pasirinkti siekiant užtikrinti, kad kompiliatorius negrįžtų į žemesnį optimizavimo parametrą, jei kompiliatorius yra nelicencijuotas, o vietoj to išduos klaidą.
Netinkamas greičio optimizavimas (X03-2637) Pasirinkus 3 lygio optimizavimą (-03) buvo įjungtas procedūrinis abstrakcijos optimizavimas. Šie optimizavimai sumažina kodo dydį kodo greičio sąskaita, todėl neturėjo būti atliekami.
Blogas EEPROM prieiga (XC8-2629) eeprom_read_block rutina netinkamai veikė Xmega įrenginiuose, kai buvo įjungta parinktis -mconst-data-in-progmem (tai yra numatytoji būsena), todėl EEPROM atmintis nebuvo nuskaitoma tinkamai.
Neteisingas atminties paskirstymas (XC8-2593, XC8-2651), kai -Ttext arba -Tdata linker parinktis (pvz.,ampnurodytas le, perduotas naudojant -vl tvarkyklės parinktį), buvo atnaujinta atitinkama teksto / duomenų srities kilmė; tačiau galutinis adresas nebuvo atitinkamai pakoreguotas, todėl regionas galėjo viršyti tikslinio įrenginio atminties diapazoną.
Strigtis su per daug priskirta funkcija (XC8-2580) Kompiliatorius sugedo, jei funkcija buvo deklaruota naudojant daugiau nei vieną pertraukimo, signalo arba nmi atributą, pvz., atributą ( ( signalas , pertraukimas ) ).
Neteisingas ATtiny pertraukimo kodas (XC8-2465) Kuriant ATtiny įrenginiams ir išjungus optimizavimą (-00), pertraukimo funkcijos galėjo suaktyvinti operando už diapazono surinkėjo pranešimus.
Neperduodamos parinktys (XC8-2452) Naudojant parinktį su keliomis kableliais atskirtomis nuorodų parinktimis, ne visos susiejimo parinktys buvo perduodamos susiejimo įrankiui.
Klaida netiesiogiai nuskaitant programos atmintį (X03-2450) Kai kuriais atvejais kompiliatorius, nuskaitydamas dviejų baitų reikšmę iš rodyklės į programos atmintį, sukėlė vidinę klaidą (neatpažįstamą insn).
5.6. 2.32 versija
Antroji prieiga iš biblioteka nepavyksta (XC8-2381) Iškviečiama xc8-ar Windows versija. .exe bibliotekos archyvuotojui antrą kartą pasiekti esamą bibliotekos archyvą galėjo nepavykti ir pasirodė klaidos pranešimas, kad nepavyko pervardyti.
5.7. 2.31 versija
Nepaaiškinamas kompiliatorius gedimai (XC8-2367) Kai paleidžiate „Windows“ platformose, kuriose laikinasis sistemos katalogas buvo nustatytas į kelią, kuriame yra taškas „. simbolį, kompiliatoriui galėjo nepavykti įvykdyti.
5.8. 2.30 versija
Pasaulinės etiketės netinkamai išdėstytos po kontūro (XC8-2299) Gali būti, kad ranka rašytas surinkimo kodas, pagal kurį surinkimo sekose pateikiamos visuotinės etiketės, kurios išskiriamos naudojant procedūrinę abstrakciją, nebuvo tinkamai perkeltas.
Atpalaiduojanti avarija (XC8-2287) Naudojant parinktį -mrelax, nuoroda galėjo sugesti, kai uodegos šuolio atpalaidavimo optimizavimas bandė pašalinti ret instrukcijas, kurios nebuvo sekcijos pabaigoje.
Strigtis optimizuojant etiketes kaip vertes (XC8-2282) Kodas naudojant GNU C kalbos plėtinį „Etiketės kaip vertės“ galėjo sukelti procedūrinės abstrakcijos optimizavimo strigtį ir taisymo klaidą.
Ne taip pastovus (XC8-2271) St rstr ( ) ir kitų funkcijų prototipai iš nebenurodykite nestandartinio const kvalifikatoriaus grąžintose eilutės rodyklėse, kai funkcija -mconst-data-inprogmem išjungta. Atminkite, kad naudojant avrxmega3 ir avrtiny įrenginius ši funkcija įjungta visam laikui.
Prarasti inicializatoriai (XC8-2269) Kai daugiau nei vienas vertimo vieneto kintamasis buvo patalpintas į sekciją (naudojant _section arba _attribute_ ( (section) )), o pirmasis toks kintamasis buvo inicijuotas nuliui arba jis neturėjo inicijavimo, kitų to paties vertimo vieneto kintamųjų iniciatoriai tame pačiame skyriuje buvo prarasti.
5.1. 2.29 versija (funkcinės saugos leidimas)
Nėra.
5.2. 2.20 versija
Klaida su ilgomis komandomis (XC8-1983) Naudojant AVR taikinį, kompiliatorius galėjo sustoti su a file klaida nerasta, jei komandų eilutė buvo labai didelė ir joje yra specialių simbolių, tokių kaip kabutės, pasvirieji brūkšniai ir pan.
Nepriskirta rodata sekcija (XC8-1920) Kuriant avrxmega3 ir avrtiny architektūrai AVR linker nepavyko priskirti atminties pasirinktinėms rodata sekcijoms, todėl gali atsirasti atminties persidengimo klaidų.
5.3. 2.19 versija (Funkcinės saugos leidimas)
Nėra.
5.4. 2.10 versija
Perkėlimo gedimai (XC8-1891) Geriausiai pritaikytas skirstytuvas paliko atminties „skyles“ tarp sekcijų po linkerio atsipalaidavimo. Be atminties suskaidymo, tai padidino tikimybę, kad bus perkeltos sąsajos gedimai, susiję su kompiuterio santykiniais šuoliais arba skambučiais, patenkančiais už diapazono ribų.
Instrukcijos, nepakeistos atsipalaidavimo būdu (XC8-1889) Linkerio atsipalaidavimas neįvyko šuolio ar skambučio instrukcijoms, kurių taikiniai tampa pasiekiami atsipalaidavus.
Dingęs funkcionalumą (XC8E-388) Keletas apibrėžimų iš , pvz., clock_div_t ir clock_prescale set () , nebuvo apibrėžti įrenginiams, įskaitant ATmega324PB, ATmega328PB, ATtiny441 ir ATtiny841.
Trūksta makrokomandų Išankstinio procesoriaus makrokomandos _XC8_MODE_, _XC8_VERS ION, _XC ir _XC8 nebuvo automatiškai apibrėžtos kompiliatoriaus. Šiuo metu jie yra prieinami.
5.5. 2.05 versija
Vidinė kompiliatoriaus klaida (XC8-1822) Kuriant sistemoje Windows, optimizuojant kodą galėjo atsirasti vidinė kompiliatoriaus klaida.
RAM perpildymas neaptiktas (XC8-1800, XC8-1796) Programų, kurios viršijo turimą RAM, kai kuriais atvejais kompiliatorius neaptiko, todėl įvyko vykdymo kodo gedimas.
Praleista „flash“ atmintis (XC8-1792) „Avrxmega3“ ir „avrtiny“ įrenginiuose dalis „flash“ atminties galėjo būti neužprogramuota MPLAB X IDE.
Nepavyko vykdyti pagrindinio (XC8-1788) Kai kuriose situacijose, kai programoje nebuvo apibrėžtų visuotinių kintamųjų, vykdymo laiko paleisties kodas nebuvo išjungtas ir pagrindinė ( ) funkcija niekada nebuvo pasiekta.
Neteisinga atminties informacija (XC8-1787) Avrxmega3 ir avrtiny įrenginiuose avr dydžio programa pranešė, kad tik skaitomi duomenys naudoja RAM, o ne programos atmintį.
Neteisingas programos atminties skaitymas (XC8-1783) Projektai, sudaryti įrenginiams su programos atmintimi, susieta su duomenų adresų erdve ir apibrėžiančius objektus naudojant PROGMEM makrokomandą / atributą, galėjo nuskaityti šiuos objektus iš netinkamo adreso.
Vidinė atributų klaida (XC8-1773) Įvyko vidinė klaida, jei žymiklio objektus apibrėžėte naudodami
_at () arba atributas() žetonai tarp žymeklio pavadinimo ir nuorodos tipo, pvzample, char*
_at (0x800150) cp; Aptikus tokį kodą, dabar pateikiamas įspėjimas.
Nepavyko vykdyti pagrindinio (XC8-1780, XC8-1767, XC8-1754) Naudojant EEPROM kintamuosius arba nustačius saugiklius naudojant konfigūracijos pragma, galėjo būti neteisingai inicijuojami duomenys ir (arba) užblokuotas programos vykdymas vykdymo laiko paleisties kode, prieš pasiekiant pagrindinį ( ).
Saugiklio klaida naudojant mažus įrenginius (XC8-1778, XC8-1742) Attiny4/5/9/10/20/40 įrenginių antraštėje nurodytas neteisingas saugiklio ilgis files, dėl kurių atsiranda linkerio klaidų bandant sukurti kodą, apibrėžiantį saugiklius.
Segmentavimas gedimas (XC8-1777) Ištaisyta pertraukiamo segmentavimo klaida.
Assembler avarija (XC8-1761) Avr-as surinkėjas galėjo sugesti, kai kompiliatorius buvo paleistas naudojant Ubuntu 18.
Objektai neišvalyti (XC8-1752) Neinicializuoti statinės saugojimo trukmės objektai galėjo būti neišvalyti vykdymo laiko paleisties kodu.
Nepaisoma nesuderinamų įrenginio specifikacijų (XC8-1749) Kompiliatorius nesukūrė klaidos, kai buvo naudojamos kelios įrenginio specifikacijos parinktys ir buvo nurodyti skirtingi įrenginiai.
Atminties sugadinimas krūva (XC8-1748) _heap_start simbolis buvo nustatytas neteisingai, todėl gali būti, kad krūva sugadins įprastus kintamuosius.
Linker perkėlimo klaida (XC8-1739) Susiejimo priemonės perkėlimo klaida galėjo atsirasti, kai kode buvo rjmp arba rccall, kurio tikslas yra tiksliai 4 XNUMX baitų atstumu.
5.6. 2.00 versija
Nėra.
Žinomos problemos
Toliau pateikiami kompiliatoriaus veikimo apribojimai. Tai gali būti bendrieji kodavimo apribojimai arba nukrypimai nuo vartotojo vadove pateiktos informacijos. Pavadinime esanti (-ės) etiketė (-ės) skliausteliuose yra šios problemos identifikavimas stebėjimo duomenų bazėje. Tai gali būti naudinga, jei reikia susisiekti su palaikymo tarnyba. Tie elementai, kurie neturi etikečių, yra apribojimai, apibūdinantys veikimo būdą ir kurie gali likti galioti visam laikui.
6.1. MPLAB X IDE Integracija
MPLAB IDE integracija Jei kompiliatorius turi būti naudojamas iš MPLAB IDE, prieš diegdami kompiliatorių turite įdiegti MPLAB IDE.
6.2. Kodo generavimas
Segfault with section-inchors parinktis (XC8-3045) Programa, kuri apibrėžė funkcijas su kintamųjų argumentų sąrašais ir naudoja parinktį -fsection-anchors, galėjo sukelti vidinę kompiliatoriaus klaidą: segmentavimo klaida.
Derinimo informacija nesinchronizuota (XC8-2948) Kai linkerio atsipalaidavimo optimizavimas sumažina nurodymus (pvz.,ampiškvietimo į skambutį instrukcijas), šaltinio eilutės ir adreso susiejimas gali likti nesinchronizuotas, kai sekcijoje atliekama daugiau nei viena mažinimo operacija.
Žemiau esančiame pvzample, yra du skambučiai į foo, kurie baigiasi atsipalaidavę giminaičių skambučiais.
PA atminties paskirstymo triktis (XC8-2881) Kai naudojate procedūrinius abstrakcijos optimizatorius, susiejimo priemonė gali pranešti apie atminties paskirstymo klaidas, kai kodo dydis yra artimas turimos programos atminties kiekiui įrenginyje, net jei programa turėtų tilpti į laisvą vietą.
Ne toks protingas Smart-I0 (XC8-2872) Kompiliatoriaus „smart-io“ funkcija sugeneruos galiojantį, bet neoptimalų „snprint f“ funkcijos kodą, jei „const-data-in-progmem“ funkcija buvo išjungta arba jei visa įrenginio „flash“ informacija susieta su duomenų atmintimi.
Dar mažiau išmanus Smart-I0 (XC8-2869) Kompiliatoriaus „smart-io“ funkcija sugeneruos tinkamą, bet neoptimalų kodą, kai bus naudojamos abi parinktys -flto ir -fno-builtin.
Neoptimali tik skaitomų duomenų vieta (XC8-2849) Linker šiuo metu nežino nei APPCODE, nei APPDATA atminties skyrių, nei [No-Read-While-Write skyrelių atminties žemėlapyje. Dėl to yra nedidelė tikimybė, kad susiejimo priemonė gali priskirti tik skaitymo duomenis netinkamoje atminties srityje. Netinkamų duomenų tikimybė padidėja, jei įjungta const-data-in-progmem funkcija, ypač jei taip pat įjungta const-data-in-config-mapped-progmem funkcija. Jei reikia, šias funkcijas galima išjungti.
Objektas file apdorojimo užsakymas (XC8-2863) Objektų tvarka files, kurias apdoros susiejimo priemonė, gali skirtis atsižvelgiant į procedūrinių abstrakcijos optimizacijų naudojimą (-mpa parinktis). Tai paveiktų tik kodą, kuris apibrėžia silpnas kelių modulių funkcijas.
Linkerio klaida su absoliučiu (XC8-2777) Kai objektas buvo suabsoliutintas adresu RAM pradžioje ir taip pat buvo apibrėžti neinicializuoti objektai, gali būti suaktyvinta susiejimo klaida.
Trumpo pažadinimo ID (XC8-2775) ATA5700/2 įrenginiuose PHIDO/1 registrai apibrėžiami tik kaip 16 bitų pločio, o ne 32 bitų pločio.
Linker strigtis skambinant simboliu (XC8-2758) Linker gali sugesti, jei naudojama -mrelax tvarkyklės parinktis, kai šaltinio kodas iškviečia simbolį, kuris buvo apibrėžtas naudojant parinktį -cc., -de f sym linker.
Neteisingas inicijavimas (XC8-2679) Yra yra neatitikimas tarp to, kur kai kurių visuotinių / statinių baitų dydžio objektų pradinės reikšmės dedamos į duomenų atmintį ir kur kintamieji bus pasiekiami vykdymo metu.
Blogi netiesioginiai funkcijų iškvietimai (XC8-2628) Kai kuriais atvejais funkcijų iškvietimas naudojant funkcijos žymeklį, saugomą kaip struktūros dalis, gali nepavykti.
strtof grąžina nulį šešioliktainei slankiojimai sistemai (XC8-2626) Bibliotekos funkcijos strtof et al ir scanf ( ) et al visada konvertuos šešioliktainį slankiojo kablelio skaičių, nenurodantį eksponento į nulį. Pavyzdžiui,ampLe:
strtof („Oxl“, &endptr) ;
grąžins reikšmę 0, o ne aš.
Netikslūs dėklo patarėjo pranešimai (XC8-2542, XC8-2541) Kai kuriais atvejais dėklo patarėjo įspėjimas apie naudojamą rekursiją arba neapibrėžtą krūvą (galbūt naudojant alloca()) neskleistas.
Gedimas naudojant pasikartojantį pertraukimo kodą (XC8-2421) Jei daugiau nei viena pertraukimo funkcija turi tą patį pagrindą, kompiliatorius gali turėti vienos pertraukimo funkcijos išvestį iškviesti kitą. Dėl to visi skambučių užblokuoti registrai bus be reikalo išsaugomi, o pertraukimai bus įjungti dar prieš paleidžiant dabartinės pertraukimų tvarkyklės epilogą, o tai gali sukelti kodo gedimą.
Bloga išvestis su netinkamu DFP keliu (XC8-2376) Jei kompiliatorius iškviečiamas naudojant netinkamą DFP kelią ir „specifikaciją“ file yra pasirinktam įrenginiui, kompiliatorius nepraneša apie trūkstamą įrenginio šeimos paketą ir vietoj to pasirenka „specifikaciją“ file, o tai gali sukelti netinkamą išvestį. „Spec.“ files gali būti neatnaujintos paskirstytų DFP ir buvo skirtos naudoti tik atliekant vidinio kompiliatoriaus testavimą.
Atminties persidengimas neaptiktas (XC8-1966) Kompiliatorius neaptinka objektų, suabsoliutuotų adresu (per _at ( )) ir kitų objektų, naudojančių sekcijos ( ) specifikaciją ir susietų su tuo pačiu adresu, atminties persidengimo.
Bibliotekos funkcijų ir _memx (XC8-1763) gedimas Iškviestos libgcc float funkcijos su argumentu memx adresų erdvėje gali nepavykti. Atminkite, kad bibliotekos rutinos iškviečiamos iš kai kurių C operatorių, taigi, pvzample, paveiktas šis kodas:
return regFloatVar > memxFloatVar;
Ribotas libgcc diegimas (AVRTC-731) ATTiny4/5/9/10/20/40 produktų standartinė C / Math bibliotekos įgyvendinimas libgcc yra labai ribotas arba jo nėra.
Programos atminties apribojimai (AVRTC-732) Programos atminties vaizdus, kurių dydis viršija 128 kb, palaiko įrankių grandinė; tačiau yra žinomi atvejai, kai susiejimo priemonė nutrūksta neatsipalaidavus ir nepateikus naudingo klaidos pranešimo, o ne generuojant reikalingus funkcijos stubus, kai naudojama parinktis -mre lax.
Vardų erdvės apribojimai (AVRTC-733) Įrankių grandinė palaiko pavadintas adresų erdves, atsižvelgiant į apribojimus, nurodytus vartotojo vadovo skyriuje Specialiųjų tipų kvalifikatoriai.
Laiko juostos The bibliotekos funkcijos prisiima GMT ir nepalaiko vietinių laiko juostų, todėl vietinis laikas ( ) grąžins tą patį laiką kaip gmtime ( ), pvz.ample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Dokumentai / Ištekliai
![]() |
MICROCHIP MPLAB XC8 C kompiliatoriaus kūrimo programinė įranga [pdfNaudotojo vadovas MPLAB XC8 C, MPLAB XC8 C kompiliatorių kūrimo programinė įranga, kompiliatorių kūrimo programinė įranga, kūrimo programinė įranga, programinė įranga |




