MPLAB XC8 C Compiler Version 2.39 Versionshinweise für AVR MCU
Benutzerhandbuch
DIESES DOKUMENT ENTHÄLT WICHTIGE INFORMATIONEN ZUM MPLAB XC8 C-COMPILER BEI DER AUSRICHTUNG AUF MICROCHIP AVR-GERÄTE. BITTE LESEN SIE ES, BEVOR SIE DIESE SOFTWARE AUSFÜHREN.
SIEHE DIE VERSIONSHINWEISE ZUM MPLAB XC8 C-COMPILER FÜR DAS PIC-DOKUMENT, WENN SIE DEN COMPILER FÜR 8-BIT-PIC-GERÄTE VERWENDEN.
Überview
1.1. Einleitung
Diese Version des Microchip MPLAB® XC8 C-Compilers ist ein Compiler für funktionale Sicherheit, der auf der Version v2.36 dieses Compilers basiert und jetzt die Netzwerkserver-Lizenz unterstützt.
1.2. Veröffentlichungsdatum
Das offizielle Veröffentlichungsdatum dieser Compilerversion ist der 27. Januar 2022.
1.3. Vorherige Version
Die vorherige Version des MPLAB XC8 C-Compilers war 2.36 und wurde am 25. Januar 2022 veröffentlicht.
1.4. Handbuch Funktionale Sicherheit
Ein Handbuch zur funktionalen Sicherheit für die MPLAB XC-Compiler ist im Dokumentationspaket verfügbar, wenn Sie eine Lizenz für funktionale Sicherheit erwerben.
1.5. Komponentenlizenzen und Versionen® das MPLAB
Die Tools des XC8 C-Compilers für AVR-MCUs werden unter der GNU General Public License (GPL) geschrieben und vertrieben, was bedeutet, dass der Quellcode frei vertrieben und der Öffentlichkeit zugänglich ist.
Der Quellcode für Tools unter der GNU GPL kann separat von Microchip heruntergeladen werden webGrundstück. Sie können die GNU GPL in der Datei mit dem Namen lesen, die sich im Unterverzeichnis Ihres Verzeichnisses install license.txt avr/doc befindet. Eine allgemeine Diskussion der Prinzipien, die der GPL zugrunde liegen, finden Sie hier.
Der für die Header-Dateien, Linker-Skripte und Laufzeitbibliotheken bereitgestellte Unterstützungscode ist proprietärer Code und wird nicht von der GPL abgedeckt.
Dieser Compiler ist eine Implementierung von GCC Version 5.4.0, binutils Version 2.26 und verwendet avr-libc Version 2.0.0.
1.6. Systemanforderungen
Der MPLAB XC8 C-Compiler und die von ihm verwendete Lizenzierungssoftware sind für eine Vielzahl von Betriebssystemen verfügbar, darunter 64-Bit-Versionen der folgenden: Professional Editions von Microsoft Windows 10; Ubuntu 18.04; und macOS 10.15.5. Binärdateien für Windows wurden mit einem Code signiert. Binärdateien für macOS wurden mit einem Code signiert und notariell beglaubigt.
Wenn Sie einen Netzwerklizenzserver betreiben, dürfen nur Computer mit von den Compilern unterstützten Betriebssystemen als Host für den Lizenzserver verwendet werden. Ab xclm Version 2.0 kann der Netzwerklizenzserver auf einer Microsoft Windows Server-Plattform installiert werden, der Lizenzserver muss jedoch nicht auf einer Serverversion des Betriebssystems ausgeführt werden.
1.7. Unterstützte Geräte
Dieser Compiler unterstützt alle zum Zeitpunkt der Veröffentlichung bekannten 8-Bit AVR MCU-Geräte. Siehe (im Compiler avr_chipinfo.html Verzeichnis) für eine Liste aller unterstützten Geräte. Diese Dateien enthalten auch die Bitdoc-Konfigurationseinstellungen für jedes Gerät.
1.8. Editionen und Lizenz-Upgrades
Der MPLAB XC8-Compiler kann als lizenziertes (PRO) oder unlizenziertes (Free) Produkt aktiviert werden. Sie müssen einen Aktivierungsschlüssel erwerben, um Ihren Compiler zu lizenzieren. Eine Lizenz ermöglicht ein höheres Maß an Optimierung im Vergleich zum Free-Produkt. Ein unlizenzierter Compiler kann ohne Lizenz unbegrenzt betrieben werden.
Ein MPLAB XC8 Functional Safety-Compiler muss mit einer von Microchip erworbenen Functional Safety-Lizenz aktiviert werden. Ohne diese Lizenz funktioniert der Compiler nicht. Nach der Aktivierung können Sie jede Optimierungsstufe auswählen und alle Compilerfunktionen nutzen. Diese Version des MPLAB XC Functional Safety
Der Compiler unterstützt die Netzwerkserverlizenz.
Informationen zu Lizenztypen und zur Installation des Compilers mit einer Lizenz finden Sie im Dokument Installing and Licensing MPLAB XC C Compilers (DS50002059).
1.9. Installation und Aktivierung
Siehe auch die Abschnitte Migrationsprobleme und Einschränkungen für wichtige Informationen über den neuesten Lizenzmanager, der in diesem Compiler enthalten ist.
Wenn Sie MPLAB IDE verwenden, installieren Sie unbedingt die neueste MPLAB X IDE-Version 5.0 oder höher, bevor Sie dieses Tool installieren. Beenden Sie die IDE, bevor Sie den Compiler installieren. Führen Sie das Compiler-Installationsprogramm (Windows), (Linux) oder (macOS) .exe .run .app aus, z. B. und folgen Sie den Anweisungen auf dem Bildschirm.
XC8-1.00.11403-windows.exe
Das Standardinstallationsverzeichnis wird empfohlen. Wenn Sie Linux verwenden, müssen Sie den Compiler über ein Terminal und von einem Root-Konto aus installieren. Die Installation erfolgt über ein macOS-Konto mit Administratorrechten.
Die Aktivierung erfolgt nun separat zur Installation. Weitere Informationen finden Sie im Dokument License Manager for MPLAB® XC C Compilers (DS52059).
Wenn Sie den Compiler unter der Testlizenz ausführen, erhalten Sie jetzt während der Kompilierung eine Warnung, wenn Ihr Testzeitraum innerhalb von 14 Tagen endet. Dieselbe Warnung wird ausgegeben, wenn Ihr HPA-Abonnement innerhalb von 14 Tagen endet.
Der XC Network License Server ist ein separates Installationsprogramm und nicht im Einzelbenutzer-Compiler-Installationsprogramm enthalten.
Der XC License Manager unterstützt jetzt das Roaming von Floating-Netzwerklizenzen. Diese Funktion richtet sich an mobile Benutzer und ermöglicht es einer Floating-Lizenz, das Netzwerk für kurze Zeit zu verlassen. Mit dieser Funktion können Sie die Verbindung zum Netzwerk trennen und Ihren MPLAB XC-Compiler weiterhin verwenden. Weitere Informationen zu dieser Funktion finden Sie im Ordner doc der XCLM-Installation.
MPLAB X IDE enthält ein Lizenzfenster (Tools > Lizenzen), um das Roaming visuell zu verwalten.
1.9.1. Beheben von Installationsproblemen
Wenn Sie Schwierigkeiten bei der Installation des Compilers unter einem der Windows-Betriebssysteme haben, versuchen Sie die folgenden Vorschläge.
- Führen Sie die Installation als Administrator aus.
- Stellen Sie die Berechtigungen der Installationsanwendung auf „Vollzugriff“ ein. (Klicken Sie mit der rechten Maustaste auf die Datei, wählen Sie Eigenschaften, Registerkarte Sicherheit, wählen Sie Benutzer aus, bearbeiten Sie sie.)
- Setzen Sie die Berechtigungen des temporären Ordners auf „Vollzugriff!“.
- Um den Speicherort des temporären Ordners zu ermitteln, geben Sie in den Befehl „Ausführen“ (Windows-Logo-Taste + R) „%temp%“ ein. Dadurch wird ein Datei-Explorer-Dialogfeld geöffnet, in dem das Verzeichnis angezeigt wird, und Sie können den Pfad dieses Ordners ermitteln.
1.10. Compiler-Dokumentation
Die Benutzerhandbücher des Compilers können von der HTML-Seite geöffnet werden, die in Ihrem Browser geöffnet wird, wenn Sie auf die blaue Hilfeschaltfläche im MPLAB X IDE-Dashboard klicken, wie im Screenshot angegeben.
Wenn Sie für 8-Bit-AVR-Ziele bauen, finden Sie im MPLAB® XC8 C Compiler User's® Guide for AVR
MCU enthält Informationen zu den Compileroptionen und Funktionen, die auf diese Architektur anwendbar sind.
1.11. Kundendienst
Microchip freut sich über Fehlerberichte, Vorschläge oder Kommentare zu dieser Compiler-Version. Bitte richten Sie Fehlerberichte oder Funktionsanfragen über das Support-System.
Dokumentationsaktualisierungen
Aktuelle Online-Versionen der MPLAB XC8-Dokumentation finden Sie auf der Online-Website von Microchip.
Technische Dokumentation webWebsite.
Neue oder aktualisierte AVR-Dokumentation in dieser Version:
Installieren und Lizenzieren von MPLAB® XC C-Compilern (DS50002059) Revision L
Das Microchip Unified Standard Library Reference Guide beschreibt das Verhalten und die Schnittstelle zu den von der Microchip Unified Standard Library definierten Funktionen sowie die beabsichtigte Verwendung der Bibliothekstypen und Makros. Einige dieser Informationen waren früher im MPLA® XC8 C Compiler User!s Guide® für AVR enthalten.
MCU. Gerätespezifische Bibliotheksinformationen sind weiterhin in diesem Compilerhandbuch enthalten.
Das Hexmate-Benutzerhandbuch wurde in das Verzeichnis dieser Version aufgenommen. Dieses Handbuch richtet sich an Benutzer, die Hexmate als eigenständige Anwendung ausführen.
Die folgenden Abschnitte enthalten Korrekturen und zusätzliche Informationen zu den in den mit dem Compiler gelieferten Benutzerhandbüchern enthaltenen Informationen.
2.1. smart-io-format Option
Die fmt-Option -msmart-io-format=fmt, wobei es sich um eine Zeichenfolge mit formatierten IO-Konvertierungsspezifikationen handelt, benachrichtigt den Compiler darüber, dass die aufgelisteten Spezifikationen von intelligenten IO-Funktionen verwendet werden.
Um die Codegröße zu reduzieren, passt der Compiler den Bibliothekscode, der mit den Druck- und Scanfamilien der Smart-IO-Funktionen verknüpft ist, basierend auf den Konvertierungsspezifikationen an, die in den Formatzeichenfolgen vorhanden sind, die über alle Aufrufe dieser Funktionen hinweg gesammelt werden. Diese Funktion ist vollautomatisch und kann nicht deaktiviert werden.
In manchen Situationen ist der Compiler nicht in der Lage, aus dem formatierten IO-Funktionsaufruf Nutzungsinformationen abzuleiten. Wenn die Option verwendet wurde, werden die erforderlichen Konvertierungsspezifikationen für diese Funktionen aus der Zeichenfolge abgerufen. Andernfalls macht der Compiler keine Annahmen darüber, wie die -msmart-io-format=fmt fmt-Funktionen verwendet werden, und stellt sicher, dass voll funktionsfähige formatierte IO-Funktionen in das endgültige Programmabbild eingebunden werden.
Zum BeispielampBeachten Sie hierzu die folgenden Aufrufe intelligenter IO-Funktionen.
vscanf(„%d:%li“, va_list1);
vprintf(„%-s%d“, va_list2);
vprintf(fmt1, va_list3);// mehrdeutige Verwendung
vscanf(fmt2, va_list4);// mehrdeutige Verwendung
Bei der Verarbeitung der letzten beiden Aufrufe kann der Compiler weder aus den Formatzeichenfolgen noch aus den Argumenten Nutzungsinformationen ableiten. In diesen Fällen kann die Option -msmart-io-format verwendet werden und ermöglicht möglicherweise die Generierung optimaler formatierter I0-Funktionen, wodurch die Codegröße des Programms reduziert wird. Zum BeispielampWenn beispielsweise die Formatzeichenfolgen, auf die fmtl und fmt2 zeigen, gemeinsam nur die Konvertierungsspezifizierer „%d“, „%i“ und „% s“ verwenden, sollte die Option -msmart-io-format=fmt=“%d%i%s“ ausgegeben werden.
Der Farbton-String kann jede gültige Konvertierungsspezifikation enthalten, einschließlich Flags und Modifikatoren (z. B.ample „%-13. 91s“) und sollte genau die von den Funktionen verwendeten widerspiegeln, deren Verwendung mehrdeutig ist. Das Fehlen einer Spezifikation in der bisschen Argument, bei dem es von den formatierten I0-Funktionen verwendet wurde, kann zu einem Codefehler führen.
Wenn fmt eine leere Zeichenfolge ist oder keine erkennbaren Konvertierungsspezifikationen enthält, wird eine Warnung ausgegeben und voll funktionsfähige formatierte I0-Funktionen werden in das endgültige Programmabbild eingebunden.
Diese Option kann mehrfach in der Kommandozeile verwendet werden. Die mit jeder Option verwendeten Konvertierungsangaben werden kumuliert.
2.2. Option „omit-frame-pointer“
Die Option – f omit- frame-pointer weist den Compiler an, den Stackpointer direkt zu verwenden, um auf Objekte im Stack zuzugreifen und, wenn möglich, Code wegzulassen, der das Frameregister speichert, initialisiert und wiederherstellt. Sie wird auf allen Optimierungsstufen ungleich Null automatisch aktiviert.
Das Negieren der Option mit -fno-omit- frame-pointer kann beim Debuggen von optimiertem Code hilfreich sein; allerdings garantiert diese Option nicht, dass der Frame-Pointer immer verwendet wird.
2.3. unroll-loops Optionen
Die Optionen – funrol I-loops und -(unroll-all-loops steuern geschwindigkeitsorientierte Optimierungen, die versuchen, Verzweigungsverzögerungen in Schleifen zu entfernen. Ungerollte Schleifen erhöhen normalerweise die Ausführungsgeschwindigkeit des generierten Codes auf Kosten einer größeren Codegröße.
Die Option – funrol I-loops entrollt Schleifen, bei denen die Anzahl der Iterationen zur Kompilierzeit oder beim Eintritt des Codes in die Schleife bestimmt werden kann. Die Option -funroll-all-loops ist aggressiver und entrollt alle Schleifen, auch wenn die Anzahl der Iterationen unbekannt ist. Sie ist bei der Verbesserung der Ausführungsgeschwindigkeit normalerweise weniger effektiv als die Option – funrol 1-loops.
2.4. Fat-Ito-Objekte Option
Die Option – f fat-1 to-obj ects fordert den Compiler auf, Fat-Objekte zu generieren. files, die sowohl
Objektcode und GIMPLE (eine der internen Darstellungen von GCC), geschrieben in eindeutige ELF-Abschnitte. Solche Objekte files sind nützlich für Bibliothekscode, der mit Projekten verknüpft werden könnte, die den Standard-Link-Time-Optimizer verwenden bzw. nicht verwenden, der durch die Option -flto gesteuert wird.
Die Form – fno-fat-lto-objects dieser Option, die die Standardeinstellung ist, wenn keine Option angegeben ist, unterdrückt die Einbeziehung des Objektcodes in Objekt files, was zu schnelleren Builds führt. Allerdings sind solche Objekt files müssen immer mit dem Standard-Link-Time-Optimizer verknüpft werden.
2.5. Ito-Partitionsoption
Die – flto-partiti auf=a Ich bin so Option steuert den Algorithmus, der zum Partitionieren von Objekten verwendet wird files beim Ausführen des Link-Time-Optimizers. Das Argument none deaktiviert die Partitionierung vollständig und führt den Link-Time-Optimizer-Schritt direkt aus der WPA-Phase (Whole Program Analysis) aus. Dieser Betriebsmodus liefert die besten Ergebnisse, allerdings auf Kosten größerer Compiler-Speicheranforderungen und längerer Build-Zeiten, obwohl dies bei kleinen Programmen wahrscheinlich kein Problem darstellt. Das Partitionieren des Objekts files kann die Build-Leistung verbessern. Das Argument one gibt an, dass genau eine Partition verwendet werden soll, und das Argument lto1 gibt eine Partitionierung an, die der von der Originalquelle vorgegebenen entspricht. files. Das Standardargument ist „balanced“, was eine Aufteilung in gleich große Blöcke angibt, wenn möglich.
2.6. Ergänzung zu Abschnitt 3.6.11 Zugeordnete Linker-Optionen
Das -wl, –Abschnittsstart =Sek tion=Adresse fehlt in der Tabelle der häufig verwendeten Linker-Optionen, auf die mit der Compilertreiberoption -wl zugegriffen werden kann. Diese Option ermöglicht die Platzierung von Abschnitten mit benutzerdefinierten Namen an der angegebenen Adresse. Sie kann nicht verwendet werden, um Standardabschnitte wie ( . data, . bss, . Text), der mit der Option -wl, -'r platziert werden muss.
2.7. Ergänzung zu Abschnitt 4.14.2 Ändern und Verlinken des zugeordneten Abschnitts
Beachten Sie, dass entgegen den Informationen in diesem Abschnitt des Benutzerhandbuchs Änderungen am Compiler in dieser Version nun bedeuten, dass benutzerdefinierte Abschnitte mit -w1 verknüpft werden können. -Sekte Ion- start=Abschnitt=acicir Option und ohne das Linker-Skript ändern zu müssen.
Was ist neu
Die folgenden neuen AVR-Zielfunktionen werden jetzt vom Compiler unterstützt. Die Versionsnummer in den Unterüberschriften gibt die erste Compilerversion an, die die folgenden Funktionen unterstützt.
3.1. Version 2.39 (Funktionale Sicherheitsfreigabe)
Netzwerkserverlizenz Diese Version des MPLAB XC8 Functional Safety Compilers unterstützt die Netzwerkserverlizenz.
3.2. Version 2.36
Keiner.
3.3. Version 2.35
Unterstützung für neue Geräte Unterstützung ist für die folgenden AVR-Teile verfügbar: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 und AVR64DD32.
Verbesserter Kontextwechsel Die neue Option -mcall-isr-prologues ändert, wie Interruptfunktionen Register beim Eintritt speichern und wie diese Register wiederhergestellt werden, wenn die Interruptroutine beendet wird. Sie funktioniert ähnlich wie die Option -mcall-prologues, betrifft aber nur Interruptfunktionen (ISRs).
Noch weiter verbesserter Kontextwechsel Das neue -mgas-isr-Prologe Die Option steuert den Kontextwechselcode, der für kleine Interrupt-Serviceroutinen generiert wird. Wenn diese Funktion aktiviert ist, durchsucht der Assembler den ISR nach Registernutzung und speichert diese verwendeten Register nur bei Bedarf.
Konfigurierbares Flash-Mapping Einige Geräte der AVR DA- und AVR DB-Familie verfügen über ein SFR (z. B. FLMAP), das angibt, welcher 32-kB-Abschnitt des Programmspeichers in den Datenspeicher abgebildet wird. Mit der neuen Option – mconst-data-in-config-mapped-progmem kann der Linker alle Cons-t-qualifizierten Daten in einem 32-kB-Abschnitt platzieren und das entsprechende SFR-Register automatisch initialisieren, um sicherzustellen, dass diese Daten in den Datenspeicherbereich abgebildet werden, wo sie effektiver abgerufen werden können.
Einheitliche Standardbibliotheken von Microchip Alle MPLAB XC-Compiler nutzen eine Microchip Unified Standard Library, die jetzt mit dieser Version von MPLAB XC8 verfügbar ist. Die MPLAB® XC8 C-Compiler
Benutzerhandbuch für AVR® MCU enthält nicht mehr die Dokumentation dieser Standardfunktionen. Diese Informationen finden Sie nun im Referenzhandbuch zur einheitlichen Standardbibliothek von Microchip. Beachten Sie, dass einige zuvor von avr-libc definierte Funktionen nicht mehr verfügbar sind. (Siehe Bibliotheksfunktionalität.)
Smart I0 Als Teil der neuen vereinheitlichten Bibliotheken werden JO-Funktionen in den printf- und scanf-Familien jetzt bei jedem Build individuell generiert, basierend darauf, wie diese Funktionen im Programm verwendet werden. Dadurch können die von einem Programm verwendeten Ressourcen erheblich reduziert werden.
Smart I0-Unterstützungsoption Beim Analysieren von Aufrufen von Smart I0-Funktionen (wie printf() oder scanf()) kann der Compiler nicht immer aus der Formatzeichenfolge oder aus den Argumenten die vom Aufruf benötigten Konvertierungsspezifizierer ableiten. Bisher machte der Compiler immer keine Annahmen und stellte sicher, dass voll funktionsfähige 10 Funktionen in das endgültige Programmbild eingebunden wurden. Eine neue Option – msma rt-io- format=fmt wurde hinzugefügt, damit der Compiler stattdessen vom Benutzer über die von Smart I0-Funktionen verwendeten Konvertierungsspezifizierer informiert werden kann, deren Verwendung mehrdeutig ist, wodurch verhindert wird, dass übermäßig lange 10 Routinen eingebunden werden. (Siehe Smart-IO-Format Option für weitere Details.)
Platzieren benutzerdefinierter Abschnitte Bisher platzierte die Option -W1, –section-start den angegebenen Abschnitt nur dann an der angeforderten Adresse, wenn das Linker-Skript einen Ausgabeabschnitt mit demselben Namen definierte. Wenn dies nicht der Fall war, wurde der Abschnitt an einer vom Linker gewählten Adresse platziert und die Option wurde im Wesentlichen ignoriert. Jetzt wird die Option für alle benutzerdefinierten Abschnitte berücksichtigt, auch wenn das Linker-Skript den Abschnitt nicht definiert. Beachten Sie jedoch, dass für Standardabschnitte wie . text, . bss oder . Daten, Der am besten passende Allocator hat immer noch die vollständige Kontrolle über ihre Platzierung und die Option hat keine Auswirkung. Verwenden Sie -wl, -Tsection=Adresse Option, wie im Benutzerhandbuch beschrieben.
3.4. Version 2.32
Stapelführung Die Stapelführungsfunktion des Compilers ist mit einer PRO-Compilerlizenz verfügbar und kann verwendet werden, um die maximale Tiefe eines von einem Programm verwendeten Stapels abzuschätzen. Sie erstellt und analysiert den Aufrufgraphen eines Programms, bestimmt die Stapelnutzung jeder Funktion und erstellt einen Bericht, aus dem die Tiefe der vom Programm verwendeten Stapel abgeleitet werden kann.
Diese Funktion wird über die Befehlszeilenoption -mchp-stack- usage aktiviert. Nach der Ausführung wird eine Zusammenfassung der Stapelnutzung gedruckt. Ein detaillierter Stapelbericht ist in der Karte verfügbar file, die wie gewohnt angefordert werden können.
Unterstützung für neue Geräte. Unterstützung ist für die folgenden AVR-Teile verfügbar: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTNY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 und AVR32DB48.
Eingestellter Gerätesupport: Für die folgenden AVR-Teile ist kein Support mehr verfügbar: AVR 16DA28, AVR16DA32 und AVR16DA48.
3.5. Version 2.31 Keine.
3.6. Version 2.30
Neue Option zum Verhindern der Dateninitialisierung Eine neue Treiberoption -mno-data-init verhindert die Initialisierung von Daten und das Löschen von BSS-Abschnitten. Dies funktioniert, indem die Ausgabe der Symbole do_copy_data und do_clear_bss in Assembler unterdrückt wird. files, was wiederum die Einbeziehung dieser Routinen durch den Linker verhindert.
Verbesserte Optimierungen Eine Reihe von Optimierungsverbesserungen wurden vorgenommen, darunter das Entfernen redundanter Rückgabebefehle, das Entfernen einiger Sprünge nach einem Skip-if-bit-is-Befehl sowie eine verbesserte prozedurale Abstraktion und die Möglichkeit, diesen Prozess zu wiederholen.
Zusätzliche Optionen sind jetzt verfügbar, um einige dieser Optimierungen zu steuern, insbesondere -fsection-anchors, das den Zugriff auf statische Objekte relativ zu einem Symbol ermöglicht; -mpa-iterations =n, wodurch die Anzahl der Iterationen der prozeduralen Abstraktion vom Standardwert 2 geändert werden kann; und -mpa-callcost-shortcal 1, das eine aggressivere prozedurale Abstraktion durchführt, in der Hoffnung, dass der Linker lange Aufrufe entlasten kann. Diese letzte Option kann die Codegröße erhöhen, wenn die zugrunde liegenden Annahmen nicht realisiert werden.
Neu Geräteunterstützung Für die folgenden AVR-Teile ist Support verfügbar: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR 128DB 32, AVR128DB48 und AVR128DB64.
Unterstützung für eingefahrene Geräte Für die folgenden AVR-Teile wird kein Support mehr angeboten: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C und ATA664251.
3.7. Version 2.29 (Funktionale Sicherheitsfreigabe)
Kopfbereich file für Compiler-Bunt-Ins Um sicherzustellen, dass der Compiler Sprachspezifikationen wie MISRA einhält, muss der Header file, das automatisch einbezogen wird durch , wurde aktualisiert. Dieser Header enthält die Prototypen für alle integrierten Funktionen, wie z. B. built in_avr_nop ( ) und _builtin_avr_delay_cycles () . Einige integrierte Funktionen sind möglicherweise nicht MISRA-kompatibel; diese können weggelassen werden, indem der Compiler-Befehlszeile das define XC_STRICT MISRA hinzugefügt wird. Die integrierten Funktionen und ihre Deklarationen wurden aktualisiert, um Typen mit fester Breite zu verwenden.
3.8. Version 2.20
Neu Geräteunterstützung Für die folgenden AVR-Teile ist Support verfügbar: ATTINY 1624, ATTINY1626 und ATTINY 1 627.
Bessere Best-Fit-Zuteilung Der Best Fit Allocator (BFA) im Compiler wurde verbessert, sodass Abschnitte in einer Reihenfolge zugewiesen werden, die eine bessere Optimierung ermöglicht. Der BFA unterstützt jetzt benannte Adressräume und verarbeitet die Dateninitialisierung besser.
Verbesserte prozedurale Abstraktion Die prozeduralen Abstraktionsoptimierungen werden jetzt für mehr Codesequenzen durchgeführt. Frühere Situationen, in denen diese Optimierung möglicherweise die Codegröße erhöht hätte, wurden dadurch behoben, dass der Optimierungscode auf den Garbage Collection-Prozess des Linkers aufmerksam gemacht wurde.
Fehlen eines AVR-Assemblers Der AVR-Assembler ist in dieser Distribution nicht mehr enthalten. 3.9. Version 2.19 (Funktionale Sicherheit Freigeben)
Keiner.
3.10. Version 2.10
Code-Abdeckung Diese Version enthält eine Code Coverage-Funktion, die die Analyse des Umfangs der Ausführung des Quellcodes eines Projekts erleichtert. Verwenden Sie die Option -mcodecov=ram, um sie zu aktivieren. Nach der Ausführung des Programms auf Ihrer Hardware werden Code Coverage-Informationen im Gerät gesammelt und können über ein Code Coverage-Plugin an die MPLAB X IDE übertragen und dort angezeigt werden. Informationen zu diesem Plugin finden Sie in der IDE-Dokumentation.
Das #pragma nocodecov kann verwendet werden, um nachfolgende Funktionen von der Abdeckungsanalyse auszuschließen. Idealerweise sollte das Pragma am Anfang des file das ganze auszuschließen file von der Abdeckungsanalyse. Alternativ kann das _Attribut_ ( (nocodecov)) verwendet werden, um eine bestimmte Funktion von der Abdeckungsanalyse auszuschließen.
Gerätebeschreibung files Neues Gerät file genannt avr_chipinfo.html befindet sich im docs Verzeichnis von
die Compiler-Distribution. Dies file listet alle vom Compiler unterstützten Geräte auf. Klicken Sie auf einen Gerätenamen, und es öffnet sich eine Seite mit allen zulässigen Konfigurationsbiteinstellungs-/Wertpaaren für dieses Gerät, mit Beispielamples.
Prozedurale Abstraktion Dem Compiler wurden prozedurale Abstraktionsoptimierungen hinzugefügt, die gemeinsame Assemblercodeblöcke durch Aufrufe einer extrahierten Kopie dieses Blocks ersetzen. Diese werden von einer separaten Anwendung ausgeführt, die automatisch vom Compiler aufgerufen wird, wenn Level 2, 3 oder XNUMX ausgewählt wird. s Optimierungen. Diese Optimierungen verringern die Codegröße, können aber die Ausführungsgeschwindigkeit und die Debugbarkeit des Codes beeinträchtigen.
Die prozedurale Abstraktion kann auf höheren Optimierungsstufen mit der Option -mno-pa deaktiviert werden. Auf niedrigeren Optimierungsstufen (je nach Lizenz) kann sie mit -mpa aktiviert werden. Sie kann für ein Objekt deaktiviert werden. file mit -mno-pa-on-file=fileName oder für eine Funktion deaktiviert durch -mno-pa-onfunotion=f Salbung.
Innerhalb Ihres Quellcodes kann die prozedurale Abstraktion für eine Funktion deaktiviert werden, indem Sie attribute_ ( (nopa) ) mit der Definition der Funktion verwenden, oder indem Sie nopa verwenden, das zu _attribute_ ( (nopa, noinline) ) erweitert wird und somit die Inline-Erstellung von Funktionen und die Abstraktion von Inline-Code verhindert.
Sperrbit-Unterstützung in Pragma Mit #pragma config können nun die AVR-Sperrbits sowie die anderen Konfigurationsbits angegeben werden. Überprüfen Sie die Datei avr_chipinfo.html file (siehe oben) für die mit diesem Pragma zu verwendenden Einstellungs-/Wertpaare.
Neu Geräteunterstützung Für die folgenden Teile ist Support verfügbar: AVR28DAl28, AVR64DAl28, AVR32DAl28 und AVR48DAl28.
3.11. Version 2.05
Mehr für Ihr Geld Die macOS-Version dieses Compilers und Lizenzmanagers ist jetzt eine 64-Bit-Anwendung. Dadurch wird sichergestellt, dass der Compiler auf neueren Versionen von macOS ohne Warnungen installiert und ausgeführt wird.
Const-Objekte im Programmspeicher Der Compiler kann jetzt const-qualifizierte Objekte im Programm-Flash-Speicher platzieren, anstatt diese im RAM zu speichern. Der Compiler wurde so geändert, dass cons t-qualifizierte globale Daten im Programm-Flash-Speicher gespeichert werden und auf diese Daten direkt und indirekt mit den entsprechenden Programmspeicheranweisungen zugegriffen werden kann. Diese neue Funktion ist standardmäßig aktiviert, kann aber mit der Option -mno-const-data-in-progmem deaktiviert werden. Für avrxmega3- und avrtiny-Architekturen ist diese Funktion nicht erforderlich und immer deaktiviert, da der Programmspeicher für diese Geräte in den Datenadressraum abgebildet wird.
Standard kostenlos Nicht lizenzierte (kostenlose) Versionen dieses Compilers ermöglichen jetzt Optimierungen bis einschließlich Level 2. Dies ermöglicht eine ähnliche, wenn auch nicht identische Ausgabe wie zuvor mit einer Standardlizenz.
Willkommen AVRASM2 Der AVRASM2-Assembler für 8-Bit-Geräte ist jetzt im XC8-Compiler-Installationsprogramm enthalten. Dieser Assembler wird vom XC8-Compiler nicht verwendet, ist aber für Projekte verfügbar, die auf handgeschriebenen Assemblerquellen basieren.
Neu Geräteunterstützung Für die folgenden Teile ist Support verfügbar: ATMEGA1608, ATMEGA 1609, ATMEGA808 und ATMEGA809.
3.12. Version 2.00
Fahrer auf höchstem Niveau Ein neuer Treiber namens xc8 -cc sitzt jetzt über dem vorherigen avr-gcc-Treiber und dem xc8-Treiber und kann den entsprechenden Compiler basierend auf der Auswahl des Zielgeräts aufrufen. Dieser Treiber akzeptiert Optionen im GCC-Stil, die entweder übersetzt oder an den ausgeführten Compiler weitergegeben werden. Dieser Treiber ermöglicht die Verwendung eines ähnlichen Optionssatzes mit ähnlicher Semantik mit jedem AVR- oder PIC-Ziel und ist daher die empfohlene Methode zum Aufrufen des Compilers. Bei Bedarf kann der alte avr-gcc-Treiber direkt mit den Optionen im alten Stil aufgerufen werden, die er in früheren Compilerversionen akzeptiert hat.
Gemeinsame C-Schnittstelle Dieser Compiler kann jetzt der MPLAB Common C Interface entsprechen, sodass Quellcode einfacher auf alle MPLAB XC-Compiler portiert werden kann. Die Option -mext=cci fordert diese Funktion an und ermöglicht eine alternative Syntax für viele Spracherweiterungen.
Neuer Bibliothekarfahrer A Der neue Bibliothekartreiber ist über dem bisherigen PIC-Bibliothekar und dem AVR-Bibliothekar avr-ar positioniert. Dieser Treiber akzeptiert Optionen im GCC-Archiver-Stil, die entweder übersetzt oder an den ausgeführten Bibliothekar weitergegeben werden. Der neue Treiber ermöglicht die Verwendung eines ähnlichen Satzes von Optionen mit ähnlicher Semantik zum Erstellen oder Bearbeiten beliebiger PIC- oder AVR-Bibliotheken. file und ist daher die empfohlene Methode zum Aufrufen des Bibliothekars. Falls für ältere Projekte erforderlich, kann der vorherige Bibliothekar direkt mit den alten Optionen aufgerufen werden, die er in früheren Compilerversionen akzeptierte.
Migrationsprobleme
Die folgenden Funktionen werden jetzt vom Compiler anders gehandhabt. Diese Änderungen können eine Anpassung Ihres Quellcodes erforderlich machen, wenn Sie Code auf diese Compilerversion portieren. Die Versionsnummer in den Unterüberschriften gibt die erste Compilerversion an, die die folgenden Änderungen unterstützt.
4.1. Version 2.39 (Funktionale Sicherheitsfreigabe)
Keiner.
4.2. Version 2.36 Keiner.
4.3. Fassung 2.35
Handhabung von String-to-Basen (XC8-2420) Um Konsistenz mit anderen XC-Compilern zu gewährleisten, Funktionen wie strtol() usw. versuchen nicht mehr, eine Eingabezeichenfolge zu konvertieren, wenn die angegebene Basis größer als 36 ist, und setzen stattdessen errno auf EINVAL. Der C-Standard spezifiziert nicht das Verhalten von die Funktionen, wenn dieser Basiswert überschritten wird.
Unangemessene Geschwindigkeitsoptimierungen Bei der Auswahl von Optimierungen der Ebene 3 (-03) wurden prozedurale Abstraktionsoptimierungen aktiviert. Diese Optimierungen reduzieren die Codegröße auf Kosten der Codegeschwindigkeit und hätten daher nicht durchgeführt werden sollen. Projekte, die diese Optimierungsstufe verwenden, sehen möglicherweise Unterschiede in der Codegröße und Ausführungsgeschwindigkeit, wenn sie mit dieser Version erstellt werden.
Bibliotheksfunktion Der Code für viele der Standard-C-Bibliotheksfunktionen stammt jetzt aus der Unified Standard Library von Microchip, die unter Umständen ein anderes Verhalten aufweisen kann als das der früheren avr-libc-Bibliothek. Zum Bspample, es ist nicht mehr notwendig, die 1printf flt-Bibliothek (Option -1printf_flt) einzubinden, um die formatierte I0-Unterstützung für Float-Formatspezifizierer zu aktivieren. Die intelligenten 10-Funktionen der Microchip Unified Standard Library machen diese Option überflüssig. Darüber hinaus ist die Verwendung von Routinen mit der Endung _P für String- und Speicherfunktionen (z. B. strcpy_P ( ) usw.), die mit konstanten Strings im Flash arbeiten, nicht mehr erforderlich. Die Standard-C-Routinen (z. B. strcpy 0 ) funktionieren mit solchen Daten ordnungsgemäß, wenn die Funktion „const-data-in-program-memory“ aktiviert ist.
4.4. Version 2.32
Keiner.
4.5. Version 2.31
Keiner.
4.6. Version 2.30
Keiner.
4.1. Version 2.29 (Funktionale Sicherheitsfreigabe)
Keiner.
4.2. Version 2.20
Geändertes DFP-Layout Der Compiler geht jetzt von einem anderen Layout aus, das von DFPs (Device Family Packs) verwendet wird. Dies bedeutet, dass ein älteres DFP möglicherweise nicht mit dieser Version funktioniert und ältere Compiler die neuesten DFPs nicht verwenden können.
4.3. Version 2.19 (Funktionale Sicherheitsfreigabe)
Keiner.
4.4. Version 2.10 Keine
4.5. Version 2.05
Konstante Objekte im Programmspeicher Beachten Sie, dass die standardmäßig als Konstante qualifizierten Objekte im Programmspeicher abgelegt und aufgerufen werden (wie hier beschrieben). Dies wirkt sich auf die Größe und Ausführungsgeschwindigkeit Ihres Projekts aus, sollte aber den RAM-Verbrauch reduzieren. Diese Funktion kann bei Bedarf mit der Option -mnocons t-data-in-pr ogmem deaktiviert werden.
4.6. Version 2.00
Konfigurationssicherungen Die Gerätekonfigurationssicherungen können nun mit einem Konfigurationspragma programmiert werden, gefolgt von Einstellungs-Wert-Paaren, um den Sicherungsstatus anzugeben, z. B. #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3
Absolute Objekte und Funktionen Objekte und Funktionen können nun mit dem CCI an bestimmten Adressen im Speicher abgelegt werden _at (Adresse) Spezifizierer, z. B.ampauf:
wenn einschließen
int foobar bei (0)0300100);
char at(0x250) getID(int offset) ( Das Argument dieses Spezifizierers muss eine Konstante sein, die die Adresse darstellt, an der das erste Byte oder die erste Anweisung platziert wird. RAM-Adressen werden durch einen Offset von Ox800000 angegeben. Aktivieren Sie das CCI, um diese Funktion zu verwenden.
Neue Syntax für Interruptfunktionen Der Compiler akzeptiert jetzt den CCI _interrupt (Nummer) Spezifizierer, um anzugeben, dass C-Funktionen Interrupt-Handler sind. Der Spezifizierer nimmt eine Interrupt-Nummer an, z. B.ampauf:
Behobene Probleme
Im Folgenden sind die Korrekturen aufgeführt, die am Compiler vorgenommen wurden. Diese können Fehler im generierten Code beheben oder die Funktionsweise des Compilers so ändern, wie es beabsichtigt oder im Benutzerhandbuch angegeben ist. Die Versionsnummer in den Unterüberschriften gibt die erste Compilerversion an, die Korrekturen für die folgenden Probleme enthält. Die eingeklammerten Beschriftungen im Titel sind die Identifikation des Problems in der Tracking-Datenbank. Diese können hilfreich sein, wenn Sie sich an den Support wenden müssen.
Beachten Sie, dass einige gerätespezifische Probleme im Device Family Pack (DR)), die mit dem Gerät verknüpft sind. Informationen zu Änderungen an DFPs und zum Herunterladen der neuesten Pakete finden Sie im MPLAB Pack Manager.
5.1. Version 2.39 (Funktionale Sicherheitsfreigabe)
Keiner.
5.2. Version 2.36
Fehler beim Verzögern (XCS–2774) Kleinere Änderungen in den standardmäßigen Optimierungen im freien Modus verhinderten die konstante Faltung von Operandenausdrücken in die integrierten Verzögerungsfunktionen, was dazu führte, dass diese als Nicht-Konstanten behandelt wurden und den Fehler auslösten. „built in_avr_delay_cycles“ erwartet eine ganzzahlige Konstante zur Kompilierungszeit.
5.3. Version 2.35
Angrenzend Zuweisung mit _at (XCS–2653) Die zusammenhängende Zuordnung mehrerer Objekte in einem Abschnitt mit gleichem Namen und Verwendung von _at() funktionierte nicht korrekt. Zum Beispielampauf:
const char arrl[ ] Attribut (Abschnitt(.mysec“) bei (0x500) = (OxAB, OxCD);
const char arr2[ ] Attribut (Abschnitt r.mysec”) = (OxEF, OxFE);
hätte arr2 direkt nach arri platzieren sollen.
Festlegen von Abschnittsanfangsadressen (XCS–2650) Die Die Option -wl, –section-start konnte Abschnitte nicht an der angegebenen Startadresse platzieren. Dieses Problem wurde für alle benutzerdefinierten Abschnitte behoben. Es funktioniert jedoch nicht für Standardabschnitte wie . text oder . bss, die mit einem -WL, -T-Option.
Linker stürzt beim Entspannen ab (XCS–2647) Wann die -mrelax-Optimierung war aktiviert und es gab Code- oder Datenabschnitte, die nicht in den verfügbaren Speicher passten, der Linker stürzte ab. Jetzt werden in einem solchen Fall stattdessen Fehlermeldungen ausgegeben.
Nein, nein–fallen–zurück (XCS–2646) Die –nofallback-Option wurde nicht korrekt implementiert oder dokumentiert. Dies kann jetzt ausgewählt werden, um sicherzustellen, dass der Compiler nicht auf eine niedrigere Optimierungseinstellung zurückfällt, wenn der Compiler nicht lizenziert ist, sondern stattdessen einen Fehler ausgibt.
Unangemessene Geschwindigkeitsoptimierungen (XCS–2637) Bei der Auswahl von Optimierungen der Ebene 3 (-03) wurden prozedurale Abstraktionsoptimierungen aktiviert. Diese Optimierungen reduzieren die Codegröße auf Kosten der Codegeschwindigkeit und hätten daher nicht durchgeführt werden sollen.
Ungültiger EEPROM-Zugriff (XCS–2629) Die Routine eeprom_read_block funktionierte auf Xmega-Geräten nicht richtig, wenn die Option -mconst-data-in-progmem aktiviert war (was der Standardzustand ist), was dazu führte, dass der EEPROM-Speicher nicht richtig gelesen wurde.
Ungültige Speicherzuordnung (X03-2593, XC8-2651) Wenn die Linkeroption -Ttext oder -Tdata (z. B.ampBei der Angabe einer mit der Treiberoption -wl übergebenen Datei (le) wurde der entsprechende Text-/Datenbereichsursprung aktualisiert; die Endadresse wurde jedoch nicht entsprechend angepasst, was dazu führen konnte, dass der Bereich den Speicherbereich des Zielgeräts überschritt.
Absturz mit überattributierter Funktion (XC8-2580) Der Compiler stürzte ab, wenn eine Funktion mit mehr als einem der Attribute „Interrupt“, „Signal“ oder „NMI“ deklariert wurde, z. B. _attribute_ ( ( Signal , Interrupt ) ).
Ungültiger ATtiny-Interrupt-Code (XC8-2465) Wenn für ATtiny-Geräte gebaut wurde und die Optimierungen deaktiviert waren (-00), haben Interrupt-Funktionen möglicherweise Operanden-Out-of-Range-Assembler-Meldungen ausgelöst.
Optionen werden nicht durchgereicht (XC8-2452) Bei Verwendung der -wl Option mit mehreren, durch Kommas getrennten Linker-Optionen, wurden nicht alle Linker-Optionen an den Linker übergeben.
Fehler beim indirekten Lesen des Programmspeichers (X03-2450) In einigen Fällen erzeugte der Compiler ein interner Fehler (nicht erkennbarer Insn) beim Lesen eines Zwei-Byte-Wertes von einem Zeiger in den Programmspeicher
5.4. Version 2.32
Zweiter Zugriff auf die Bibliothek schlägt fehl (X03-2381) Der zweite Aufruf der Windows-Version des Bibliotheksarchivierungsprogramms xc8-ar.exe zum Zugriff auf ein vorhandenes Bibliotheksarchiv ist möglicherweise mit der Fehlermeldung „Umbenennen nicht möglich“ fehlgeschlagen.
5.5. Version 2.31
Unerklärt Compilerfehler (XC8-2367) Beim Laufen auf Windows Auf Plattformen, bei denen das temporäre Systemverzeichnis auf einen Pfad eingestellt war, der einen Punkt (.) enthielt, konnte der Compiler möglicherweise nicht ausgeführt werden.
5.6. Version 2.30
Globale Beschriftungen nach dem Skizzieren falsch platziert (XC8-2299) Handgeschriebener Assemblercode, der globale Beschriftungen innerhalb von Montagesequenzen, die durch prozedurale Abstraktion ausgeklammert wurden, wurden möglicherweise nicht richtig neu positioniert.
Ein entspannender Crash (XC8-2287) Mit dem -mentspannen Option hat möglicherweise zum Absturz des Linkers geführt, wenn Tail-Jump-Relaxationsoptimierungen versuchten, Ret-Anweisungen zu entfernen, die sich nicht am Ende eines Abschnitt.
Absturz beim Optimieren von Labels als Werte (XC8-2282) Code mit der Funktion „Labels als Werte“ GNU C Die Spracherweiterung könnte einen Absturz der Optimierungen der prozeduralen Abstraktion mit einem Fixup-Fehler bei den umrissenen VMA-Bereichsspannen verursacht haben.
Nicht so const (XC8-2271) Die Prototypen für strstr () und andere Funktionen von Geben Sie den nicht standardmäßigen const-Qualifizierer für zurückgegebene Zeichenfolgenzeiger nicht mehr an, wenn die Inprogmem-Funktion -mconst-data- deaktiviert ist. Beachten Sie, dass diese Funktion bei avrxmega3- und avrtiny-Geräten dauerhaft aktiviert ist.
Verlorene Initialisierer (XC8-2269) Wenn mehr als eine Variable in einer Übersetzung Einheit wurde in einem Abschnitt platziert (mit Abschnitt or Attribut ( (Abschnitt) )) und die erste derartige Variable war mit Null initialisiert oder hatte keinen Initialisierer, gingen Initialisierer für andere Variablen in derselben Übersetzungseinheit, die im selben Abschnitt platziert waren, verloren.
5.1. Version 2.2 9 (Funktionale Sicherheitsversion) Keine.
5.2. Version 2.20
Fehler bei langen Befehlen (XC8-1983) Bei Verwendung eines AVR-Ziels wurde der Compiler möglicherweise mit einem „Lilt nicht gefunden“-Fehler angehalten, wenn die Befehlszeile extrem lang war und Sonderzeichen wie Anführungszeichen, Backslashs usw. enthielt.
Nicht zugewiesener Rodata-Abschnitt (XC8-1920) Der AVR-Linker konnte beim Erstellen für avrxmega3- und avrtiny-Architekturen keinen Speicher für benutzerdefinierte Rodata-Abschnitte zuweisen, was möglicherweise zu Speicherüberlappungsfehlern führte
5.3. Version 2.19 (Funktionale Sicherheitsfreigabe)
Keiner.
5.4. Version 2.10
Verschiebungsfehler (XC8-1891) Der am besten geeignete Allocator hinterließ nach der Linker-Relaxation Speicherlücken zwischen den Abschnitten. Abgesehen von der Speicherfragmentierung erhöhte dies die Möglichkeit von Linkerverschiebungsfehlern im Zusammenhang mit PC-relativen Sprüngen oder Aufrufen, die außerhalb des zulässigen Bereichs liegen.
Instruktionen werden nicht durch Relaxation umgewandelt (XC8-1889) Linker-Relaxation trat nicht für Sprung- oder Call-Instruktionen auf, deren Ziele erreichbar werden, wenn sie relaxiert werden.
Fehlen Funktionalität (XC8E-3 ) Mehrere Definitionen aus , wie clock_div_t und clock_presc ale_set() , wurden für Geräte wie ATmega324PB, ATmega328PB, ATtiny441 und ATtiny841 nicht definiert.
Fehlende Makros Die Präprozessormakros _XC8_MODE_, XC8VERSION, XC und xc8 wurden vom Compiler nicht automatisch definiert. Diese sind nun verfügbar.
5.5. Version 2.05
Interner Compiler-Fehler (XC8-1822) Beim Bauen unter Windows wurde beim Optimieren des Codes möglicherweise ein interner Compiler-Fehler erzeugt.
RAM-Überlauf nicht erkannt (XC8-1800, XC8-1796) Programme, die den verfügbaren RAM überschritten, wurden in einigen Situationen vom Compiler nicht erkannt, was zu einem Laufzeitcodefehler führte.
Ausgelassener Flash-Speicher (XC8-1792) Bei avrxmega3- und avrtiny-Geräten wurden Teile des Flash-Speichers möglicherweise von der MPLAB X IDE nicht programmiert.
Fehler beim Ausführen von main (XC8-1788) In einigen Situationen, in denen im Programm keine globalen Variablen definiert waren, wurde der Laufzeit-Startcode nicht beendet und die main()-Funktion wurde nie erreicht.
Falsche Speicherinformationen (XC8-1787) Für die Geräte avrxmega3 und avrtiny meldete das Programm avr-size, dass nur Mad-Daten RAM statt Programmspeicher verbrauchten.
Falsches Lesen des Programmspeichers (XC8-1783) Projekte, die für Geräte kompiliert wurden, deren Programmspeicher in den Datenadressraum abgebildet ist und die Objekte mit dem Makro/Attribut PROGMEM definieren, haben diese Objekte möglicherweise von der falschen Adresse gelesen.
Interner Fehler mit Attributen (XC8-1773) Ein interner Fehler ist aufgetreten, wenn Sie Zeigerobjekte mit den Token _at 0 oder attribute() zwischen dem Zeigernamen und dem dereferenzierten Typ definiert haben, z. B.ample, char * _at (0x800150) cp; Beim Auftreten eines solchen Codes wird jetzt eine Warnung ausgegeben.
Fehler beim Ausführen des Hauptprogramms (XC8-1780, XC8-1767, XC8-1754) Die Verwendung von EEPROM-Variablen oder das Definieren von Sicherungen mithilfe des Konfigurationspragmas könnte eine falsche Dateninitialisierung verursacht und/oder die Programmausführung im Startcode zur Laufzeit blockiert haben, bevor main 0 erreicht wurde.
Sicherungsfehler bei Tiny Devices (XC8-1778, XC8-1742) Die Geräte attiny4/5/9/10120140 hatten eine falsche Sicherungslänge im Header angegeben files, die zu Linkerfehlern führen, wenn versucht wird, Code zu erstellen, der Fuses definiert.
Segmentierungsfehler (XC8-1777) Ein zeitweise auftretender Segmentierungsfehler wurde behoben.
Assembler-Absturz (XC8-1761) Der avr-as-Assembler ist möglicherweise abgestürzt, als der Compiler unter Ubuntu 18 ausgeführt wurde.
Objekte nicht gelöscht (XC8-1752) Nicht initialisierte statische Speicherdauerobjekte wurden möglicherweise nicht vom Runtime-Startcode gelöscht.
Widersprüchliche Gerätespezifikation ignoriert (XC8-1749) Die Der Compiler generierte keinen Fehler, wenn mehrere Gerätespezifikationsoptionen verwendet wurden und unterschiedliche Geräte anzeigten.
Speicherbeschädigung durch Heap (XC8-1748) The Das Symbol _heap_start wurde falsch gesetzt, was dazu führte, dass gewöhnliche Variablen möglicherweise durch den Heap beschädigt wurden.
Linkerverschiebungsfehler (XC8-1739) Möglicherweise wurde ein Linker-Umlagerungsfehler ausgegeben, wenn der Code ein rjmn oder rcall mit einem genau 4 KB entfernten Ziel enthielt.
5.6. Version 2.00 Keine.
Bekannte Probleme
Im Folgenden sind Einschränkungen im Betrieb des Compilers aufgeführt. Dies können allgemeine Codierungsbeschränkungen oder Abweichungen von Informationen im Benutzerhandbuch sein. Die eingeklammerten Beschriftungen in der Überschrift sind die Identifikation des Problems in der Tracking-Datenbank. Dies kann hilfreich sein, wenn Sie sich an den Support wenden müssen. Bei Elementen ohne Beschriftung handelt es sich um Einschränkungen, die die Vorgehensweise beschreiben und wahrscheinlich dauerhaft in Kraft bleiben.
6.1. MPLAB X-IDE Integration
MPLAB IDE-Integration Wenn der Compiler von MPLAB IDE aus verwendet werden soll, müssen Sie MPLAB IDE vor der Installation des Compilers installieren.
6.2. Codegenerierung
Falsch Initialisierung (XC8-2679) Es besteht eine Diskrepanz zwischen dem Ort, an dem die Anfangswerte für einige globale/statische Objekte in Byte-Größe im Datenspeicher abgelegt werden, und dem Ort, an dem zur Laufzeit auf die Variablen zugegriffen wird.
strtod setzt endptr falsch (XC8-2652) In Fällen, in denen eine Subjektzeichenfolge zur Konvertierung durch strtod() eine scheinbare Gleitkommazahl im Exponentialformat enthält und nach einem e-Zeichen ein unerwartetes Zeichen steht, zeigt die endptr-Adresse, falls angegeben, auf das Zeichen nach dem e und nicht auf das e selbst. Zum Beispielample: strtod („100exy“, endptr);
führt dazu, dass endptr auf das Zeichen x zeigt.
Ungültige indirekte Funktionsaufrufe (X03-2628) In einigen Fällen können Funktionsaufrufe, die über einen als Teil einer Struktur gespeicherten Funktionszeiger erfolgen, fehlschlagen.
strtof gibt Null für hexadezimale Gleitkommazahlen zurück (XC8-2626) Die Bibliotheksfunktionen strtof () und scanf () konvertieren eine hexadezimale Gleitkommazahl, die keinen Exponenten angibt, immer in Null. Zum Beispielample: strtof („Oxl“, &endptr); gibt den Wert 0 zurück, nicht 1.
Ungenaue Stack Advisor-Nachrichten (XC8-2542, XC8-2541) In einigen Fällen wird die Stack-Advisor-Warnung bezüglich Rekursion oder verwendetem unbestimmtem Stack (möglicherweise durch die Verwendung von alloca()) nicht ausgegeben.
Fehler mit doppeltem Interrupt-Code (XC8-2421) Wenn mehr als eine Interrupt-Funktion denselben Körper hat, kann der Compiler die Ausgabe für eine Interrupt-Funktion haben, die die andere aufruft. Dies führt dazu, dass alle durch Aufrufe blockierten Register unnötigerweise gespeichert werden und die Interrupts aktiviert werden, noch bevor der Epilog des aktuellen Interrupt-Handlers ausgeführt wurde, was zu einem Codefehler führen könnte.
konst Objekte nicht im Programmspeicher (XC8-2408) Bei avrxmega3- und avrtiny-Projekten werden nicht initialisierte Konstantenobjekte in den Datenspeicher gelegt, auch wenn eine Warnung darauf hinweist, dass sie in den Programmspeicher gelegt wurden. Dies hat keine Auswirkungen auf Geräte, deren Programmspeicher nicht in den Datenspeicherbereich abgebildet ist, und auch auf Objekte, die initialisiert werden.
Fehlerhafte Ausgabe mit ungültigem DFP-Pfad (XCS-2376) Wenn der Compiler mit einem ungültigen DFP-Pfad und einer "Spezifikation" aufgerufen wird file für das ausgewählte Gerät vorhanden ist, meldet der Compiler das fehlende Gerätefamilienpaket nicht und wählt stattdessen die „Spezifikation“ aus. file, was dann zu einer ungültigen Ausgabe führen kann. Die 'Spezifikation' files sind möglicherweise nicht auf dem neuesten Stand der verteilten DFPs und sollten nur für interne Compiler-Tests verwendet werden.
Speicherüberlappung unentdeckt (XC8-1966) Der Compiler erkennt nicht die Speicherüberlappung von Objekten, die an einer Adresse absolut gemacht wurden (über _at 0 ), und anderen Objekten, die das _ verwenden.Sekteion ()-Spezifizierer und die mit der gleichen Adresse verknüpft sind.
Fehler bei Bibliotheksfunktionen und _memx (XC8-1763) Aufgerufene libgcc-Float-Funktionen mit einem Argument im _memx-Adressraum können fehlschlagen. Beachten Sie, dass Bibliotheksroutinen von einigen C-Operatoren aufgerufen werden, z. B.ample, folgender Code ist betroffen: return regFloatVar > memxFloatVar;
Eingeschränkte libgcc-Implementierung (AVRTC-731) Für die ATTiny4/5/9/10/20/40-Produkte, die Standardimplementierung der C/Math-Bibliothek in libgcc ist sehr eingeschränkt oder nicht vorhanden.
Einschränkungen des Programmspeichers (AVRTC-732) Programmspeicherabbilder über 128 KB werden von der Toolchain unterstützt. Es gibt jedoch bekannte Fälle, in denen der Linker ohne Relaxation und ohne eine hilfreiche Fehlermeldung abbricht, anstatt die erforderlichen Funktionsstümpfe zu generieren, wenn die Option -mrelax verwendet wird.
Namensraumbeschränkungen (AVRTC-733) Benannte Adressräume werden von der Toolchain unterstützt, vorbehaltlich der Einschränkungen, die im Abschnitt Special Type Qualifiers des Benutzerhandbuchs erwähnt werden.
Zeitzonen Die Bibliotheksfunktionen gehen von GMT aus und unterstützen keine lokalen Zeitzonen. Daher gibt local.time 0 dieselbe Zeit zurück wie gmtime ( ), z. B.ample.
Dokumente / Ressourcen
![]() |
MICROCHIP MPLAB XC8 C Compiler Version 2.39 – Versionshinweise für AVR MCU [pdf] Benutzerhandbuch MPLAB XC8 C Compiler Version 2.39 Versionshinweise für AVR MCU, MPLAB XC8 C, Compiler Version 2.39 Versionshinweise für AVR MCU, Versionshinweise für AVR MCU |
![]() |
MICROCHIP MPLAB XC8 C Compiler Version 2.39 – Versionshinweise für AVR MCU [pdf] Benutzerhandbuch MPLAB XC8 C Compiler Version 2.39 Versionshinweise für AVR MCU, MPLAB XC8 C, Compiler Version 2.39 Versionshinweise für AVR MCU, Hinweise für AVR MCU |
![]() |
MICROCHIP MPLAB XC8 C-Compiler [pdf] Benutzerhandbuch MPLAB XC8 C-Compiler, MPLAB XC8 C, Compiler |






