MICROCHIP MPLAB XC8 C kompilatorprogramvara 

MICROCHIP MPLAB XC8 C kompilatorprogramvara

DETTA DOKUMENT INNEHÅLLER VIKTIG INFORMATION OM KOMPILEREN MPLAB XC8 C NÄR MICROCHIP AVR-ENHETER INriktas.
LÄS DEN INNAN DU KÖR DENNA PROGRAM. SE MPLAB XC8 C-KOMPILERARENS RELEASEANMÄRKNINGAR FÖR PIC-DOKUMENT OM DU ANVÄNDER KOMPILEREN FÖR 8-BITAR PIC-ENHETER.

Överview

Introduktion

Den här utgåvan av Microchip MPLAB® XC8 C-kompilatorn innehåller flera nya funktioner, buggfixar och nytt enhetsstöd.

Byggdatum

Det officiella byggdatumet för denna kompilatorversion är den 3 juli 2022.

Föregående version

Den tidigare kompilatorversionen av MPLAB XC8 C var 2.39, en funktionell säkerhetskompilator, byggd 27 januari 2022. Den tidigare standardkompilatorn var version 2.36, byggd 27 januari 2022.

Handbok för funktionell säkerhet

En funktionell säkerhetsmanual för MPLAB XC-kompilatorerna finns i dokumentationspaketet när du köper en funktionell säkerhetslicens.

Komponentlicenser och versioner

MPLAB® XC8 C-kompilatorn för AVR MCU-verktyg är skrivna och distribuerade under GNU General Public License (GPL), vilket innebär att dess källkod distribueras fritt och är tillgänglig för allmänheten. Källkoden för verktyg under GNU GPL kan laddas ner separat från Microchip's webwebbplats. Du kan läsa GNU GPL i file namnges underkatalogen till din installationskatalog. En allmän diskussion om principerna bakom GPL kan hittas här. Supportkod tillhandahålls för rubriken files, länkskript och runtime-bibliotek är proprietär kod och täcks inte av GPL.

Den här kompilatorn är en implementering av GCC version 5.4.0, binutils version 2.26 och använder avr-libc version 2.0.0.

Systemkrav

MPLAB XC8 C-kompilatorn och licensprogramvaran den använder är tillgängliga för en mängd olika operativsystem, inklusive 64-bitarsversioner av följande: Professionella utgåvor av Microsoft Windows 10; Ubuntu 18.04; och macOS 10.15.5. Binära filer för Windows har kodsignerats. Binärfiler för mac OS har kodsignerats och attesterats.

Om du kör en nätverkslicensserver får endast datorer med operativsystem som stöds av kompilatorerna användas som värd för licensservern. Från och med xclm version 2.0 kan nätverkslicensservern installeras på en Microsoft Windows Server-plattform, men licensservern behöver inte köras på en serverversion av operativsystemet.

Enheter som stöds

Den här kompilatorn stöder alla 8-bitars AVR MCU-enheter som är kända vid tidpunkten för utgivningen. Se (i kompilatorns dokumentkatalog) för en lista över alla enheter som stöds. Dessa files listar också konfigurationsbitinställningar för varje enhet.

Utgåvor och licensuppgraderingar

MPLAB XC8-kompilatorn kan aktiveras som en licensierad (PRO) eller olicensierad (gratis) produkt. Du måste köpa en aktiveringsnyckel för att licensiera din kompilator. En licens möjliggör en högre nivå av optimering jämfört med gratisprodukten. En olicensierad kompilator kan användas på obestämd tid utan licens.

En MPLAB XC8 Functional Safety-kompilator måste aktiveras med en funktionssäkerhetslicens köpt från Microchip. Kompilatorn fungerar inte utan denna licens. När den är aktiverad kan du välja valfri optimeringsnivå och använda alla kompilatorfunktioner. Den här utgåvan av MPLAB XC Functional Safety Compiler stöder nätverksserverlicensen.
Se dokumentet Installera och licensiera MPLAB XC C-kompilatorer (DS50002059) för information om licenstyper och installation av kompilatorn med licens.

Installation och aktivering

Se även avsnitten Migrationsproblem och begränsningar för viktig information om den senaste licenshanteraren som ingår i den här kompilatorn.
Om du använder MPLAB IDE, se till att installera den senaste MPLAB X IDE version 5.0 eller senare innan du installerar det här verktyget. Avsluta IDE innan du installerar kompilatorn. Kör installationsprogrammet .exe (Windows), .run (Linux) eller app (macOS), t.ex. XC8-1.00.11403-windows.exe och följ anvisningarna på skärmen.
Standardinstallationskatalogen rekommenderas. Om du använder Linux måste du installera kompilatorn med en terminal och från ett root-konto. Installera med ett macOS-konto med administratörsbehörighet.

Aktivering utförs nu separat för installation. Se dokumentet License Manager för MPLAB® XC C-kompilatorer (DS52059) för mer information.

Om du väljer att köra kompilatorn under utvärderingslicensen får du nu en varning under sammanställningen när du är inom 14 dagar från slutet av din utvärderingsperiod. Samma varning utfärdas om du är inom 14 dagar efter avslutad HPA-prenumeration.

XC Network License Server är ett separat installationsprogram och ingår inte i enanvändarkompilatorinstallationsprogrammet.

XC License Manager stöder nu roaming av flytande nätverkslicenser. Den här funktionen riktar sig till mobilanvändare och tillåter en flytande licens att försvinna från nätverket under en kort tidsperiod. Med den här funktionen kan du koppla från nätverket och fortfarande använda din MPLAB XC-kompilator. Se dokumentmappen för XCLM-installationen för mer om den här funktionen. MPLAB X IDE innehåller ett licensfönster (Verktyg > Licenser) för att visuellt hantera roaming.

Lösa installationsproblem

Om du upplever problem med att installera kompilatorn under något av Windows-operativsystemen, prova följande förslag.

  • Kör installationen som administratör.
  • Ställ in behörigheterna för installationsprogrammet till "Full kontroll". (Högerklicka på file, välj Egenskaper, fliken Säkerhet, välj användare, redigera.)
  • Ställ in behörigheter för den tillfälliga mappen till "Full kontroll!

För att bestämma platsen för temp-mappen skriver du %temp% i kommandot Kör (Windows-logotangenten + R). Detta öppnar en file Utforskarens dialogruta som visar den katalogen och låter dig bestämma sökvägen till den mappen.

Kompilatordokumentation

Kompilatorns användarhandledningar kan öppnas från HTML-sidan som öppnas i din webbläsare när du klickar på den blå hjälpknappen i MPLAB X IDE-instrumentpanelen, enligt skärmdumpen.

Kompilatordokumentation
Om du bygger för 8-bitars AVR-mål, innehåller MPLAB® XC8 C Compiler User's Guide för AVR® MCU information om de kompilatoralternativ och funktioner som är tillämpliga på den här arkitekturen.

Kundsupport

Microchip välkomnar buggrapporter, förslag eller kommentarer angående denna kompilatorversion. Vänligen skicka eventuella felrapporter eller funktionsförfrågningar via supportsystemet.

Dokumentationsuppdateringar

För online- och uppdaterade versioner av MPLAB XC8-dokumentation, besök Microchips tekniska onlinedokumentation webplats.

Ny eller uppdaterad AVR-dokumentation i denna utgåva:

  • MUSL upphovsrättsmeddelande
  • Installera och licensiera MPLAB XC C-kompilatorer (revision M)
  • MPLAB XC8 Användarhandbok för inbyggda ingenjörer – AVR MCU:er (revision A)
  • MPLAB XC8 C Compiler Användarhandbok för AVR MCU (revision F)
  • Microchip Unified Standard Library Referensguide (revision B)

Microchip Unified Standard Library Reference Guide beskriver beteendet hos och gränssnittet till de funktioner som definieras av Microchip Unified Standard Library, såväl som den avsedda användningen av bibliotekstyperna och makron. En del av denna information fanns tidigare i MPLAB® XC8 C Compiler User!s Guide for AVR® MCU. Enhetsspecifik biblioteksinformation finns fortfarande i denna kompilatorguide.

Om du precis har börjat med 8-bitars enheter och MPLAB XC8 C-kompilatorn, har MPLAB® XC8 User!s Guide for Embedded Engineers – AVR® MCUs (DS50003108) information om hur du ställer in projekt i MPLAB X IDE och skriver kod. för ditt första MPLAB XC8 C-projekt. Den här guiden distribueras nu med kompilatorn.

Hamate Användarhandbok har inkluderats i dokumentkatalogen i den här utgåvan. Den här guiden är avsedd för dem som kör Hamate som en fristående applikation.

Vad är nytt

Följande är nya AVR-målfunktioner som kompilatorn nu stöder. Versionsnumret i underrubrikerna anger den första kompilatorversionen som stöder de funktioner som följer.

Version 2.40

Ny enhetsstöd Support är nu tillgängligt för följande AVR-delar: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA, AVR32EA, AVR64EA, AVR48EA.
Förbättrad processuell abstraktion Optimeringsverktyget för procedurabstraktion (PA) har förbättrats så att kod som innehåller en funktionsanropsinstruktion (call recall) kan beskrivas. Detta kommer endast att ske om stacken inte används för att skicka argument till eller erhålla returvärde från funktionen. Stacken används när man anropar en funktion med en variabel argumentlista eller när man anropar en funktion som tar fler argument än det finns register avsedda för detta ändamål. Den här funktionen kan inaktiveras med alternativet monk-pa-outline-calls, eller så kan procedurabstraktion inaktiveras helt för ett objekt file eller fungera genom att använda -monk-pa-on-file respektive -mo.-pa-on-funktion, eller genom att använda attributet nipa (nipa specifier) ​​selektivt med funktioner

Kodtäckningsmakro Kompilatorn definierar nu makrot __CODECOV om ett giltigt mcodecov-alternativ anges.

Minnesreservationsalternativ xc8-cc-föraren kommer nu att acceptera alternativet -mreserve=space@start: end när du bygger för AVR-mål. Det här alternativet reserverar det angivna minnesintervallet i antingen data- eller programminnesutrymmet, vilket förhindrar länken från att fylla i kod eller objekt i detta område.

Smartare smart IO Flera förbättringar har gjorts av Smart IO-funktionerna, inklusive allmänna justeringar av printf-kärnkoden, behandlande av %n-konverteringsspecifikationen som en oberoende variant, länkning i vararg pop-rutiner på begäran, med kortare datatyper där det är möjligt för att hantera IO-funktionsargument , och factoring gemensam kod i fältbredd och precisionshantering. Detta kan resultera i betydande kod- och databesparingar, samt öka exekveringshastigheten för IO.

Version 2.39 (Functional Safety Release)

Nätverksserverlicens Den här utgåvan av MPLAB XC8 Functional Safety Compiler stöder nätverksserverlicensen.

Version 2.36

Ingen.

Version 2.35

Ny enhetsstöd Support är tillgängligt för följande AVR-delar: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 och AVR64DD32.

Förbättrad kontextväxling Det nya alternativet -mcall-isr-prologues ändrar hur avbrottsfunktioner sparar register vid inträde och hur dessa register återställs när avbrottsrutinen avslutas. Det fungerar på ett liknande sätt som alternativet -mcall-prologues, men påverkar bara avbrottsfunktioner (ISR).

Ännu mer förbättrad kontextväxling Det nya alternativet -mgas-isr-prologues styr kontextens itch-kod som genereras för små avbrottsservicerutiner. När den är aktiverad kommer den här funktionen att få assemblern att skanna ISR för registeranvändning och endast spara dessa använda register om det behövs.

Konfigurerbar flashmapping Vissa enheter i AVR DA- och AVR DB-familjen har en SFR (t.ex. FLMAP) som specificerar vilken 32k sektion av programminnet som ska mappas in i dataminnet. Det nya alternativet – mconst-data-in-config-mapped-proem kan användas för att låta länken placera alla nackdelar kvalificerade data i en 32k sektion och automatiskt initiera det relevanta SFR-registret för att säkerställa att dessa data mappas in i dataminnesutrymmet , där den kommer att nås mer effektivt.

Microchip Unified Standard Libraries Alla MPLAB XC-kompilatorer kommer att dela ett Microchip Unified Standard Library, som nu är tillgängligt med den här utgåvan av MPLAB XC8. MPLAB® XC8 C Compiler User's Guide/eller AVR® MCU innehåller inte längre dokumentationen för dessa standardfunktioner. Denna information finns nu i Microchip Unified Standard Library Reference Guide. Observera att vissa funktioner som tidigare definierats av avr-libc inte längre är tillgängliga. (Se bibliotek):'. funktionalitet…)

Smart IO Som en del av de nya enhetliga biblioteken är IO-funktioner i utskrifts- och skanningsfamiljerna nu anpassade för varje build, baserat på hur dessa funktioner används i programmet. Detta kan avsevärt minska resurserna som används av ett program.
Smart IO-assistansalternativ När man analyserar anrop till smarta IO-funktioner (som printf () eller scanf () ), kan kompilatorn inte alltid avgöra från formatsträngen eller från argumenten sluta sig till de konverteringsspecifikationer som anropet kräver. Tidigare skulle kompilatorn alltid göra några antaganden och säkerställa att fullt fungerande IO-funktioner länkades till den slutliga programbilden. Ett nytt – msmart-io-format=fmt-alternativ har lagts till så att kompilatorn istället kan informeras av användaren om konverteringsspecifikationerna som används av smarta IO-funktioner vars användning är tvetydig, vilket förhindrar att alltför långa IO-rutiner länkas. (Se alternativ för smart-io-format för mer information.)

Placera anpassade sektioner Tidigare placerade alternativet -Wl, –section-start endast den specificerade sektionen på den begärda adressen när länkskriptet definierade en utdatasektion med samma namn. När så inte var fallet placerades avsnittet på en adress vald av länken och alternativet ignorerades i huvudsak. Nu kommer alternativet att tillämpas för alla anpassade avsnitt, även om länkskriptet inte definierar avsnittet. Observera dock att för standardsektioner, t.ex. text,. bss eller . data, kommer den bästa fördelaren fortfarande att ha fullständig kontroll över sin placering, och alternativet kommer inte att ha någon effekt. Använd alternativet -Wl, -Tsection=add, som beskrivs i användarhandboken.

Version 2.32

Stapelvägledning Tillgänglig med en PRO-kompilatorlicens, kan kompilatorns stackvägledningsfunktion användas för att uppskatta det maximala djupet för varje stack som används av ett program. Den konstruerar och analyserar anropsdiagrammet för ett program, bestämmer stackanvändningen för varje funktion och producerar en rapport, från vilken djupet på stackarna som används av programmet kan utläsas. Den här funktionen är aktiverad genom kommandoradsalternativet -mchp-stack-usage. En sammanfattning av stackanvändning skrivs ut efter exekvering. En detaljerad stackrapport finns på kartan file, som kan begäras på vanligt sätt.

Stöd för nya enheter finns för följande AVR-delar: ATTINY 427, ATTINY 424, ATTINY 426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28 och AVR64DB32 och AVR32DB48.

Support för indragen enhet är inte längre tillgänglig för följande AVR-delar: AVR16DA28, AVR16DA32 och AVR16DA48.

Version 2.31

Ingen.

Version 2.30

Nytt alternativ för att förhindra datainitiering Ett nytt drivrutinsalternativ -mno-data-ini t förhindrar initiering av data och rensning av bss-sektioner. Det fungerar genom att undertrycka utmatningen av do_ copy_ data och d o_ clear_ bss symbolerna i assembly files, vilket i sin tur kommer att förhindra inkluderingen av dessa rutiner av länkaren.

Förbättrade optimeringar Ett antal optimeringsförbättringar har gjorts, inklusive borttagning av redundanta returinstruktioner, borttagning av några hopp efter en skip-if-bit-is-instruktion, och förbättrad procedurabstraktion och förmågan att iterera denna process.

Ytterligare alternativ finns nu tillgängliga för att styra några av dessa optimeringar, specifikt -f sektionsankare, som tillåter åtkomst av statiska objekt att utföras i förhållande till en symbol; -mpai derations=n, som tillåter att antalet procedurabstraktionsiterationer ändras från standardvärdet 2; och, -mpa- call cost- shortcall, som utför mer aggressiv procedurabstraktion, i hopp om att länken kan koppla av långa samtal. Detta sista alternativ kan öka kodstorleken om de underliggande antagandena inte realiseras.

Ny enhetsstöd Support finns tillgängligt för följande AVR-delar: AVR16DA28, AVR16DA32,
AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 och AVR128DB.

Stöd för indragen enhet Support är inte längre tillgängligt för följande AVR-delar: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C och ATA664251C och ATAXNUMXATA.

Version 2.29 (Functional Safety Release)

Rubrik file för inbyggda kompilatorer För att säkerställa att kompilatorn kan överensstämma med språkspecifikationer som MISRA rubrik file, som automatiskt ingår av , har blivit uppdaterad. Den här rubriken innehåller prototyperna för alla inbyggda funktioner, såsom _buil tin _avrnop () och _buil tin_ avr delay_ cycles () . Vissa inbyggda program kanske inte är MISRA-kompatibla; dessa kan utelämnas genom att lägga till define _Xe_ STRICT_ MISRA till kompilatorns kommandorad. De inbyggda inslagen och deras deklarationer har uppdaterats för att använda typer av fast bredd.

Version 2.20

Ny enhetsstöd Support är tillgängligt för följande AVR-delar: ATTINY1624, ATTINY1626 och ATTINY1627.

Bättre tilldelning av bästa passform Best fit allocator (BFA) i kompilatorn har förbättrats så att sektioner allokeras i en ordning som tillåter bättre optimering. BFA stöder nu namngivna adressutrymmen och hanterar bättre datainitiering.

Förbättrad processuell abstraktion Procedurabstraktionsoptimeringarna utförs nu på fler kodsekvenser. Tidigare situationer där denna optimering kan ha ökat kodstorleken har åtgärdats genom att göra optimeringskoden medveten om länkens skräpinsamlingsprocess.

Frånvaro av AVR-montör AVR Assembler ingår inte längre i denna distribution.

Version 2.19 (Functional Safety Release)

Ingen.

Version 2.10

Kodtäckning Den här utgåvan innehåller en kodtäckningsfunktion som underlättar analys av i vilken utsträckning ett projekts källkod har exekverats. Använd alternativet -mcodecov=ram för att aktivera det. Efter exekvering av programmet på din hårdvara kommer kodtäckningsinformation samlas i enheten, och denna kan överföras till och visas av MPLAB X IDE via en kodtäckningsplugin. Se IDE-dokumentationen för information om denna plugin kan erhållas. #pragma mcodecov kan användas för att utesluta efterföljande funktioner från täckningsanalysen. Helst bör pragman läggas till i början av file att utesluta det hela file från täckningsanalysen. Alternativt kan attributet ( (mcodecov) ) användas för att utesluta en specifik funktion från täckningsanalysen.

Enhetsbeskrivning files En ny enhet file kallas avr chipinfo. html finns i docs-katalogen för kompilatordistributionen. Detta file listar alla enheter som stöds av kompilatorn. Klicka på ett enhetsnamn så öppnas en sida som visar alla tillåtna konfigurationsbitinställningar/värdepar för den enheten, med ex.amples.

Procedurmässig abstraktion Procedurabstraktionsoptimeringar, som ersätter vanliga block av assemblerkod med anrop till en extraherad kopia av det blocket, har lagts till i kompilatorn. Dessa utförs av en separat applikation, som automatiskt anropas av kompilatorn vid val av nivå 2, 3 eller optimeringar. Dessa optimeringar minskar kodstorleken, men de kan minska exekveringshastigheten och kodfelsökningsbarheten.
Procedurabstraktion kan inaktiveras vid högre optimeringsnivåer med alternativet -mno-pa, eller kan aktiveras vid lägre optimeringsnivåer (med förbehåll för din licens) genom att använda -mpa. Den kan inaktiveras för ett objekt file använder -mno-pa-on-file=filenamn, eller inaktiverat för en funktion genom att använda -mno-pa på funktion= funktion.
Inuti din källkod kan procedurabstraktion inaktiveras för en funktion genom att använda _attribute_ ( (nopa)) med funktionens definition, eller genom att använda _nopa, som expanderar till attribut ( (nopa, noinline)) och därmed förhindrar funktionsinlining från att äga rum och det finns abstraktion av inbäddad kod.
Lås bitsstöd i pragma #pragma-konfigurationen kan nu användas för att specificera AVR-låsbitarna såväl som andra konfigurationsbitar. Kontrollera avr-chip-informationen. html file (som nämns ovan) för inställning/värdepar att använda med denna pragma.
Ny enhetsstöd Support finns tillgängligt för följande delar: AVR28DA128, AVR64DA128, AVR32DA128 och AVR48DA128.

Version 2.05

Mer pengar för pengarna MacOS-versionen av denna kompilator och licenshanterare är nu en 64-bitars applikation. Detta säkerställer att kompilatorn installeras och körs utan varningar på de senaste versionerna av macOS.
Const-objekt i programminne Kompilatorn kan nu placera const-kvalificerade objekt i programmets Flash-minne, istället för att ha dessa placerade i RAM. Kompilatorn har modifierats så att const-kvalificerade globala data lagras i programmets flashminne och dessa data kan nås direkt och indirekt med hjälp av lämpliga programminnesinstruktioner. Den här nya funktionen är aktiverad som standard men kan inaktiveras med alternativet -mno-const-data-in-progmem. För avrxmega3- och avrtiny-arkitekturer krävs inte den här funktionen och är alltid inaktiverad, eftersom programminnet mappas till dataadressutrymmet för dessa enheter.
Standard gratis Olicensierade (gratis) versioner av denna kompilator tillåter nu optimeringar upp till och inklusive nivå 2. Detta kommer att tillåta en liknande, men inte identisk, utdata till vad som tidigare var möjligt med en standardlicens.
Välkommen AVRASM2 AVRASM2 assembler för 8-bitars enheter ingår nu i XC8 kompilatorinstallationsprogrammet. Denna assembler används inte av XC8-kompilatorn, men är tillgänglig för projekt baserade på handskriven assemblerkälla.
Ny enhetsstöd Support finns tillgängligt för följande delar: ATMEGA1608, ATMEGA1609, ATMEGA808 och ATMEGA809.

Version 2.00

Drivrutin på högsta nivå En ny drivrutin, kallad xc8-cc, sitter nu ovanför den tidigare avr-gcc-drivrutinen och xc8-drivrutinen, och den kan anropa lämplig kompilator baserat på valet av målenhet. Denna drivrutin accepterar GCC-liknande alternativ, som antingen översätts till eller skickas vidare till kompilatorn som körs. Denna drivrutin tillåter en liknande uppsättning alternativ med liknande semantik att användas med alla AVR- eller PIC-mål och är därför det rekommenderade sättet att anropa kompilatorn. Vid behov kan den gamla avr-gcc-drivrutinen anropas direkt med de gamla alternativen som den accepterade i tidigare kompilatorversioner.

Gemensamt C-gränssnitt Denna kompilator kan nu överensstämma med MPLAB Common C Interface, vilket gör att källkoden lättare kan porteras över alla MPLAB XC-kompilatorer. Alternativet -mext=cci begär den här funktionen, vilket möjliggör alternativ syntax för många språktillägg.

Ny bibliotekarie förare En ny bibliotekarie-drivrutin är placerad ovanför den tidigare PIC-bibliotekarien och AVR-avr-ar-bibliotekarien. Den här drivrutinen accepterar GCC-arkiveringsalternativ, som antingen översätts för eller skickas vidare till bibliotekarien som körs. Den nya drivrutinen gör att en liknande uppsättning alternativ med liknande semantik kan användas för att skapa eller manipulera alla PIC- eller AVR-bibliotek file och är därmed det rekommenderade sättet att anropa bibliotekarien. Om det krävs för äldre projekt kan den tidigare bibliotekarien anropas direkt med de gamla alternativen som den accepterade i tidigare kompilatorversioner.

Migrationsfrågor

Följande är funktioner som nu hanteras annorlunda av kompilatorn. Dessa ändringar kan kräva modifiering av din källkod om du porterar kod till den här kompilatorversionen. Versionsnumret i underrubrikerna anger den första kompilatorversionen som stödjer de ändringar som följer.

Version 2.40

Ingen.

Version 2.39 (Functional Safety Release)

Ingen.

Version 2.36

Ingen.

Version 2.35

Hantering av sträng-till-baser (XCS-2420) För att säkerställa överensstämmelse med andra XC-kompilatorer, kommer XC8-sträng-till-funktionerna, som strtol () etc., inte längre att försöka konvertera en indatasträng om den angivna basen är större än 36 och kommer istället att sätta errno till EINVAL. C-standarden specificerar inte funktionernas beteende när detta basvärde överskrids.

Olämpliga hastighetsoptimeringar Procedurabstraktionsoptimeringar aktiverades vid val av nivå 3-optimeringar (-03). Dessa optimeringar minskar kodstorleken på bekostnad av kodhastigheten, så de borde inte ha utförts. Projekt som använder denna optimeringsnivå kan se skillnader i kodstorlek och exekveringshastighet när de byggs med den här versionen.

Bibliotekets funktionalitet Koden för många av standard C-biblioteksfunktionerna kommer nu från Microchips Unified Standard Library, som kan uppvisa annorlunda beteende under vissa omständigheter jämfört med det som tillhandahålls av det tidigare avr-libc-biblioteket. Till exempelample, det är inte längre nödvändigt att länka i lprintf_flt-biblioteket (-print _flt-alternativet) för att aktivera formaterat IO-stöd för float-format-specifikatorer. De smarta IO-funktionerna i Microchip Unified Standard Library gör detta alternativ överflödigt. Dessutom är det inte längre nödvändigt att använda _p-suffixerade rutiner för sträng- och minnesfunktioner (t.ex. strcpy_P () etc .. ) som fungerar på const-strängar i flash. Standard C-rutinerna (t.ex. strcpy ()) kommer att fungera korrekt med sådan data när funktionen const-data-in-program-memory är aktiverad.

Version 2.32

Ingen.

Version 2.31

Ingen.

Version 2.30

Ingen.

Version 2.29 (Functional Safety Release)

Ingen.

Version 2.20

Ändrad DFP-layout Kompilatorn antar nu en annan layout som används av DFP:er (Device Family Packs). Detta kommer att innebära att en äldre DFP kanske inte fungerar med den här versionen och att äldre kompilatorer inte kommer att kunna använda de senaste DFP:erna.

Version 2.19 (Functional Safety Release)

Ingen.

Version 2.10

Ingen

Version 2.05

Konst objekt i programminnet Observera att de som standard, const-kvalificerade objekten kommer att placeras och nås i programminnet (som beskrivs här) . Detta kommer att påverka storleken och exekveringshastigheten för ditt projekt, men bör minska RAM-användningen. Den här funktionen kan inaktiveras, om så krävs, med alternativet -mnoconst-da ta-in-progmem.

Version 2.00

Konfigurationssäkringar Enhetskonfigurationssäkringarna kan nu programmeras med hjälp av en konfigurationspragma följt av inställningsvärdepar för att specificera säkringstillståndet, t.ex.
#pragma config WDT0N = SET
#pragma config B0DLEVEL = B0DLEVEL_4V3
Absoluta objekt och funktioner Objekt och funktioner kan nu placeras på specifik adress i minnet med hjälp av CCI _at (adress) specifier, t.ex.ample: #inkludera int foobar at(Ox800100); char at(Ox250) get ID(int offset) { … } Argumentet till denna specificator måste vara en konstant som representerar adressen där den första byten eller instruktionen kommer att placeras. RAM-adresser anges med en offset på 0x800000. Aktivera CCI för att använda den här funktionen.
Ny syntax för avbrottsfunktion Kompilatorn accepterar nu CCI-avbrottsspecifikationen (num) för att indikera att C-funktioner är avbrottshanterare. Specifieraren tar ett avbrottsnummer, till exempelample: #inkludera void interrupt(SPI STC_ vect _num) spi Isr(void) { … }

Fixade problem

Följande är korrigeringar som har gjorts i kompilatorn. Dessa kan fixa buggar i den genererade koden eller ändra kompilatorns funktion till det som var avsett eller specificerat i användarhandboken. Versionsnumret i underrubrikerna anger den första kompilatorversionen som innehåller korrigeringar för de problem som följer. Etiketterna inom parentes i rubriken är identifieringen av problemet i spårningsdatabasen. Dessa kan vara användbara om du behöver kontakta supporten.

Observera att vissa enhetsspecifika problem korrigeras i Device Family Pack (DFP) som är kopplat till enheten. Se MPLAB Pack Manager för information om ändringar som gjorts i DFP:er och för att ladda ner de senaste paketen.

Version 2.40

För avslappnad (XCS-2876) När du använde alternativet -mrelax tilldelade kompilatorn inte vissa sektioner tillsammans, vilket resulterade i mindre optimala kodstorlekar. Detta kan ha inträffat med kod som använde de nya MUSL-biblioteken eller med svaga symboler.
Mappningsfunktionen är inte inaktiverad som anges i varningen (XCS-2875) Funktionen cost-data-in-config mapdprogmem är beroende av att kostnadsdata-i-proem-funktionen är aktiverad. Om cost-data-ipconfig-mapped-proem-funktionen uttryckligen aktiverades med alternativet och cost-data-inprogmem-funktionen inaktiverades, misslyckades länksteget, trots ett varningsmeddelande som säger att cons data-in-config-mapped- proem-funktionen hade automatiskt inaktiverats, vilket inte var helt korrekt. Const-data-in-config-mapped-proem-funktionen är nu helt inaktiverad i den här situationen.
DFP ändrar för att få korrekt åtkomst till NVMCTRL (XCS-2848) Runtime-startkoden som användes av AVR64EA-enheter tog inte hänsyn till att NVMCTRL-registret var under Configuration Change Protection (CCP) och kunde inte ställa in IO SFR till sidan som används av const-data-in configmapped-proem kompilatorn funktion. Ändringar gjorda i AVR-Ex_DFP version 2.2.55 kommer att tillåta körtidsstartkoden att korrekt skriva till detta register.
DFP-ändringar för att undvika flash-mappning (XCS-2847) En lösning för ett problem med funktionen för flashkartläggning som rapporterats i AVR128DA28/32/48/64 Silicon Errata (DS80000882) har implementerats. Const-data-in-config-mapped-proem-kompilatorfunktionen kommer inte att tillämpas som standard för berörda enheter, och denna ändring kommer att visas i AVR-Ex_DFP version 2.2.160.
Byggfel med sinhf eller coshf (XCS-2834) Försök att använda biblioteksfunktionerna sinhf () eller coshf () resulterade i ett länkfel som beskrev en odefinierad referens. Den saknade funktionen som refereras till har nu inkluderats i kompilatordistributionen.
Byggfel med nopa (XCS-2833) Användning av nopa-attributet med en funktion som har fått sitt assemblernamn specificerat med som () utlöste felmeddelanden från assemblern. Denna kombination är inte möjlig.
Variadisk funktionsfel med pekarargument (XCS-2755, XCS-2731) Funktioner med ett variabelt antal argument förväntar sig att 24-bitars (_memo-typ) pekare skickas i listan med variabelargument när kostnadsdata-i-proem-funktionen är aktiverad. Argument som var pekare till dataminne skickades som 16-bitars objekt, vilket orsakade kodfel när de slutligen lästes. När nackdelar data-in-proem-funktionen är aktiverad, konverteras nu alla 16-bitars pekarargument till 24-bitars pekare. strtoxxx biblioteksfunktioner misslyckas (XCS-2620) När const-data-in-proem-funktionen var aktiverad uppdaterades inte enter-parametern i strtoxxx-biblioteksfunktionerna korrekt för källsträngargument som inte finns i programminnet.
Varningar för ogiltiga casts (XCS-2612) Kompilatorn kommer nu att ge ett felmeddelande om kostnad-i-proem-funktionen är aktiverad och adressen till en strängliteral uttryckligen castas till dataadressutrymmet (släpper const-kvalificeraren), t.ex.ample, (uint8 t *) "Hej världen!". En varning utfärdas om adressen kan vara ogiltig när en const-datapekare uttryckligen castas till dataadressutrymmet.
Placering av oinitierade konstobjekt (XCS-2408) Oinitierade const och const v olatila objekt placerades inte i programminnet på enheter som mappar hela eller delar av deras programminne till dataadressutrymmet. För dessa enheter är sådana objekt nu placerade i programminnet, vilket gör att deras funktion överensstämmer med andra enheter.

Version 2.39 (Functional Safety Release)

Ingen.

Version 2.36

Fel vid fördröjning (XCS-2774) Mindre förändringar i standardfrilägesoptimeringarna förhindrade konstant vikning av operanduttryck till de inbyggda fördröjningsfunktionerna, vilket resulterade i att de behandlades som icke-kontakter och utlöste felet: _buil tin avr delay_ cycles expects ac ompile tidsheltalskonstant.

Version 2.35

Kontinuerlig tilldelning med _at (XCS-2653) Kontinuerlig tilldelning av flera objektplatser i en sektion med samma namn och med användning av () fungerade inte korrekt. Till exempelample: constchararrl [ ] at tri butte ((sect on(“.misses”))) at (Ox50 0 ) = {Oxo , Ox CD} ; kostnad char arr2[ ] at tri butte ((section(“.my s eke”))) = {Oxen, Ox FE }; borde ha placerat arr2 omedelbart efter aril.
Ange sektionsstartadresser (XCS-2650) Alternativet -Wal, –sektion-start misslyckades tyst med att placera sektioner på den nominerade startadressen. Det här problemet har åtgärdats för alla anpassade sektioner; det kommer dock inte att fungera för några standardsektioner, såsom . text eller . bss, som måste placeras med ett -Wl, -T-alternativ.
Linker kraschar när du kopplar av (XCS-2647) När -relax-optimeringen var aktiverad och det fanns kod- eller datasektioner som inte passade in i det tillgängliga minnet kraschade länken. Nu, i en sådan omständighet, utfärdas felmeddelanden istället.
Dålig EEPROM-åtkomst (XCS-2629) Leproma _read_ block-rutinen fungerade inte korrekt på Mega-enheter när alternativet -monist-data-in-proem var aktiverat (vilket är standardtillståndet), vilket resulterade i att EEPROM-minnet inte lästes korrekt.
Ogiltig minnesallokering (XCS-2593, XCS-2651) När länkalternativet -Text eller -Tata (t.example som passerats med ett -Wl-drivrutinalternativ) är specificerad, motsvarande text/dataregions ursprung uppdaterades; dock justerades inte slutadressen i enlighet med detta, vilket kunde ha lett till att regionen översteg målenhetens minnesintervall.
Ogiltig ATtiny-avbrottskod (XCS-2465) När man byggde för Tatin-enheter och optimeringarna inaktiverades (-00), kan avbrottsfunktioner ha utlöst operand utanför räckvidd assembler-meddelanden.
Alternativ går inte igenom (XCS-2452) När du använder alternativet -Wl med flera, kommaseparerade länkalternativ, skickades inte alla länkalternativ till länken.
Fel vid indirekt läsning av programminne (XCS-2450) I vissa fall producerade kompilatorn ett internt fel (oigenkännlig insn) när den läste ett tvåbytevärde från en pekare till programminnet

Version 2.32

Andra åtkomst till bibliotek misslyckas (XCS-2381) Åberopar Windows-versionen av xc8-ar. exe-biblioteksarkivet en andra gång för att komma åt ett befintligt biblioteksarkiv kan ha misslyckats med ett felmeddelande om att det inte går att byta namn.

Version 2.31

Oförklarade kompilatorfel (XCS-2367) När den kördes på Windows-plattformar som hade systemets temporära katalog inställd på en sökväg som inkluderade en punkt'.' tecken, kan kompilatorn ha misslyckats med att köra.

Version 2.30

Globala etiketter felplacerade efter konturering (XCS-2299) Handskriven monteringskod som placerar globala etiketter i sammansättningssekvenser som är borttagna av procedurabstraktion kanske inte har placerats om korrekt.
En avkopplande krasch (XCS-2287) Användning av -merlad-alternativet kan ha fått länken att krascha när tail jump relaxation-optimeringar försökte ta bort ret-instruktioner som inte fanns i slutet av ett avsnitt.
Kraschar vid optimering av etiketter som värden (XCS-2282) Kod som använder "Etiketter som värden" GNU C-språktillägget kan ha orsakat att de processuella abstraktionsoptimeringarna kraschade, med ett korrigeringsfel för Outlined VMA range spans.
Inte så konstigt (XCS-2271) Prototyperna för startar () och andra funktioner från inte längre specificera icke-standardkostnadskvalificeraren på returnerade strängpekare när funktionen -monist-data inprogmem är inaktiverad. Observera att med avrxmega3- och avertin-enheter är den här funktionen permanent aktiverad.
Förlorade initialiserare (XCS-2269) När mer än en variabel i en översättningsenhet placerades i en sektion (med hjälp av sektion eller attribut ((sektion))), och den första sådan variabeln nollinitierades eller inte hade en initialiserare, initialiserare för andra variabler i samma översättningsenhet som placerades i samma sektion gick förlorade.

Version 2.29 (Functional Safety Release)

Ingen.

Version 2.20

Fel med långa kommandon (XCS-1983) När du använder ett AVR-mål kan kompilatorn ha slutat med en file inte hittat fel, om kommandoraden var extremt stor och innehöll specialtecken som citattecken, omvänt snedstreck, etc.
Otilldelad rodatasektion (XCS-1920) AVR-länkaren misslyckades med att tilldela minne för anpassade rodatasektioner när man byggde för avrxmega3- och avrtiny-arkitekturer, vilket potentiellt orsakade minnesöverlappningsfel

Version 2.19 (Functional Safety Release)

Ingen.

Version 2.10

Omlokaliseringsfel (XCS-1891) Den bästa passande allokatorn lämnade minnes "hål" mellan sektionerna efter länkavslappning. Bortsett från att fragmentera minnet, ökade detta risken för att det skulle uppstå länkförflyttningsfel relaterade till pc-relativa hopp eller samtal som hamnar utanför räckvidd.
Instruktioner som inte förvandlas genom avslappning (XCS-1889) Länkavslappning inträffade inte för hopp- eller anropsinstruktioner vars mål blir nåbara om de slappnade av.
Saknas funktionalitet (XCSE-388) Flera definitioner från , såsom clock_ div_ t och clock_prescale_set (), definierades inte för enheter, inklusive ATmega324PB, ATmega328PB, ATtiny441 och ATtiny841.
Makro saknas Förprocessormakron_ xcs _MODE_, _xcs VERSION, _xc och xcs definierades inte automatiskt av kompilatorn. Dessa finns nu tillgängliga.

Version 2.05

Internt kompilatorfel (XCS-1822) När du bygger under Windows kan ett internt kompilatorfel ha uppstått vid optimering av kod.
RAM-spill har inte upptäckts (XCS-1800, XCS-1796) Program som överskred det tillgängliga RAM-minnet upptäcktes inte av kompilatorn i vissa situationer, vilket resulterade i ett runtime-kodfel.
Utelämnat flashminne (XCS-1792) För avrxmega3 och avrtiny-enheter kan delar av flashminnet ha lämnats oprogrammerat av MPLAB X IDE.
Misslyckades med att köra main (XCS-1788) I vissa situationer där programmet inte hade några globala variabler definierade, avslutades inte startkoden för körning och huvudfunktionen () nåddes aldrig.
Felaktig minnesinformation (XCS-1787) För avrxmega3 och avrtiny-enheter rapporterade programmet avr-size att skrivskyddad data förbrukade RAM istället för programminne.
Felaktig programminnesläsning (XCS-1783) Projekt kompilerade för enheter med programminne mappat till dataadressutrymmet och som definierar objekt med hjälp av PROGMEM-makrot/attributet kan ha läst dessa objekt från fel adress.
Internt fel med attribut (XCS-1773) Ett internt fel uppstod om du definierade pekarobjekt med
_at () eller attribut() tokens mellan pekarens namn och den därhänvisade typen, t.ex.ample, char *
_at ( 0x80015 0) cp; En varning utfärdas nu om en sådan kod påträffas.
Misslyckades med att köra main (XCS-1780, XCS-1767, XCS-1754) Användning av EEPROM-variabler eller definiering av säkringar med hjälp av config-pragman kan ha orsakat felaktig datainitiering och/eller låst programkörning i runtime-startkoden, innan man når main () .
Säkringsfel med små enheter (XCS-1778, XCS-1742) Attiny4/5/9/10/20/40-enheterna hade en felaktig säkringslängd angiven i rubriken files som leder till länkningsfel när man försöker bygga kod som definierade säkringar.
Segmenteringsfel (XCS-1777) Ett intermittent segmenteringsfel har åtgärdats.
Assembler krasch (XCS-1761) Avr-as assembler kan ha kraschat när kompilatorn kördes under Ubuntu 18.
Objekt inte rensade (XCS-1752) Oinitierade objekt med statisk lagringstid kanske inte har rensats av startkoden för körning.
Motstridig enhetsspecifikation ignoreras (XCS-1749) Kompilatorn genererade inget fel när flera enhetsspecifikationsalternativ användes och indikerade olika enheter.
Minnesskada av heap (XCS-1748) Heap_ start-symbolen var felaktigt inställd, vilket resulterade i att vanliga variabler skulle skadas av heapen.
Fel vid omlokalisering av länk (XCS-1739) Ett länkomlokaliseringsfel kan ha sänts ut när koden innehöll ett rjmp eller rcall med ett mål exakt 4k byte bort.

Version 2.00

Ingen.

Kända problem

Följande är begränsningar i kompilatorns funktion. Dessa kan vara allmänna kodningsbegränsningar, eller
avvikelser från informationen i användarmanualen. Etiketterna inom parentes i rubriken är identifieringen av problemet i spårningsdatabasen. Detta kan vara till nytta om du behöver kontakta supporten. De artiklar som inte har etiketter är begränsningar som beskriver mode operandi och som sannolikt förblir i kraft permanent.

MPLAB X IDE-integration

MPLAB IDE-integration Om Compiler ska användas från MPLAB IDE måste du installera MPLAB IDE innan du installerar Compiler.

Kodgenerering

PA-minnestilldelningsfel (XCS-2881) När du använder procedurabstraktionsoptimerarna kan länken rapportera minnesallokeringsfel när kodstorleken är nära mängden tillgängligt programminne på enheten, även om programmet borde kunna passa det tillgängliga utrymmet.
Inte så smart Smart-IO (XCS-2872) Kompilatorns smart-io-funktion kommer att generera giltig men suboptimal kod för sprintfunktionen om kustdata-i-proem-funktionen har inaktiverats eller om enheten har all sin flash mappad i dataminnet.
Ännu mindre smart Smart-IO (XCS-2869) Kompilatorns smart-io-funktion kommer att generera giltig men suboptimal kod när alternativen -floe och -fno-buil tin båda används.
Suboptimal skrivskyddad dataplacering (XCS-2849) Länkaren är för närvarande inte medveten om minnessektionerna APPCODE och APPDATA, inte heller [No-]Read-While-Write-divisionerna i minneskartan. Som ett resultat finns det en liten chans att länken kan allokera skrivskyddad data i ett olämpligt minnesområde. Risken för felplacerad data ökar om funktionen coast-data-in-pragma är aktiverad, speciellt om coast-data-in-config-mapped-proem-funktionen också är aktiverad. Dessa funktioner kan inaktiveras vid behov.
Objekt file bearbetningsorder (XCS-2863) Ordningen i vilka objekt files kommer att bearbetas av länken kan skilja sig baserat på användningen av procedurabstraktionsoptimeringar (-mpa-alternativet). Detta skulle bara påverka kod som definierar svaga funktioner över flera moduler.
Länkarfel med absolut (XCS-2777) När ett objekt har gjorts absolut vid en adress i början av RAM och oinitierade objekt också har definierats, kan ett länkfel utlösas.
Korta väcknings-ID:n (XCS-2775) För ATA5700/2-enheter definieras PHID0/1-registren endast som 16 bitar breda, snarare än 32 bitar breda.
Länkkrasch vid anropssymbol (XCS-2758) Länkaren kan krascha om drivrutinsalternativet -merlad används när källkoden anropar en symbol som har definierats med länkalternativet -Wl, –defsym.
Felaktig initiering (XCS-2679) Det finns en diskrepans mellan var de initiala värdena för vissa globala/statiska byte-storleksobjekt placeras i dataminnet och var variablerna kommer att nås under körning.
startade felaktigt ställer in tom (XCS-2652) I fall där en ämnessträng för konvertering med angivet () innehåller vad som verkar vara ett flyttal i exponentiellt format och det finns ett oväntat tecken efter ett e-tecken, då kommer den tomma adressen, om den tillhandahålls, att peka på tecknet efter e och inte e i sig. Till exempelample: stated(“hooey”, tom); kommer att resultera i att tomt pekar på x-tecknet.
Dåliga indirekta funktionsanrop (XCS-2628) I vissa fall kan funktionsanrop som görs via en funktionspekare som är lagrad som en del av en struktur misslyckas.
strtof returnerar noll för hexadecimala flytningar (XCS-2626) Bibliotekets funktioner strtof () et al och scanf () et al, kommer alltid att konvertera ett hexadecimalt flyttal som inte anger en exponent till
noll. Till exempelample: stator(“Owl”, &empty); returnerar värdet 0, inte 1.
Felaktiga stackrådgivares meddelanden (XCS-2542, XCS-2541) I vissa fall sänds inte stackrådgivarens varning angående rekursion eller obestämd stack som används (möjligen genom användning av alloca()) inte ut.
Fel med duplicerad avbrottskod (XCS-2421) Om mer än en avbrottsfunktion har samma kropp, kan kompilatorn ha utdata för en avbrottsfunktion som anropar den andra. Detta kommer att resultera i att alla samtalsspärrade register sparas i onödan, och avbrotten kommer att aktiveras redan innan epilogen för den aktuella avbrottshanteraren har körts, vilket kan leda till kodfel.
Konstobjekt som inte finns i programminnet (XCS-2408) För avrxmega3 och avertins-projekt placeras oidealiserade const-objekt i dataminnet, även om en varning antyder att de har placerats i programminnet. Detta kommer inte att påverka enheter som inte har programminne mappat till dataminnesutrymmet, och det kommer inte heller att påverka något objekt som initieras.
Felaktig utdata med ogiltig DFP-sökväg (XCS-2376) Om kompilatorn anropas med en ogiltig DFP-sökväg och en "spec" file finns för den valda enheten, kompilatorn rapporterar inte det saknade enhetsfamiljepaketet och väljer istället "spec" file, vilket sedan kan leda till en ogiltig utdata. "Spec" files kanske inte är uppdaterade med de distribuerade DFP:erna och var endast avsedda att användas med intern kompilatortestning.
Minnesöverlappning oupptäckt (XCS-1966) Kompilatorn upptäcker inte minnesöverlappningen av objekt som gjorts absoluta vid en adress (via vid ()) och andra objekt som använder sektionsspecifikationen () och som är länkade till samma adress.
Fel med biblioteksfunktioner och _meme (XCS-1763) Kallade limbiska flytfunktioner med ett argument i adressutrymmet _memo kan misslyckas. Observera att biblioteksrutiner anropas från vissa C-operatörer, så t.example, följande kod påverkas: return regFloatVar > memxFloatVar;
Begränsad limbisk implementering (AVRTC-731) För ATTiny4/5/9/10/20/40-produkterna är standard C / Math-biblioteksimplementeringen i limbic mycket begränsad eller inte närvarande.
Programminnesbegränsningar (AVRTC-732) Programminnesbilder över 128 kb stöds av verktygskedjan; dock finns det kända fall av länkavbrytande utan avkoppling och utan ett användbart felmeddelande snarare än att generera de nödvändiga funktionsstubbarna när alternativet -relax används.
Namnutrymmesbegränsningar (AVRTC-733) Namngivna adressutrymmen stöds av verktygskedjan, med förbehåll för de begränsningar som nämns i avsnittet om specialtyper i användarhandboken.
Tidszoner De biblioteksfunktioner förutsätter GMT och stöder inte lokala tidszoner, så lokal tid () kommer att returnera samma tid som gummite (), t.ex.ample.

KUNDSUPPORT

file:///Applications/microehip/xc8/v 2 .40/docs/Read me_X C 8_ för A VR. htm

Dokument/resurser

MICROCHIP MPLAB XC8 C kompilatorprogramvara [pdf] Ägarmanual
MPLAB XC8 C, MPLAB XC8 C kompilatorprogram, kompilatorprogram, programvara

Referenser

Lämna en kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade *