MPLAB® XC8 C Compiler Version 2.41 Versionshinweise für AVR® MCU
Bedienungsanleitung
MPLAB XC8 C Compiler-Entwicklungssoftware
DIESES DOKUMENT ENTHÄLT WICHTIGE INFORMATIONEN IN BEZUG AUF DEN MPLAB XC8 C-COMPILER, WENN MICROCHIP AVR-GERÄTE ZIELGERICHTET WERDEN.
BITTE LESEN SIE ES, BEVOR SIE DIESE SOFTWARE AUSFÜHREN. WENN SIE DEN COMPILER FÜR 8-BIT-PIC-GERÄTE VERWENDEN, SIEHE DIE MPLAB XC8 C-COMPILER-VERSIONSHINWEISE FÜR DAS PIC-DOKUMENT.
Überview
1.1. Einleitung
Diese Version des Microchip MPLAB® XC8 C-Compilers enthält mehrere neue Funktionen und Fehlerbehebungen.
1.2. Erstellungsdatum
Das offizielle Erstellungsdatum dieser Compiler-Version ist der 8. Februar 2023.
1.3. Vorherige Version
Die vorherige Version des MPLAB XC8 C-Compilers war 2.40, die am 3. Juli 2022 erstellt wurde.
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
Die Tools MPLAB XC8 C Compiler for AVR MCUs werden unter der GNU General Public License (GPL) geschrieben und vertrieben, was bedeutet, dass der Quellcode frei verteilt und der Öffentlichkeit zur Verfügung gestellt wird.
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, einschließlich 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 codesigniert. Binärdateien für macOS wurden codesigniert und notariell beglaubigt. Der MPLAB XC Network License Server ist für eine Vielzahl von 64-Bit-Betriebssystemen verfügbar, einschließlich Microsoft Windows 10 und höher; Ubuntu 18.04 und höher; oder macOS 10.15 und höher. Der Server kann auch auf verschiedenen anderen Betriebssystemen ausgeführt werden, darunter Windows Server, Linux-Distributionen wie Oracle® Enterprise Linux® und Red Hate Enterprise Linux sowie ältere Versionen von unterstützten Betriebssystemen. Der MPLAB XC Network License Server wird jedoch nicht auf diesen Betriebssystemen getestet. Der MPLAB XC Network License Server kann auf virtuellen Maschinen des unterstützten Betriebssystems mit einer Virtual Machine-Lizenz für Netzwerklizenzen (SW006021-VM) ausgeführt werden. Alle 32-Bit-Versionen des MPLAB XC Network Server werden ab Version 3.00 eingestellt.
Unterstützte Geräte
Dieser Compiler unterstützt alle verfügbaren 8-Bit-AVR-MCU-Geräte zum Zeitpunkt der Veröffentlichung. Siehe (im Verzeichnis des Compilers) für eine Liste aller unterstützten Geräte. Diese Dateien werden auch aufgelistet
avr_chipinfo.html doc Konfigurationsbiteinstellungen für jedes Gerät.
1.7. 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 im Vergleich zum kostenlosen Produkt ein höheres Maß an Optimierung. Ein unlizenzierter Compiler kann unbegrenzt ohne Lizenz 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 eine beliebige Optimierungsstufe auswählen und alle Compiler-Funktionen nutzen. Diese Version des MPLAB XC Functional Safety 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.8. 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, stellen Sie sicher, dass Sie die neueste MPLAB X IDE Version 5.0 oder höher installieren, bevor Sie dieses Tool installieren. Beenden Sie die IDE, bevor Sie den Compiler installieren. Führen Sie z. B. die (Windows), (Linux) oder (macOS) .exe .run .app Compiler-Installationsanwendung aus und folgen Sie den Anweisungen auf dem Bildschirm. XC8-1.00.11403-windows.exe Das Standard-Installationsverzeichnis wird empfohlen. Wenn Sie Linux verwenden, müssen Sie den Compiler über ein Terminal und von einem Root-Konto aus installieren. Installieren Sie mit einem 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 sich dafür entscheiden, den Compiler unter der Evaluierungslizenz auszuführen, erhalten Sie jetzt während der Kompilierung eine Warnung, wenn Sie sich innerhalb von 14 Tagen nach Ablauf Ihres Evaluierungszeitraums befinden. Die gleiche Warnung wird ausgegeben, wenn Sie innerhalb von 14 Tagen nach dem Ende Ihres HPA-Abonnements sind.
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.8.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 %temp% in den Ausführen-Befehl ein (Windows-Logo-Taste + R).
Dadurch wird ein Datei-Explorer-Dialog geöffnet, der dieses Verzeichnis anzeigt und Ihnen ermöglicht, den Pfad dieses Ordners zu bestimmen.
1.9. 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, enthält das MPLAB® XC8 C Compiler User's Guide for AVR® MCU Informationen zu den Compileroptionen und -funktionen, die für diese Architektur gelten.

1.10. Kundenbetreuung
Microchip freut sich über Fehlerberichte, Vorschläge oder Kommentare zu dieser Compiler-Version. Bitte richten Sie Fehlerberichte oder Funktionsanfragen über das Support-System.
Aktualisierungen der Dokumentation
Für Online- und aktuelle Versionen der MPLAB XC8-Dokumentation besuchen Sie bitte die Technische Online-Dokumentation von Microchip webGrundstück. Neue oder aktualisierte AVR-Dokumentation in dieser Version:
- MPLAB® XC8 C Compiler Benutzerhandbuch für AVR® MCU (Revision G)
- AVR® GNU Toolchain zu MPLAB® XC8 Migrationsleitfaden (Revision A)
- Hexmate-Benutzerhandbuch (Revision B)
Der AVR® GNU Toolchain to MPLAB® XC8 Migration Guide beschreibt die Änderungen am Quellcode und die Build-Optionen, die möglicherweise erforderlich sind, wenn Sie sich entscheiden, ein C-basiertes Projekt von der AVR 8-Bit GNU Toolchain auf den Microchip MPLAB XC8 C Compiler zu migrieren. 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 MPLAB® XC8 C Compiler User's Guide for AVR® MCU enthalten. Gerätespezifische Bibliotheksinformationen sind weiterhin in diesem Compiler-Handbuch enthalten.
Wenn Sie gerade erst mit 8-Bit-Geräten und dem MPLAB XC8 C Compiler beginnen, finden Sie im MPLAB® XC8 Benutzerhandbuch für Embedded Engineers – AVR® MCUs (DS50003108) Informationen zum Einrichten von Projekten in der MPLAB X IDE und zum Schreiben von Code für Ihre erstes MPLAB XC8 C-Projekt. Dieses Handbuch wird jetzt mit dem Compiler verteilt.
Das Hexmate-Benutzerhandbuch ist für Benutzer gedacht, die Hexmate als eigenständige Anwendung ausführen.
Was ist neu
Das Folgende sind neue AVR-Zielfunktionen, die der Compiler jetzt unterstützt. Die Versionsnummer in den Untertiteln gibt die erste Compiler-Version an, die die folgenden Funktionen unterstützt.
3.1. Version 2.41
Bootrow-Unterstützung (XC8-3053) Der Compiler platziert den Inhalt aller Abschnitte mit einem Präfix an der.bootrow-Adresse 0x860000 in der HEX-Datei. Diese Abschnitte werden für den BOOTROW-Speicher verwendet, der für die Speicherung von Schlüsseln und anderen sicheren Informationen entwickelt wurde, auf die nur ein Bootloader zugreifen sollte.
Eliminierung redundanter Rückgaben (XC8-3048) Der Compiler eliminiert jetzt redundante Anweisungen in ret-Funktionen mit einem Endsprung, wenn benutzerdefinierte Linker-Skripte verwendet werden. Dies ist eine ähnliche Optimierung wie die zuvor durchgeführte, aber sie wird jetzt für alle verwaisten Abschnitte durchgeführt, selbst wenn ein benutzerdefiniertes Linker-Skript verwendet wird und das am besten passende Zuordnungsschema nicht im Spiel ist. Änderung des Zeittyps (XC8-2982, 2932) Der Typ der C99-Standardbibliothek wurde von time_t in einen Typ geändert, was Verbesserungen der Codegröße bei einigen zeitbezogenen Long-Long-Funktionen bietet, wie z. unsigned long mktime()
New nop (XC8-2946, 2945) Das Makro wurde hinzugefügt. Dieses Makro fügt ein no-NOP() ein nop-Operationsanweisung in die Ausgabe.
Update auf XCLM (XC8-2944) Der mit dem Compiler verwendete Lizenzmanager wurde aktualisiert und reagiert jetzt besser, wenn die Lizenzdetails des Compilers überprüft werden.
TrampOnline-Aufrufe (XC8-2760) Der Compiler kann jetzt Aufrufanweisungen in langer Form durch kürzere relative Aufrufe ersetzen, wenn die relativen Formen der Anweisungen normalerweise außerhalb des Bereichs ihres Ziels liegen würden. In dieser Situation versucht der Compiler, durch Anweisungen zum Aufrufen von rcall eine Anweisung zu ersetzen, die 'trampoline' Ausführung an die gewünschte Adresse, zample: jmp
rcall tramp_foo ; wurde foo genannt
…
rcall tramp_foo
…
tramp_foo:
jmp foo
Diese Optimierung wird zusammen mit ähnlichen Programmablaufoptimierungen durch die Option -mrelax gesteuert.
3.2. Version 2.40
Support für neue Geräte Support ist jetzt für die folgenden AVR-Teile verfügbar: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 und AVR64EA48.
Verbesserte prozedurale Abstraktion Das Optimierungstool für die prozedurale Abstraktion (PA) wurde verbessert, sodass Code, der eine Funktionsaufrufanweisung (/ ) enthält, utliniert werden kann. Dies findet nur dann statt, wenn rcall aufgerufen wird, wenn der Stack nicht verwendet wird, um Argumente an die Funktion zu übergeben oder einen Rückgabewert von ihr zu erhalten. Der Stack wird verwendet, wenn eine Funktion mit einer variablen Argumentliste aufgerufen wird oder wenn eine Funktion aufgerufen wird, die mehr Argumente akzeptiert, als für diesen Zweck vorgesehene Register vorhanden sind. Dieses Feature kann mit der Option deaktiviert werden, oder die prozedurale Abstraktion kann für eine Objektdatei oder Funktion vollständig deaktiviert werden, indem das - bzw. verwendet wird, oder indem das Attribut (Spezifizierer) selektiv mit Funktionen verwendet wird.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa Makro zur Codeabdeckung Der Compiler definiert jetzt das Makro, wenn eine gültige Option __nopa __CODECOV -mcodecov angegeben ist.
Speicherreservierungsoption Der Treiber akzeptiert jetzt die Option xc8-cc -mreserve=space@start:end beim Erstellen für AVR-Ziele. Diese Option reserviert den angegebenen Speicherbereich entweder im Daten- oder im Programmspeicherbereich und verhindert, dass der Linker diesen Bereich mit Code oder Objekten füllt. Intelligenteres Smart IO An den Smart IO-Funktionen wurden mehrere Verbesserungen vorgenommen, einschließlich allgemeiner Anpassungen am printf-Kerncode, Behandlung des %n-Konvertierungsspezifizierers als unabhängige Variante, Einbinden von Vararg-Pop-Routinen bei Bedarf, Verwenden kürzerer Datentypen, wo möglich, für die Handhabung IO-Funktionsargumente und Berücksichtigung von allgemeinem Code in Feldbreite und Präzisionshandhabung. Dies kann zu erheblichen Code- und Dateneinsparungen führen und die Ausführungsgeschwindigkeit von IO erhöhen.
3.3. Version 2.39 (Funktionale Sicherheitsfreigabe)
Netzwerkserverlizenz Diese Version des MPLAB XC8 Functional Safety Compilers unterstützt die Netzwerkserverlizenz.
3.4. Version 2.36
Keiner.
3.5. 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.
Verbesserte Kontextumschaltung Die neue Option -mcall-isr-prologues ändert, wie Interrupt-Funktionen Register beim Eintritt speichern und wie diese Register wiederhergestellt werden, wenn die Interrupt-Routine endet. Sie funktioniert ähnlich wie die Option -mcall-prologues, wirkt sich aber nur auf Interrupt-Funktionen (ISRs) aus.
Noch mehr verbesserte Kontextumschaltung Die neue Option -mgas-isr-prologues steuert den Code für die Kontextumschaltung, der für kleine Interrupt-Serviceroutinen generiert wird. Wenn diese Funktion aktiviert ist, scannt der Assembler die ISR nach Registerverwendung und speichert diese verwendeten Register nur bei Bedarf.
Konfigurierbares Flash-Mapping Einige Geräte der AVR DA- und AVR DB-Familie haben einen SFR (z. B. FLMAP), der angibt, welcher 32k-Abschnitt des Programmspeichers in den Datenspeicher gemappt wird. Die neue Option – mconst-data-in-config-mapped-progmem kann verwendet werden, damit der Linker alle const-qualifizierten Daten in einem 32k-Abschnitt platziert und automatisch das relevante SFR-Register initialisiert, um sicherzustellen, dass diese Daten in den Datenspeicher gemappt werden Raum, wo es effektiver zugegriffen wird.
Microchip Unified Standard Libraries Alle MPLAB XC-Compiler teilen sich eine Microchip Unified Standard Library, die jetzt mit dieser Version von MPLAB XC8 verfügbar ist. Das MPLA# XC8 C Compiler User's Guide for AVO MCU enthält die Dokumentation für diese Standardfunktionen nicht mehr. Diese Informationen finden Sie jetzt im Microchip Unified Standard Library Reference Guide. Beachten Sie, dass einige Funktionen, die zuvor von avr-libc definiert wurden, nicht mehr verfügbar sind. (Siehe Lila-Funktionalität.)
Smart I0 Als Teil der neuen vereinheitlichten Bibliotheken werden I0-Funktionen in den printf- und scanf-Familien jetzt für jeden Build individuell generiert, basierend darauf, wie diese Funktionen im Programm verwendet werden. Dies kann die von einem Programm verwendeten Ressourcen erheblich reduzieren.
Intelligente ICI-Unterstützungsoption Beim Analysieren von Aufrufen intelligenter I0-Funktionen (wie print f () oder scanf ()) kann der Compiler nicht immer aus der Formatzeichenfolge bestimmen oder aus den Argumenten die für den Aufruf erforderlichen Konvertierungsspezifizierer ableiten. Bisher machte der Compiler immer keine Annahmen und stellte sicher, dass voll funktionsfähige 10 Funktionen in das endgültige Programmimage eingebunden wurden. Eine neue Option – msmart-io-format=fmt wurde hinzugefügt, damit der Compiler stattdessen vom Benutzer über die Konvertierungsspezifizierer informiert werden kann, die von intelligenten I0-Funktionen verwendet werden, deren Verwendung mehrdeutig ist, wodurch verhindert wird, dass übermäßig lange 10-Routinen verknüpft werden. (Siehe smart-io-format-Option für weitere Details.)
Benutzerdefinierte Abschnitte platzieren 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 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 z. Texte, . bss oder . Daten, hat der am besten geeignete Zuordner immer noch die vollständige Kontrolle über ihre Platzierung, und die Option hat keine Auswirkung. Verwenden Sie die Option -ton, -Tsection=addr, wie im Benutzerhandbuch beschrieben.
3.6. Version 2.32
Stack-Führung Verfügbar mit einer PRO-Compiler-Lizenz kann die Stack-Führungsfunktion des Compilers verwendet werden, um die maximale Tiefe jedes von einem Programm verwendeten Stapels abzuschätzen. Es erstellt und analysiert den Aufrufgraphen eines Programms, bestimmt die Stack-Nutzung jeder Funktion und erstellt einen Bericht, aus dem die Tiefe der vom Programm verwendeten Stacks abgeleitet werden kann. Diese Funktion wird über die Befehlszeilenoption -mchp-stack-usage aktiviert. Nach der Ausführung wird eine Zusammenfassung der Stack-Nutzung 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, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 und AVR32DB48. Support für zurückgezogene Geräte Für die folgenden AVR-Teile ist kein Support mehr verfügbar: AVR16DA28, AVR16DA32 und AVR16DA48.
3.7. Version 2.31
Keiner.
3.8. 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. Es funktioniert, indem es die Ausgabe der Do-Copy-Daten unterdrückt und bss-Symbole in Assembly löscht 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. Es sind jetzt zusätzliche Optionen verfügbar, um einige dieser Optimierungen zu steuern, insbesondere -f section-anchors, wodurch der Zugriff auf statische Objekte relativ zu einem Symbol ausgeführt werden kann; -mpa-iterations=n, wodurch die Anzahl der prozeduralen Abstraktionsiterationen vom Standardwert 2 geändert werden kann; und -mpa-callcost-shortcall, das eine aggressivere prozedurale Abstraktion durchführt, in der Hoffnung, dass der Linker lange Aufrufe lockern kann. Diese letzte Option kann die Codegröße erhöhen, wenn die zugrunde liegenden Annahmen nicht realisiert werden.
Unterstützung für neue Geräte Unterstützung ist für die folgenden AVR-Teile verfügbar: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 und AVR128DB64. Support für eingefahrene Geräte Für die folgenden AVR-Teile ist kein Support mehr verfügbar: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C und ATA664251.
3.9. Version 2.29 (Funktionale Sicherheitsfreigabe)
Kopfbereich file für eingebaute Compiler Um sicherzustellen, dass der Compiler Sprachspezifikationen wie MISRA entsprechen kann, muss die Header file, die automatisch von eingeschlossen wird , wurde aktualisiert. Dieser Header enthält die Prototypen für alle eingebauten Funktionen, wie etwa builtin_avr_nop ( ) und builtin avr delay_cycles () . Einige eingebaute Funktionen sind möglicherweise nicht MISRA-kompatibel; diese können weggelassen werden, indem man das defineXCSTRICT_MISRA zur Compiler-Kommandozeile hinzufügt. Die Einbauten und ihre Deklarationen wurden aktualisiert, um Typen mit fester Breite zu verwenden.
3.10. Version 2.20
Support für neue Geräte Für die folgenden AVR-Teile ist Support verfügbar: ATTINY1624, ATTINY1626 und ATTINY1627.
Bessere Best-Fit-Zuweisung 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 handhabt die Dateninitialisierung besser.
Verbesserte prozedurale Abstraktion Die Optimierungen der prozeduralen Abstraktion werden jetzt für mehr Codesequenzen durchgeführt. Frühere Situationen, in denen diese Optimierung die Codegröße erhöht haben könnte, wurden behoben, indem der Optimierungscode auf den Garbage-Collection-Prozess des Linkers aufmerksam gemacht wurde.
Fehlen von AVR Assembler Der AVR Assembler ist nicht mehr in dieser Distribution enthalten.
3.11. Version 2.19 (Funktionale Sicherheitsfreigabe)
Keiner.
3.12. Version 2.10
Codeabdeckung Diese Version enthält eine Codeabdeckungsfunktion, die die Analyse des Ausmaßes erleichtert, in dem der Quellcode eines Projekts ausgeführt wurde. Verwenden Sie die Option -mcodecov=ram, um es zu aktivieren. Nach Ausführung des Programms auf Ihrer Hardware werden Code-Coverage-Informationen im Gerät gesammelt, die über ein Code-Coverage-Plugin an die MPLAB X IDE übertragen und dort angezeigt werden können. Informationen zu diesem Plugin finden Sie in der IDE-Dokumentation. Mit dem #pragma nocodecov können nachfolgende Funktionen von der Abdeckungsanalyse ausgeschlossen werden. Idealerweise sollte das Pragma am Anfang hinzugefügt werden file das ganze auszuschließen file aus der Reichweitenanalyse. Alternativ kann das _attribute_ ( (nocodecov) ) verwendet werden, um eine bestimmte Funktion von der Abdeckungsanalyse auszuschließen.
Gerätebeschreibung files Ein neues Gerät file genannt avr_chipinfo . html befindet sich im Verzeichnis docs der Compiler-Distribution. Das file listet alle vom Compiler unterstützten Geräte auf. Klicken Sie auf einen Gerätenamen, und es öffnet sich eine Seite, die alle zulässigen Konfigurationsbiteinstellungen/-werte für dieses Gerät anzeigt, zampLes. Prozedurale Abstraktion
Dem Compiler wurden prozedurale Abstraktionsoptimierungen hinzugefügt, die allgemeine Assemblercodeblöcke durch Aufrufe einer extrahierten Kopie dieses Blocks ersetzen. Diese werden von einer separaten Anwendung durchgeführt, die automatisch vom Compiler aufgerufen wird, wenn Optimierungen der Ebenen 2, 3 oder s ausgewählt werden. Diese Optimierungen reduzieren die Codegröße, aber sie können die Ausführungsgeschwindigkeit und die Debugging-Fähigkeit des Codes verringern. Die prozedurale Abstraktion kann auf höheren Optimierungsstufen mit der Option -mno-pa deaktiviert oder auf niedrigeren Optimierungsstufen (abhängig von Ihrer Lizenz) 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, indem Sie -mno-pa-on-function=function verwenden. Innerhalb Ihres Quellcodes kann die prozedurale Abstraktion für eine Funktion deaktiviert werden, indem Sie das Attribut ( (nopa) ) mit der Definition der Funktion verwenden oder indem Sie nopa verwenden, das zu attribute ( (nopa, noinline) ) erweitert wird und somit verhindert, dass eine Funktion eingebettet wird und es gibt eine Abstraktion von eingebettetem Code.
Sperrbit-Unterstützung in Pragma Die #pragma config kann jetzt verwendet werden, um die AVR-Sperrbits sowie die anderen Konfigurationsbits festzulegen. Überprüfen Sie die avr_chipinfo . html file (oben erwähnt) für die Einstellung/Wert-Paare, die mit diesem Pragma verwendet werden sollen. Unterstützung für neue Geräte Unterstützung ist für die folgenden Teile verfügbar: AVR28DA28, AVR64DA28, AVR32DA 128 und AVR48DA 128.
3.13. Version 2.05
Mehr Bits 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 Flash-Speicher des Programms ablegen, anstatt diese im RAM zu haben. Der Compiler wurde so modifiziert, dass cons t-qualifizierte globale Daten im Programm-Flash-Speicher gespeichert werden und auf diese Daten unter Verwendung der entsprechenden Programmspeicheranweisungen direkt und indirekt 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 dem Datenadressraum zugeordnet wird.
Standard für kostenlose, nicht lizenzierte (kostenlose) Versionen dieses Compilers ermöglichen jetzt Optimierungen bis einschließlich Stufe 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, steht aber für Projekte zur Verfügung, die auf handgeschriebenen Assemblerquellen basieren.
Unterstützung für neue Geräte Unterstützung ist für die folgenden Teile verfügbar: ATMEGA1608, ATMEGA1609, ATMEGA808 und ATMEGA809.
3.14. Version 2.00
Top-Level-Treiber Ein neuer Treiber namens xc8-cc sitzt jetzt über dem vorherigen avr-gcc-Treiber und dem xc8-Treiber und kann je nach Auswahl des Zielgeräts den entsprechenden Compiler 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 Satzes von Optionen 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 alten Optionen aufgerufen werden, die er in früheren Compiler-Versionen akzeptiert hat.
Common C Interface Dieser Compiler kann jetzt mit dem MPLAB Common C Interface konform sein, wodurch der 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 Librarian-Treiber Ein neuer Librarian-Treiber wird über dem vorherigen PIC libr librarian und dem AVR avr-ar librarian 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, um eine beliebige PIC- oder AVR-Bibliothek zu erstellen oder zu manipulieren file und ist daher die empfohlene Art, den Bibliothekar aufzurufen. Falls für Legacy-Projekte erforderlich, kann der vorherige Bibliothekar direkt aufgerufen werden, indem er die Optionen im alten Stil verwendet, die er in früheren Compiler-Versionen akzeptiert hat.
Migrationsprobleme
Die folgenden Funktionen werden jetzt vom Compiler anders behandelt. Diese Änderungen können eine Modifikation Ihres Quellcodes erfordern, wenn Sie Code auf diese Compiler-Version portieren. Die Versionsnummer in den Untertiteln zeigt die erste Compiler-Version an, die die folgenden Änderungen unterstützt.
4.1. Version 2.41
Ungenaue fma-Funktionen entfernt (XC8-2913) Funktionen der C99-Standardbibliothek fma 0 -Familie ( ) hat kein Multiplizieren-Addieren mit unendlicher Genauigkeit zu einer einzelnen Rundung berechnet, sondern stattdessen bei jeder Operation Rundungsfehler akkumuliert. Diese Funktionen wurden aus der mitgelieferten Bibliothek entfernt.
4.2. Version 2.40
Keiner.
4.3. Version 2.39 (Funktionale Sicherheitsfreigabe)
Keiner.
4.4. Version 2.36 Keine.
4.5. Version 2.35
Handhabung von String-to-Basen (XC8-2420) Um die Konsistenz mit anderen XC-Compilern zu gewährleisten, werden die XC8-String-to-Funktionen wie strtol () usw. nicht mehr versuchen, einen Eingabestring zu konvertieren, wenn die angegebene Base größer als 36 ist und setzt stattdessen errno auf EINVAL. Die C-Norm legt das Verhalten der Funktionen beim Überschreiten dieses Basiswertes nicht fest.
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 ist es nicht mehr erforderlich, die 1printf flt-Bibliothek (Option -1printf_flt) zu verknüpfen, um formatiert zu aktivieren I0 Unterstützung für Float-Formatbezeichner. Der Kluge I0 Funktionen der Microchip Unified Standard Library machen diese Option überflüssig. Außerdem ist die Verwendung von Routinen mit _P-Suffix für Zeichenfolgen- und Speicherfunktionen (z. B. strcpy_P ( ) usw.), die mit konstanten Zeichenfolgen in Flash arbeiten, nicht mehr erforderlich. Die Standard-C-Routinen (z. B. strcpy ) funktionieren mit solchen Daten korrekt, wenn die Funktion const-data-in-program-memory aktiviert ist.
4.6. Version 2.32
Keiner.
4.7. Version 2.31
Keiner.
4.8. 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
Keiner
4.5. Version 2.05
Konstante Objekte im Programmspeicher Beachten Sie, dass die standardmäßig konstant qualifizierten Objekte im Programmspeicher abgelegt und aufgerufen werden (wie bei hue beschrieben). Dies wirkt sich auf die Größe und Ausführungsgeschwindigkeit Ihres Projekts aus, sollte jedoch die RAM-Nutzung reduzieren. Diese Funktion kann bei Bedarf mit der Option -mnoconst-data-in-progmem deaktiviert werden.
4.6. Version 2.00
Konfigurationssicherungen Die Gerätekonfigurationssicherungen können jetzt mit einem config-Pragma gefolgt von Einstellungs-Wert-Paaren programmiert werden, um den Sicherungsstatus anzugeben, z
#pragma config WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
Absolute Objekte und Funktionen Objekte und Funktionen können nun unter Verwendung des CCI-Bezeichners (Adresse) an einer bestimmten Adresse im Speicher platziert werden, zampauf:
#enthalten
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
Das Argument für diesen Bezeichner muss sein eine Konstante, die die Adresse darstellt, an der das erste Byte oder die Anweisung platziert wird. RAM-Adressen werden mit einem Offset von 0x800000 angegeben. Aktivieren Sie das CCI, um diese Funktion zu verwenden.
Neue Interrupt-Funktionssyntax Der Compiler akzeptiert jetzt den CCI-Spezifizierer _interrupt (num), um anzuzeigen, dass C-Funktionen Interrupt-Handler sind. Der Spezifizierer nimmt eine Unterbrechungsnummer an, zampauf:
#enthalten
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Behobene Probleme
Im Folgenden sind Korrekturen aufgeführt, die am Compiler vorgenommen wurden. Diese können Fehler im generierten Code beheben oder den Betrieb des Compilers dahingehend ändern, wie er beabsichtigt oder im Benutzerhandbuch angegeben ist. Die Versionsnummer in den Unterüberschriften gibt die erste Compiler-Version an, die Korrekturen für die folgenden Probleme enthält. Die Bezeichnung(en) in Klammern im Titel sind die Identifikation dieser Ausgabe in der Tracking-Datenbank. Diese können nützlich sein, wenn Sie den Support kontaktieren müssen.
Beachten Sie, dass einige gerätespezifische Probleme im Device Family Pack (DFP) behoben werden, das dem Gerät zugeordnet ist. Informationen zu Änderungen an DFPs und zum Herunterladen der neuesten Pakete finden Sie im MPLAB Pack Manager.
5.1. Version 2.41
Dongle-Probleme bei Ventura (XC8-3088) Dongles Die zur Lizenzierung des Compilers verwendete Datei wurde möglicherweise auf macOS Ventura-Hosts nicht richtig gelesen, was zu Lizenzierungsfehlern führte. Änderungen am XCLM-Lizenzmanager beheben dieses Problem.
Falsche Angabe der Speicherbelegung (XC8-2925) Der Versuch, SIZE_MAX Bytes (oder einen Wert in der Nähe davon) Speicher mit den Speicherverwaltungsfunktionen der Standardbibliothek (malloc () et al.) zuzuweisen, war fälschlicherweise erfolgreich. Es wurde nicht berücksichtigt, dass zusätzliche Bytes zusätzlich zu dem angeforderten Block benötigt wurden, wenn die Implementierung der einfachen dynamischen Speicherzuweisung verwendet wurde. In solchen Situationen wird nun ein NULL-Zeiger zurückgegeben und errno auf ENOMEM gesetzt.
Ungenaue fma-Funktionen entfernt (XC8-2913) Die C99-Standardbibliothek fma () -Familienfunktionen ( ) hat kein Multiplizieren-Addieren mit unendlicher Genauigkeit zu einer einzelnen Rundung berechnet, sondern stattdessen bei jeder Operation Rundungsfehler akkumuliert. Diese Funktionen wurden aus der mitgelieferten Bibliothek entfernt.
Schlechte Handhabung der String-Konvertierung (XC8-2921, XC8-2652) Wenn eine „Subject Sequence“ für die Konvertierung durch strtod Cr eine scheinbare Gleitkommazahl im Exponentialformat enthielt und nach dem e/E-Zeichen ein unerwartetes Zeichen stand, dann wurde ihr dort, wo endptr bereitgestellt wurde, eine Adresse zugewiesen, die hätte es auf das Zeichen nach dem e/E zeigen sollen, während es auf das e/E-Zeichen selbst hätte zeigen sollen, da dieses nicht konvertiert worden war. Zum Bspample, strtod („100exx“, &ep) sollte 100.00 zurückgeben und ep so einstellen, dass es auf den „exx“-Teil der Zeichenfolge zeigt, während die Funktion den richtigen Wert zurückgab, aber ep so einstellte, dass es auf den „xx“-Teil der Zeichenfolge zeigt .
5.2. Version 2.40
Zu entspannt (XCS-2876) Bei Verwendung der Option -mrelax ordnete der Compiler einige Abschnitte nicht zusammen, was zu weniger optimalen Codegrößen führte. Dies kann bei Code aufgetreten sein, der die neuen MUSL-Bibliotheken verwendet, oder bei schwachen Symbolen.
Zuordnungsfunktion nicht deaktiviert, wie in Warnung (XC8-2875) angegeben Die Funktion const-data-in-config-mappedprogmem ist darauf angewiesen, dass die Funktion const-data-in-progmem aktiviert ist. Wenn die Funktion const-data-inconfig-mapped-progmem explizit mit der Option aktiviert und die Funktion const-data-inprogmem deaktiviert wurde, schlug der Verknüpfungsschritt fehl, obwohl eine Warnmeldung darauf hinwies, dass die Funktion const-data-in-config- mapped-progmem wurde automatisch deaktiviert, was nicht ganz richtig war. Die Funktion const-data-in-config-mapped-progmem ist in dieser Situation jetzt vollständig deaktiviert.
DFP-Änderungen zum korrekten Zugriff auf NVMCTRL (XC8-2848) Der von AVR64EA-Geräten verwendete Runtime-Startcode berücksichtigte nicht, dass das NVMCTRL-Register unter Configuration Change Protection (CCP) stand und konnte den I0 SFR nicht auf die Seite setzen, die vom const-data-in-configmapped-Progmem verwendet wird Compiler-Funktion. Änderungen, die in AVR-Ex_DFP Version 2.2.55 vorgenommen wurden, ermöglichen es dem Runtime-Startcode, korrekt in dieses Register zu schreiben.
Zu vermeidende DFP-Änderungen Flash-Mapping (XC8-2847) Eine Problemumgehung für ein Problem mit der Flash-Mapping-Gerätefunktion, das in den AVR128DA28/32/48/64 Silicon Errata (D580000882) gemeldet wurde, wurde implementiert. Die Compiler-Funktion const-data-in-config-mapped-progmem wird nicht standardmäßig auf betroffene Geräte angewendet, und diese Änderung wird in AVR-Dx_DFP Version 2.2.160 erscheinen.
Build-Fehler mit sinhf oder coshf (XC8-2834) Versuche, die Bibliotheksfunktionen sinhf () oder coshf () zu verwenden, führten zu einem Link-Fehler, der eine nicht definierte Referenz beschreibt. Die fehlende Funktion, auf die verwiesen wird, wurde jetzt in die Compiler-Distribution aufgenommen.
Build-Fehler mit nopa (XC,8-2833) Die Verwendung des Attributs nopa mit einer Funktion, deren Assemblername mit asm ( ) angegeben wurde, löste Fehlermeldungen vom Assembler aus. Diese Kombination ist nicht möglich.
Variadischer Funktionsfehler mit Zeigerargumenten (XC8-2755, XC8-2731) Funktionen mit einer variablen Anzahl von Argumenten erwarten, dass 24-Bit-Zeiger (Memx-Typ) in der Variablenargumentliste übergeben werden, wenn die Funktion const-data-in-progmem aktiviert ist. Argumente, die Zeiger auf den Datenspeicher waren, wurden als 16-Bit-Objekte übergeben, was beim endgültigen Lesen zu Codefehlern führte. Wenn die constdata-in-progmem-Funktion aktiviert ist, werden jetzt alle 16-Bit-Zeigerargumente in 24-Bit-Zeiger konvertiert.
strtoxxx-Bibliotheksfunktionen schlagen fehl (XC8-2620) Wenn die const-data-in-progmem-Funktion aktiviert war, wurde der endptr-Parameter in den strtoxxx-Bibliotheksfunktionen nicht ordnungsgemäß für Quell-String-Argumente aktualisiert, die sich nicht im Programmspeicher befinden.
Warnungen für ungültige Besetzungen (XC8-2612) Der Compiler gibt jetzt einen Fehler aus, wenn die const-in-progmem-Funktion aktiviert ist und die Adresse eines Zeichenfolgenliterals explizit in den Datenadressraum umgewandelt wird (wobei der const-Qualifizierer gelöscht wird), zample, (uint 8_t *) „Hallo Welt!“. Es wird eine Warnung ausgegeben, wenn die Adresse möglicherweise ungültig ist, wenn ein konstanter Datenzeiger explizit in den Datenadressraum umgewandelt wird.
Platzierung nicht initialisierter const-Objekte (XC8-2408) Nicht initialisierte const- und const volatile-Objekte wurden nicht im Programmspeicher auf Geräten platziert, die ihren Programmspeicher ganz oder teilweise in den Datenadressraum abbilden. Für diese Geräte werden solche Objekte nun im Programmspeicher platziert, wodurch ihr Betrieb konsistent mit anderen Geräten wird.
5.3. Version 2.39 (Funktionale Sicherheitsfreigabe)
Keiner.
5.4. Version 2.36
Fehler beim Verzögern (XC8-2774) Geringfügige Änderungen in den standardmäßigen Optimierungen im freien Modus verhinderten das ständige Falten von Operandenausdrücken in die integrierten Verzögerungsfunktionen, was dazu führte, dass sie als Nichtkonstanten behandelt wurden und den Fehler auslösten: Builtin avr delay_cycles erwartet eine ganzzahlige Konstante zur Kompilierzeit.
5.5. Version 2.35
Fortlaufende Zuordnung mit _at (XC8-2653) Die zusammenhängende Zuordnung mehrerer Objektplätze in einem Abschnitt mit demselben Namen und die Verwendung von _at ( ) funktionierte nicht korrekt. Zum Bspampauf:
const char arr1[] __attribute__((section(.mysec)))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((section(.mysec)))) = {0xEF, 0xFE};
hätte arr2 unmittelbar nach arr1 platzieren sollen.
Abschnittsstartadressen angeben (XC8-2650) Die Die Option -W1, –section-start konnte stillschweigend keine Abschnitte an der angegebenen Startadresse platzieren. Dieses Problem wurde für alle benutzerdefinierten Abschnitte behoben; Es funktioniert jedoch nicht für Standardabschnitte wie . Texte oder . bss, die mit einer Option -W1, -T platziert werden muss.
Linker stürzt beim Entspannen ab (XC8-2647) Wenn die -mrelax-Optimierung aktiviert war und es Code- oder Datenabschnitte gab, die nicht in den verfügbaren Speicher passten, stürzte der Linker ab. Nun werden in einem solchen Fall stattdessen Fehlermeldungen ausgegeben.
Kein No-Falling-Back (XC8-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 (X03-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.
Schlechtes EEPROM Zugang (XC8-2629) Die Die Routine eeprom_read_block funktionierte auf Xmega-Geräten nicht korrekt, wenn die Option -mconst-data-in-progmem aktiviert war (was der Standardzustand ist), was dazu führte, dass der EEPROM-Speicher nicht korrekt gelesen wurde.
Ungültige Speicherzuweisung (XC8-2593, XC8-2651) Wenn die -Ttext- oder -Tdata-Linker-Option (zampDatei, die mit einer -vl-Treiberoption durchlaufen wird) angegeben ist, wurde der Ursprung des entsprechenden Text-/Datenbereichs aktualisiert; Allerdings wurde die Endadresse nicht entsprechend angepasst, was dazu führen könnte, dass die Region den Speicherbereich des Zielgeräts überschritten hat.
Absturz mit überattributierter Funktion (XC8-2580) Der Compiler stürzte ab, wenn eine Funktion mit mehr als einem der Interrupt-, Signal- oder nmi-Attribute deklariert wurde, zB 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 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 beim Lesen eines Zwei-Byte-Werts von einem Zeiger auf den Programmspeicher einen internen Fehler (unrecognizable insn).
5.6. Version 2.32
Zweiter Zugriff von Bibliothek schlägt fehl (XC8-2381) Aufrufen der Windows-Version von xc8-ar. .exe-Bibliotheksarchivierer ein zweites Mal auf ein vorhandenes Bibliotheksarchiv zuzugreifen, ist möglicherweise mit einer Fehlermeldung „Umbenennung nicht möglich“ fehlgeschlagen.
5.7. Version 2.31
Unerklärlicher Compiler Ausfälle (XC8-2367) Bei der Ausführung auf Windows-Plattformen, bei denen das temporäre Systemverzeichnis auf einen Pfad mit einem Punkt „.“ eingestellt war. Zeichen kann der Compiler möglicherweise nicht ausgeführt werden.
5.8. Version 2.30
Globale Beschriftungen nach Gliederung verlegt (XC8-2299) Handgeschriebener Assemblercode, der globale Beschriftungen in Assemblersequenzen platziert, die durch prozedurale Abstraktion ausgeklammert werden, wurde möglicherweise nicht korrekt neu positioniert.
Ein entspannter Crash (XC8-2287) Die Verwendung der Option -mrelax hat möglicherweise zum Absturz des Linkers geführt, als Tail-Jump-Entspannungsoptimierungen versuchten, ret-Anweisungen zu entfernen, die sich nicht am Ende eines Abschnitts befanden.
Absturz beim Optimieren von Labels als Werte (XC8-2282) Code, der die GNU-C-Spracherweiterung „Labels as Values“ verwendet, hat möglicherweise dazu geführt, dass die prozeduralen Abstraktionsoptimierungen mit einem Fixup-Fehler „Outlined VMA range spans“ abstürzten.
Nicht so konstant (XC8-2271) Die Prototypen für st rstr ( ) und andere Funktionen von Geben Sie nicht mehr den nicht standardmäßigen const-Qualifizierer für zurückgegebene Zeichenfolgenzeiger an, wenn die Funktion -mconst-data-inprogmem 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 Übersetzungseinheit wurde in einem Abschnitt platziert (unter Verwendung von _section oder _attribute_ ( (section) )), und die erste derartige Variable war mit Null initialisiert oder hatte keinen Initialisierer, Initialisierer für andere Variablen in derselben Übersetzungseinheit, die platziert wurden im selben Abschnitt gingen verloren.
5.1. Version 2.29 (Funktionale Sicherheitsfreigabe)
Keiner.
5.2. Version 2.20
Fehler bei langen Befehlen (XC8-1983) Bei Verwendung eines AVR-Targets hat der Compiler möglicherweise mit a aufgehört file nicht gefunden Fehler, wenn die Befehlszeile sehr groß war und Sonderzeichen wie Anführungszeichen, Backslashes etc.
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
Umzugsfehler (XC8-1891) Der am besten geeignete Zuordner hinterließ nach der Linker-Relaxierung Speicher-'Löcher' zwischen den Abschnitten. Abgesehen von der Fragmentierung des Speichers erhöhte dies die Möglichkeit, dass Linkerverschiebungsfehler im Zusammenhang mit PC-relativen Sprüngen oder Aufrufen außerhalb des Bereichs auftreten.
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-388) Mehrere Definitionen aus , wie clock_div_t und clock_prescale set () , wurden nicht für Geräte definiert, einschließlich ATmega324PB, ATmega328PB, ATtiny441 und ATtiny841.
Fehlende Makros Die Präprozessormakros _XC8_MODE_, _XC8_VERS ION, _XC und _XC8 wurden nicht automatisch vom Compiler definiert. Diese sind jetzt verfügbar.
5.5. Version 2.05
Interner Compilerfehler (XC8-1822) Beim Erstellen unter Windows wurde beim Optimieren des Codes möglicherweise ein interner Compilerfehler 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.
Weggelassener Flash-Speicher (XC8-1792) Bei avrxmega3- und avrtiny-Geräten wurden Teile des Flash-Speichers möglicherweise vom MPLAB X unprogrammiert gelassen IDE.
Fehler beim Ausführen von main (XC8-1788) In einigen Situationen, in denen für das Programm keine globalen Variablen definiert waren, wurde der Runtime-Startcode nicht beendet und die Hauptfunktion ( ) wurde nie erreicht.
Falsche Speicherinformationen (XC8-1787) Bei avrxmega3- und avrtiny-Geräten meldete das avr-size-Programm, dass schreibgeschützte Daten RAM statt Programmspeicher verbrauchten.
Falscher Programmspeicher gelesen (XC8-1783) Projekte, die für Geräte kompiliert wurden, deren Programmspeicher dem Datenadressraum zugeordnet ist und die Objekte mit dem Makro/Attribut PROGMEM definieren, haben diese Objekte möglicherweise von der falschen Adresse gelesen.
Interner Fehler bei Attributen (XC8-1773) Beim Definieren von Zeigerobjekten mit dem ist ein interner Fehler aufgetreten
_at () oder attribute () Token zwischen dem Zeigernamen und dem dereferenzierten Typ, zample, char *
_at (0x800150) cp; Wenn ein solcher Code auftritt, wird jetzt eine Warnung ausgegeben.
Fehler beim Ausführen von main (XC8-1780, XC8-1767, XC8-1754) Die Verwendung von EEPROM-Variablen oder das Definieren von Fuses mit dem config-Pragma könnte zu einer falschen Dateninitialisierung und/oder zum Blockieren der Programmausführung im Runtime-Startcode geführt haben, bevor main ( ) erreicht wurde.
Sicherungsfehler bei Tiny Devices (XC8-1778, XC8-1742) Die Geräte attiny4/5/9/10/20/40 hatten eine falsche Sicherungslänge, die in ihrer Kopfzeile angegeben war files, die zu Linkerfehlern führen, wenn versucht wird, Code zu erstellen, der Fuses definiert.
Segmentierung Fehler (XC8-1777) Ein intermittierender Segmentierungsfehler wurde behoben.
Assembler-Absturz (XC8-1761) Möglicherweise ist der avr-as-Assembler 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) 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 Linkerverschiebungsfehler ausgegeben, wenn der Code einen rjmp- oder rcall-Befehl mit einem Ziel enthielt, das genau 4 KB entfernt war.
5.6. Version 2.00
Keiner.
Bekannte Probleme
Die folgenden Einschränkungen gelten für den Betrieb des Compilers. Dies können allgemeine Codierungsbeschränkungen oder Abweichungen von den Angaben in der Bedienungsanleitung sein. Die Bezeichnung(en) in Klammern im Titel sind die Identifikation dieser Ausgabe in der Tracking-Datenbank. Dies kann von Vorteil sein, wenn Sie den Support kontaktieren müssen. Diejenigen Elemente, die keine Etiketten haben, sind Einschränkungen, die Modi Operandi beschreiben und die wahrscheinlich dauerhaft in Kraft bleiben.
6.1. MPLAB X-IDE Integration
MPLAB IDE Integration Wenn der Compiler von der MPLAB IDE verwendet werden soll, müssen Sie die MPLAB IDE vor der Installation des Compilers installieren.
6.2. Codegenerierung
Segfault mit der Option section-anchors (XC8-3045) Ein Programm, das Funktionen mit variablen Argumentlisten definiert und die Option -fsection-anchors verwendet, hat möglicherweise einen internen Compilerfehler ausgelöst: Segmentierungsfehler.
Debug-Informationen nicht synchron (XC8-2948) Wenn Linker-Relaxierungsoptimierungen Anweisungen verkleinern (zample call-to-rcall-Anweisungen), bleiben Zuordnungen von Quellzeile zu Adresse möglicherweise nicht synchron, wenn in einem Abschnitt mehr als eine Verkleinerungsoperation stattfindet.
In der folgenden example, es gibt zwei Aufrufe von foo, die entspannt zu relativen Aufrufen führen.
PA-Speicherzuweisungsfehler (XC8-2881) Bei Verwendung der prozeduralen Abstraktionsoptimierer meldet der Linker möglicherweise Speicherzuweisungsfehler, wenn die Codegröße nahe an der Menge des verfügbaren Programmspeichers auf dem Gerät liegt, obwohl das Programm in der Lage sein sollte, den verfügbaren Speicherplatz auszufüllen.
Nicht so schlau Smart-I0 (XC8-2872) Die smart-io-Funktion des Compilers generiert gültigen, aber suboptimalen Code für die snprint f-Funktion, wenn die const-data-in-progmem-Funktion deaktiviert wurde oder wenn das Gerät seinen gesamten Flash in den Datenspeicher gemappt hat.
Noch weniger smarter Smart-I0 (XC8-2869) Die smart-io-Funktion des Compilers generiert gültigen, aber suboptimalen Code, wenn die Optionen -flto und -fno-builtin beide verwendet werden.
Suboptimale schreibgeschützte Datenplatzierung (XC8-2849) Der Linker kennt derzeit weder die APPCODE- und APPDATA-Speicherabschnitte noch die [No-Read-While-Write-Unterteilungen in der Speicherzuordnung. Daher besteht eine geringe Wahrscheinlichkeit, dass der Linker schreibgeschützte Daten in einem ungeeigneten Speicherbereich zuweist. Die Wahrscheinlichkeit falsch platzierter Daten steigt, wenn die Funktion „const-data-in-progmem“ aktiviert ist, insbesondere wenn die Funktion „const-data-in-config-mapped-progmem“ ebenfalls aktiviert ist. Diese Funktionen können bei Bedarf deaktiviert werden.
Objekt file Bearbeitungsauftrag (XC8-2863) Die Reihenfolge, in der Objekte files vom Linker verarbeitet werden, können sich je nach Verwendung prozeduraler Abstraktionsoptimierungen (Option -mpa) unterscheiden. Dies würde nur Code betreffen, der schwache Funktionen über mehrere Module hinweg definiert.
Linker-Fehler mit absolut (XC8-2777) Wenn ein Objekt an einer Adresse am Anfang des RAM absolut gemacht wurde und auch nicht initialisierte Objekte definiert wurden, kann ein Linker-Fehler ausgelöst werden.
Kurze Weck-IDs (XC8-2775) Für ATA5700/2-Geräte sind die PHIDO/1-Register nur mit einer Breite von 16 Bit und nicht mit einer Breite von 32 Bit definiert.
Linker-Absturz beim Aufrufen von Symbol (XC8-2758) Der Linker kann abstürzen, wenn die Treiberoption -mrelax verwendet wird, wenn der Quellcode ein Symbol aufruft, das mit der Linkeroption -cc., –def sym definiert wurde.
Falsche Initialisierung (XC8-2679) Da ist eine Diskrepanz zwischen dem Ort, an dem die Anfangswerte für einige globale/statische bytegroße Objekte im Datenspeicher platziert werden, und dem Ort, an dem zur Laufzeit auf die Variablen zugegriffen wird.
Schlechte indirekte Funktionsaufrufe (XC8-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 ua und scanf ( ) ua wandeln eine hexadezimale Gleitkommazahl, die keinen Exponenten angibt, immer in Null um. Zum Bspampauf:
strtof („Oxl“, &endptr) ;
gibt den Wert 0 zurück, nicht I.
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.
Fehlerhafte Ausgabe mit ungültigem DFP-Pfad (XC8-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 (über _at ( )) absolut gemacht wurden, und anderen Objekten, die den Bezeichner Abschnitt ( ) verwenden und die mit derselben Adresse verknüpft sind.
Fehler bei Bibliotheksfunktionen und _memx (XC8-1763) Aufgerufene libgcc Float-Funktionen mit einem Argument im Memx-Adressraum schlagen möglicherweise fehl. Beachten Sie, dass Bibliotheksroutinen von einigen C-Operatoren aufgerufen werden, also zample ist folgender Code betroffen:
retour regFloatVar > memxFloatVar;
Begrenzte libgcc-Implementierung (AVRTC-731) Für die ATTiny4/5/9/10/20/40-Produkte ist die standardmäßige C/Math-Bibliotheksimplementierung in libgcc 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 von Linker-Abbrüchen ohne Lockerung und ohne eine hilfreiche Fehlermeldung, anstatt die erforderlichen Funktions-Stubs zu generieren, wenn die Option -mre lax 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 localtime ( ) die gleiche Zeit wie gmtime ( ) zurück, zum Beispielample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Dokumente / Ressourcen
![]() |
MICROCHIP MPLAB XC8 C-Compiler-Entwicklungssoftware [pdf] Bedienungsanleitung MPLAB XC8 C, MPLAB XC8 C Compiler-Entwicklungssoftware, Compiler-Entwicklungssoftware, Entwicklungssoftware, Software |




