MICROCHIP XC8 C Compiler Version 2.45 Versionshinweise für AVR MCU

Produktinformationen
Der MPLAB XC8 C Compiler ist ein Softwaretool für die Ausrichtung auf AVR-Geräte von Microchip. Es dient zum Kompilieren von C-Code und zum Generieren einer ausführbaren Datei files für diese Geräte. Die Compiler-Version, auf die sich dieses Benutzerhandbuch bezieht, ist 2.45, das offizielle Erstellungsdatum ist der 18. August 2023. Die Vorgängerversion war 2.41 und wurde am 8. Februar 2023 erstellt. Dem Compiler liegt ein Handbuch zur funktionalen Sicherheit bei, das zusätzliche Informationen enthält und Richtlinien für die Verwendung der MPLAB XC-Compiler mit funktionalen Sicherheitsanwendungen. Dieses Handbuch ist im Dokumentationspaket enthalten, wenn Sie eine Lizenz für funktionale Sicherheit erwerben. Der MPLAB XC8 C Compiler unterstützt alle zum Zeitpunkt der Veröffentlichung verfügbaren 8-Bit-AVR-MCU-Geräte. Sie können auf avr_chipinfo.html verweisen file Im doc-Verzeichnis des Compilers finden Sie eine Liste aller unterstützten Geräte und ihrer Konfigurationsbit-Einstellungen. Es sind verschiedene Editionen des MPLAB XC8-Compilers verfügbar. Die lizenzierte (PRO) Edition bietet im Vergleich zur kostenlosen Edition einen höheren Optimierungsgrad. Um den Compiler als lizenziertes Produkt zu aktivieren, müssen Sie einen Aktivierungsschlüssel erwerben. Die unlizenzierte Version kann jedoch unbegrenzt ohne Lizenz genutzt werden. Für funktionale Sicherheitsanwendungen steht ein MPLAB XC8 Functional Safety Compiler zur Verfügung. Zur Aktivierung ist eine von Microchip erworbene funktionale Sicherheitslizenz erforderlich. Nach der Aktivierung können alle Optimierungsstufen und Compilerfunktionen genutzt werden. Der MPLAB XC Functional Safety Compiler unterstützt auch die Netzwerkserverlizenz. Detaillierte Informationen zu Installation, Aktivierung, Lizenztypen und Migrationsproblemen finden Sie im Dokument „Installing and Licensing MPLAB XC C Compilers (DS50002059)“.
Anweisungen zur Produktverwendung
- Bevor Sie die MPLAB XC8 C Compiler-Software ausführen, lesen Sie das Benutzerhandbuch, um wichtige Informationen und Anweisungen speziell für Microchip AVR-Geräte zu erhalten.
- Wenn Sie den Compiler für 8-Bit-PIC-Geräte verwenden, lesen Sie das Dokument „MPLAB XC8 C Compiler Release Notes for PIC“.
- Stellen Sie sicher, dass Ihr Betriebssystem die Systemanforderungen für die Ausführung des Compilers erfüllt. Binärdateien für macOS wurden mit Code signiert und notariell beglaubigt. Der MPLAB XC Network License Server ist für Microsoft Windows 10 und höher, Ubuntu 18.04 und höher sowie macOS 10.15 und höher verfügbar. Beachten Sie, dass der MPLAB XC Network License Server nicht auf diesen Betriebssystemen getestet wurde.
- Der MPLAB XC-Netzwerklizenzserver kann auf virtuellen Maschinen des unterstützten Betriebssystems mithilfe einer virtuellen Maschinenlizenz für Netzwerklizenzen (SW006021-VM) ausgeführt werden. Alle 32-Bit-Versionen des MPLAB XC Network Server werden ab Version 3.00 eingestellt.
- Um den MPLAB XC8 C Compiler als lizenziertes (PRO) Produkt zu aktivieren, erwerben Sie einen Aktivierungsschlüssel. Dies bietet einen höheren Optimierungsgrad im Vergleich zur kostenlosen Version. Der unlizenzierte Compiler kann jedoch unbegrenzt ohne Lizenz betrieben werden.
- Wenn Sie den MPLAB XC8 Functional Safety Compiler für funktionale Sicherheitsanwendungen verwenden, muss er mit einer von Microchip erworbenen Lizenz für funktionale Sicherheit aktiviert werden. Ohne diese Lizenz funktioniert der Compiler nicht. Nach der Aktivierung können Sie eine beliebige Optimierungsstufe auswählen und alle Compilerfunktionen nutzen. Die Netzwerkserverlizenz wird von dieser Version des MPLAB XC Functional Safety Compiler unterstützt.
- Ausführliche Anweisungen zur Installation, Aktivierung und Lizenzierung des MPLAB XC8 C Compilers finden Sie im Dokument Installing and Licensing MPLAB XC50002059 C Compilers (DSXNUMX).
- Wenn Sie den Compiler unter der Evaluierungslizenz ausführen, erhalten Sie während der Kompilierung eine Warnung, wenn Sie sich innerhalb von 14 Tagen nach dem Ende Ihres Evaluierungszeitraums befinden. Die gleiche Warnung wird ausgegeben, wenn Ihr HPA-Abonnement innerhalb von 14 Tagen abgelaufen ist.
Überview
Einführung
Diese Version des Microchip MPLAB® XC8 C-Compilers enthält mehrere neue Funktionen, Fehlerbehebungen und Unterstützung für neue Geräte.
Erstellungsdatum
Das offizielle Erstellungsdatum dieser Compiler-Version ist der 18. August 2023.
Vorherige Version
Die vorherige MPLAB XC8 C-Compilerversion war 2.41 und wurde am 8. Februar 2023 erstellt.
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.
Komponentenlizenzen und Versionen
Die Tools des MPLAB XC8 C Compiler für AVR-MCUs werden unter der GNU General Public License (GPL) geschrieben und vertrieben, was bedeutet, dass der Quellcode frei verbreitet und der Öffentlichkeit zugänglich gemacht wird. Der Quellcode für Tools unter der GNU GPL kann separat von Microchip heruntergeladen werden webGrundstück. Sie können die GNU GPL im lesen file named befindet sich im Unterverzeichnis Ihres Installationsverzeichnisses. Eine allgemeine Diskussion der Prinzipien, die der GPL zugrunde liegen, finden Sie hier. Für den Header bereitgestellter Unterstützungscode files, Linker-Skripte und Laufzeitbibliotheken sind proprietärer Code und fallen nicht unter die GPL. Dieser Compiler ist eine Implementierung von GCC Version 5.4.0, binutils Version 2.26 und verwendet avr-libc Version 2.0.0.
Systemanforderungen
Der MPLAB XC8 C-Compiler und die von ihm verwendete Lizenzsoftware sind für eine Vielzahl von Betriebssystemen verfügbar, darunter 64-Bit-Versionen der folgenden: Professional Editionen von Microsoft® Windows® 10, Ubuntu® 18.04, macOS® 13.2 (Ventura) und Fedora 34. Binärdateien für Windows wurden mit Code signiert. Binärdateien für macOS wurden mit Code signiert und notariell beglaubigt. Der MPLAB XC Network License Server ist für eine Vielzahl von 64-Bit-Betriebssystemen verfügbar, darunter 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 laufen, darunter Windows Server, Linux-Distributionen wie Oracle® Enterprise Linux® und Red Hat® Enterprise Linux sowie ältere Versionen unterstützter Betriebssysteme. Der MPLAB XC Network License Server wurde jedoch nicht auf diesen Betriebssystemen getestet. Der MPLAB XC-Netzwerklizenzserver kann auf virtuellen Maschinen des unterstützten Betriebssystems mithilfe einer virtuellen Maschinenlizenz 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 zum Zeitpunkt der Veröffentlichung verfügbaren 8-Bit-AVR-MCU-Geräte. Eine Liste aller unterstützten Geräte finden Sie in avr_chipinfo.html (im Dokumentverzeichnis des Compilers). Diese Dateien listen auch die Konfigurationsbiteinstellungen für jedes Gerät auf.
Editionen und Lizenz-Upgrades
Der MPLAB XC8-Compiler kann als lizenziertes (PRO) oder nicht lizenziertes (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 einen höheren Optimierungsgrad. Ein nicht lizenzierter Compiler kann unbegrenzt ohne Lizenz betrieben werden. Ein MPLAB XC8 Functional Safety Compiler muss mit einer von Microchip erworbenen Funktionssicherheitslizenz aktiviert werden. Ohne diese Lizenz funktioniert der Compiler nicht. Nach der Aktivierung können Sie eine beliebige Optimierungsstufe auswählen und alle Compilerfunktionen 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 „Installieren und Lizenzieren von MPLAB XC C-Compilern (DS50002059)“.
Installation und Aktivierung
Wichtige Informationen zum neuesten Lizenzmanager, der in diesem Compiler enthalten ist, finden Sie auch in den Abschnitten zu Migrationsproblemen und -beschränkungen. 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 die Compiler-Installationsanwendung .run (Linux) oder .app (MacOS) aus, z. B. XC8-1.00.11403-windows.exe, und befolgen Sie die Anweisungen auf dem Bildschirm. Das Standardinstallationsverzeichnis 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 getrennt von der 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 dem Ende Ihres Evaluierungszeitraums befinden. Die gleiche Warnung wird ausgegeben, wenn Ihr HPA-Abonnement innerhalb von 14 Tagen abgelaufen ist. 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, dass eine Floating-Lizenz für kurze Zeit vom Netzwerk getrennt wird. Mit dieser Funktion können Sie die Verbindung zum Netzwerk trennen und weiterhin Ihren MPLAB XC-Compiler verwenden. Weitere Informationen zu dieser Funktion finden Sie im Dokumentordner der XCLM-Installation. MPLAB X IDE enthält ein Lizenzfenster (Extras > Lizenzen) zur visuellen Verwaltung des Roamings.
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 Befehl „Ausführen“ ein (Windows-Logo-Taste + R). Dadurch wird ein Datei-Explorer-Dialogfeld geöffnet, das dieses Verzeichnis anzeigt und es Ihnen ermöglicht, den Pfad dieses Ordners zu bestimmen.
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.
Kundenservice
Im XC8-Forum können Sie anderen Benutzern dieses Produkts Fragen stellen. Microchip freut sich über Fehlerberichte, Vorschläge oder Kommentare zu dieser Compiler-Version. Bitte richten Sie alle Fehlerberichte oder Funktionsanfragen über das Support-System.
Dokumentationsaktualisierungen
Für Online- und aktuelle Versionen der MPLAB XC8-Dokumentation besuchen Sie bitte die Technische Online-Dokumentation von Microchip webWebsite.
Neue oder aktualisierte AVR-Dokumentation in dieser Version:
Keiner
- Der Migrationsleitfaden von AVR® GNU Toolchain zu MPLAB® XC8 beschreibt die Änderungen am Quellcode und den Build-Optionen, die möglicherweise erforderlich sind, wenn Sie sich für die Migration eines C-basierten Projekts von der AVR 8-Bit-GNU Toolchain zum Microchip MPLAB XC8 C Compiler entscheiden.
- Das Microchip Unified Standard Library-Referenzhandbuch 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 für 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, ist der MPLAB® XC8 User's
- Der Leitfaden für Embedded-Ingenieure – AVR® MCUs (DS50003108) enthält Informationen zum Einrichten von Projekten in der MPLAB X-IDE und zum Schreiben von Code für Ihr 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.
Version 2.45
Universeller Lizenzmanager (XC8-3175, XCLM-224) Die macOS-Version des mit dem Compiler verwendeten Lizenzmanagers ist jetzt universell und bietet native Unterstützung sowohl für Intel- als auch M1-basierte Maschinen. Die Linux-Version des Lizenzmanagers erfordert jetzt mindestens Version 2.25 von glibc. Universelle Mac-Binärdateien (XC8-3168, XC8-2951) Die Compiler-Binärdateien für macOS sind jetzt universell und bieten native Unterstützung sowohl für Intel- als auch M1-basierte Maschinen. Reduzierte Gleitkomma-Bibliotheksgrößen (XC8-3112, XC8-3071) Es wurden Verbesserungen an Gleitkomma-Bibliotheksfunktionen vorgenommen, einschließlich sinf(), pow(), sqrt(), expf(), log1fp() und nextafterf() , die eine Reduzierung der Codegröße für diese Routinen bewirken. Unterstützung für neue Geräte: Unterstützung ist jetzt für die folgenden AVR-Teile verfügbar: AVR16EA28, AVR16EA32, AVR16EA48, AVR32EA28, AVR32EA32, AVR32EA48, AVR16EB14, AVR16EB20, AVR16EB28 und AVR16EB32.
Version 2.41
- Bootrow-Unterstützung (XC8-3053) Der Compiler platziert den Inhalt aller Abschnitte mit einem .bootrow-Präfix an der 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 konzipiert ist, auf die nur ein Bootloader zugreifen sollte.
- Eliminierung redundanter Rückgaben (XC8-3048) Der Compiler eliminiert jetzt redundante Ret-Anweisungen in Funktionen mit einem Tail-Jump, wenn benutzerdefinierte Linker-Skripte verwendet werden. Hierbei handelt es sich um eine ähnliche Optimierung wie zuvor, sie wird jedoch jetzt für alle verwaisten Abschnitte durchgeführt, auch wenn ein benutzerdefiniertes Linker-Skript verwendet wird und das am besten geeignete Zuordnungsschema nicht im Spiel ist.
- Änderung des Zeittyps (XC8-2982, 2932) Der C99-Standardbibliothekstyp time_t wurde von einem Long-Long-Typ in einen vorzeichenlosen Long-Typ geändert, was zu Verbesserungen der Codegröße in einigen zeitbezogenen Funktionen, wie z. B. mktime(), führt.
- Neues nop (XC8-2946, 2945) Das Makro NOP() wurde hinzugefügt . Dieses Makro fügt eine Nop-No-Operation-Anweisung in die Ausgabe ein.
- 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.
- TrampOlined-Aufrufe (XC8-2760) Der Compiler kann jetzt lange Aufrufanweisungen 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 Rcall-Anweisungen eine JMP-Aufrufanweisung zu ersetzen, die „tr“ ausführtampoline' Ausführung an die gewünschte Adresse, zampauf:
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 prozedurale Abstraktion (PA) wurde verbessert, sodass Code, der eine Funktionsaufrufanweisung (call/rcall) enthält, skizziert werden kann. Dies geschieht nur, wenn der Stapel nicht zur Übergabe von Argumenten an die Funktion oder zum Abrufen von Rückgabewerten von der Funktion verwendet wird. Der Stapel 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. Diese Funktion kann mit der Option –mno-pa-outline-calls deaktiviert werden, oder die prozedurale Abstraktion kann für eine Objektdatei und/oder Funktion mit der Option -mno-pa-on- vollständig deaktiviert werden.file -mno-pa-on-function bzw. durch die selektive Verwendung des nopa-Attributs (__nopa-Spezifizierer) mit Funktionen.
- Codeabdeckungsmakro Der Compiler definiert jetzt das Makro __CODECOV, wenn eine gültige Option -mcodecov angegeben ist.
- Speicherreservierungsoption Der xc8-cc-Treiber akzeptiert jetzt die Option -mreserve=space@start:end beim Erstellen für AVR-Ziele. Diese Option reserviert den angegebenen Speicherbereich im Daten- oder Programmspeicherbereich und verhindert so, dass der Linker Code oder Objekte in diesem Bereich füllt.
- Intelligenteres Smart IO An den Smart IO-Funktionen wurden mehrere Verbesserungen vorgenommen, darunter allgemeine Optimierungen am printf-Kerncode, die Behandlung des %n-Konvertierungsspezifizierers als unabhängige Variante, die Verknüpfung von Vararg-Pop-Routinen bei Bedarf und die Verwendung kürzerer Datentypen, wo möglich, für die Verarbeitung IO-Funktionsargumente und Berücksichtigung von allgemeinem Code bei der Feldbreiten- und Präzisionsbehandlung. Dies kann zu erheblichen Code- und Dateneinsparungen führen und die Ausführungsgeschwindigkeit von IO erhöhen.
Version 2.39 (Funktionale Sicherheitsfreigabe)
Netzwerkserverlizenz Diese Version des MPLAB XC8 Functional Safety Compilers unterstützt die Netzwerkserverlizenz.
Version 2.36
Keiner.
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 verfügen über einen SFR (z. B. FLMAP), der angibt, welcher 32-KB-Bereich des Programmspeichers dem Datenspeicher zugeordnet wird. Mit der neuen Option „mconst-data-in-config-mapped-progmem“ kann der Linker alle qualifizierten Daten in einem 32-KB-Abschnitt platzieren und das entsprechende SFR-Register automatisch initialisieren, um sicherzustellen, dass diese Daten dem Datenspeicherplatz zugeordnet werden , wo effektiver darauf zugegriffen werden kann.
- 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 MPLAB® XC8 C Compiler-Benutzerhandbuch für AVR® MCU enthält nicht mehr die Dokumentation für diese Standardfunktionen. Diese Informationen finden Sie jetzt im Microchip Unified Standard Library Reference Guide. Beachten Sie, dass einige zuvor von avr-libc definierte Funktionen nicht mehr verfügbar sind. (Siehe Bibliotheksfunktionalität.)
- Smart IO Als Teil der neuen einheitlichen Bibliotheken werden IO-Funktionen in den Familien printf und scanf jetzt bei jedem Build individuell generiert, basierend darauf, wie diese Funktionen im Programm verwendet werden. Dadurch kann der Ressourcenverbrauch eines Programms erheblich reduziert werden.
- Smart IO-Unterstützungsoption Bei der Analyse von Aufrufen von Smart IO-Funktionen (z. B. printf() oder scanf()) kann der Compiler nicht immer aus der Formatzeichenfolge ermitteln oder aus den Argumenten die für den Aufruf erforderlichen Konvertierungsspezifizierer ableiten. Bisher hat der Compiler dies immer getan Keine Annahmen und stellen sicher, dass voll funktionsfähige IO-Funktionen in das endgültige Programmabbild eingebunden wurden. Eine neue Option -msmart-io-format=fmt wurde hinzugefügt, damit der Compiler stattdessen vom Benutzer über die von Smart IO verwendeten Konvertierungsspezifizierer informiert werden kann Funktionen, deren Verwendung nicht eindeutig ist, wodurch verhindert wird, dass übermäßig lange E/A-Routinen verknüpft werden. (Weitere Informationen finden Sie unter Option smart-io-format.)
- Platzieren benutzerdefinierter Abschnitte Bisher platzierte die Option -Wl,–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 bei Standardabschnitten wie .text, .bss oder .data der Best-Fit-Allokator immer noch die vollständige Kontrolle über deren Platzierung hat und die Option keine Auswirkung hat. Verwenden Sie die Option -Wl,-Tsection=addr, wie im Benutzerhandbuch beschrieben.
Version 2.32
- Stack Guidance Mit einer PRO-Compiler-Lizenz verfügbar, kann die Stack-Guidance-Funktion des Compilers verwendet werden, um die maximale Tiefe jedes von einem Programm verwendeten Stacks abzuschätzen. Es 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 Stack-Nutzung gedruckt. In der Map-Datei steht ein detaillierter Stack-Report zur Verfügung, der wie gewohnt angefordert werden kann.
- 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.
Version 2.31
Keiner.
Version 2.30
- Neue Option zur Verhinderung 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_clear_bss-Symbole in Assemblydateien unterdrückt, was wiederum die Einbindung 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 stehen jetzt zusätzliche Optionen zur Verfügung, um einige dieser Optimierungen zu steuern, insbesondere -fsection-Anker, die den Zugriff auf statische Objekte relativ zu einem Symbol ermöglichen; -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 Anrufe entspannen kann. Diese letzte Option kann die Codegröße erhöhen, wenn die zugrunde liegenden Annahmen nicht erfüllt 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 A VR128DB64.
- 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.
Version 2.29 (Funktionale Sicherheitsfreigabe)
- Header-Datei für Compiler-Integrationen Um sicherzustellen, dass der Compiler Sprachspezifikationen wie MISRA entsprechen kann, wird die , wurde aktualisiert. Dieser Header enthält die Prototypen für alle integrierten Funktionen, wie zum Beispiel __builtin_avr_nop() und __builtin_avr_delay_cycles() . Einige integrierte Funktionen sind möglicherweise nicht MISRA-kompatibel. Diese können weggelassen werden, indem die Definition __XC_STRICT_MISRA zur Compiler-Befehlszeile hinzugefügt wird. Die integrierten Funktionen und ihre Deklarationen wurden aktualisiert, um Typen mit fester Breite zu verwenden.
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.
Version 2.19 (Funktionale Sicherheitsfreigabe)
Keiner.
Version 2.10
- Codeabdeckung Diese Version enthält eine Codeabdeckungsfunktion, die die Analyse des Umfangs erleichtert, in dem der Quellcode eines Projekts ausgeführt wurde. Verwenden Sie die Option -mcodecov=ram, um es zu aktivieren. Nach der 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. Weitere 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 der Datei hinzugefügt werden, um die gesamte Datei von der Abdeckungsanalyse auszuschließen. Alternativ kann das __attribute__((nocodecov)) verwendet werden, um eine bestimmte Funktion von der Abdeckungsanalyse auszuschließen. - Gerätebeschreibungsdateien Eine neue Gerätedatei mit dem Namen avr_chipinfo.html befindet sich im Verzeichnis docs der Compiler-Distribution. Diese Datei 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 Konfigurationsbit-Einstellungs-/Wertepaaren für dieses Gerät, z. Bamples.
- 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 ausgeführt, die automatisch vom Compiler aufgerufen wird, wenn Optimierungen der Stufen 2, 3 oder s ausgewählt werden. Diese Optimierungen verringern die Codegröße, können jedoch die Ausführungsgeschwindigkeit und die Debugbarkeit 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. Es kann für eine Objektdatei mit -mno-pa-on- deaktiviert werden.file=filename oder für eine Funktion deaktiviert werden, indem Sie -mno-pa-on-function=function verwenden. 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 das Inlining von Funktionen verhindert und es gibt eine Abstraktion von Inline-Code.
- Sperrbit-Unterstützung in Pragma Die #pragma-Konfiguration kann jetzt verwendet werden, um die AVR-Sperrbits sowie die anderen Konfigurationsbits anzugeben. Überprüfen Sie die Datei avr_chipinfo.html (oben erwähnt) auf die Einstellungs-/Wertpaare, die mit diesem Pragma verwendet werden sollen.
- Unterstützung für neue Geräte Unterstützung ist für die folgenden Teile verfügbar: AVR28DA128, AVR64DA128, AVR32DA128 und AVR48DA128.
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 platzieren, anstatt diese im RAM abzulegen. Der Compiler wurde so modifiziert, dass const-qualifizierte globale Daten im Programm-Flash-Speicher gespeichert werden und auf diese Daten direkt und indirekt über die entsprechenden Programmspeicheranweisungen zugegriffen werden kann. Diese neue Funktion ist standardmäßig aktiviert, kann jedoch 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 dem Datenadressraum dieser Geräte 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.
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 Bibliothekar-Treiber Ein neuer Bibliothekar-Treiber wird über dem vorherigen PIC-Bibliothekar-Bibliothekar und dem AVR-Avr-Ar-Bibliothekar positioniert. Dieser Treiber akzeptiert Optionen im GCC-Archiver-Stil, die entweder für den auszuführenden Bibliothekar übersetzt oder an diesen weitergeleitet werden. Der neue Treiber ermöglicht die Verwendung eines ähnlichen Satzes von Optionen mit ähnlicher Semantik zum Erstellen oder Bearbeiten beliebiger PIC- oder AVR-Bibliotheksdateien und ist daher die empfohlene Methode zum Aufrufen des Bibliothekars. Bei Bedarf für Legacy-Projekte kann der vorherige Bibliothekar direkt mit den altmodischen Optionen aufgerufen werden, 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.
Version 2.45
Keiner.
Version 2.41
Ungenaue FMA-Funktionen entfernt (XC8-2913) Die C99-Standardbibliothek ( ) berechnete keine Multiplikation und Addition mit unendlicher Genauigkeit zu einer einzelnen Rundung, sondern akkumulierte Rundungsfehler bei jeder Operation. Diese Funktionen wurden aus der mitgelieferten Bibliothek entfernt.
Version 2.40
Keiner.
Version 2.39 (Funktionale Sicherheitsfreigabe)
Keiner.
Version 2.36
Keiner.
Version 2.35
- Umgang mit String-to-Basen (XC8-2420) Um die Konsistenz mit anderen XC-Compilern sicherzustellen, versuchen die XC8-String-to-Funktionen wie strtol() usw. nicht mehr, einen Eingabestring zu konvertieren, wenn die angegebene Basis größer als 36 ist und wird stattdessen gesetzt. Der C-Standard legt das Verhalten der Funktionen bei Überschreiten dieses Basiswerts nicht fest.
- Unangemessene Geschwindigkeitsoptimierungen Bei der Auswahl von Optimierungen der Stufe 3 (-O3) wurden prozedurale Abstraktionsoptimierungen aktiviert. Diese Optimierungen verringern die Codegröße auf Kosten der Codegeschwindigkeit und hätten daher nicht durchgeführt werden dürfen. Projekte, die diese Optimierungsstufe verwenden, können bei der Erstellung mit dieser Version Unterschiede in der Codegröße und Ausführungsgeschwindigkeit aufweisen.
- Bibliotheksfunktionalität Der Code für viele der Standard-C-Bibliotheksfunktionen stammt jetzt aus der Unified Standard Library von Microchip, die unter bestimmten Umständen ein anderes Verhalten als das von der früheren avr-libc-Bibliothek bereitgestellte Verhalten aufweisen kann. Zum Beispielampist es nicht mehr erforderlich, die lprintf_flt-Bibliothek (Option -lprintf_flt) zu verknüpfen, um die formatierte IO-Unterstützung für Float-Format-Spezifizierer zu aktivieren. Die intelligenten E/A-Funktionen der Microchip Unified Standard Library machen diese Option überflüssig. Darüber hinaus ist die Verwendung von Routinen mit dem Suffix _P für Zeichenfolgen- und Speicherfunktionen (z. B. strcpy_P() usw.), die in Flash mit konstanten Zeichenfolgen 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.
Version 2.32
Keiner.
Version 2.31
Keiner.
Version 2.30
Keiner.
Version 2.29 (Funktionale Sicherheitsfreigabe)
Keiner.
Version 2.2
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.
Version 2.19 (Funktionale Sicherheitsfreigabe)
Keiner.
Version 2.10
Keiner
Version 2.05
Const-Objekte im Programmspeicher Beachten Sie, dass die standardmäßig mit const qualifizierten Objekte im Programmspeicher abgelegt werden und darauf zugegriffen wird (wie hier beschrieben). Dies wirkt sich auf die Größe und Ausführungsgeschwindigkeit Ihres Projekts aus, sollte jedoch die RAM-Nutzung verringern. Diese Funktion kann bei Bedarf mit der Option -mno-const-data-in-progmem deaktiviert werden.
Version 2.00
- Konfigurationssicherungen Die Gerätekonfigurationssicherungen können jetzt mithilfe eines Konfigurationspragmas gefolgt von Einstellungs-Wert-Paaren programmiert werden, um den Sicherungsstatus anzugeben, z. B. #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3
- Absolute Objekte und Funktionen Objekte und Funktionen können jetzt beispielsweise mithilfe des CCI-Spezifizierers __at(address) an einer bestimmten Adresse im Speicher platziert werdenampauf:
- #enthalten
int foobar __at(0x800100);
char __at(0x250) getID(int offset) { … }
Das Argument dieses Spezifizierers muss eine Konstante sein, die die Adresse darstellt, an der das erste Byte oder der erste Befehl platziert wird. RAM-Adressen werden mit einem Offset von 0x800000 angegeben. Aktivieren Sie die CCI, um diese Funktion zu verwenden.
- #enthalten
- Neue Interrupt-Funktionssyntax Der Compiler akzeptiert jetzt den CCI-Spezifizierer __interrupt(num), um anzugeben, dass C-Funktionen Interrupt-Handler sind. Der Spezifizierer benötigt beispielsweise eine Interrupt-Nummerample: #einschließen void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Behobene Probleme
Im Folgenden finden Sie Korrekturen, die am Compiler vorgenommen wurden. Diese können Fehler im generierten Code beheben oder die Funktionsweise des Compilers so ändern, wie es im Benutzerhandbuch vorgesehen oder angegeben wurde. Die Versionsnummer in den Unterüberschriften gibt die erste Compilerversion an, die Korrekturen für die folgenden Probleme enthält. Die in Klammern gesetzten Bezeichnungen im Titel geben die Identifizierung dieses Problems in der Tracking-Datenbank an. Diese können hilfreich 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.
Version 2.45
- Roaming-Lizenzfehler (XCLM-235) Roaming-Lizenzen funktionierten auf Linux-Plattformen mit Glibc-Versionen nach 2.28 nicht ordnungsgemäß.
- Interner Fehler bei Arrays von Strukturen (XC8-3069) Wenn mehrdimensionale Array-Mitglieder einer Struktur verarbeitet wurden, wurde der Adressraumqualifizierer nicht korrekt an das Array weitergegeben. Dies führte zu einer Nichtübereinstimmung der Adressraum-Qualifikationsinformationen und einem internen Compilerfehler. Diese Situation wurde korrigiert.
- Fehlerhafte Schreibvorgänge in nicht initialisierte Streams (ML-353, XC8-3100) Wenn die Standardausgabe-/Fehlerstreams nicht explizit mit FDEV_SETUP_STREAM oder _init_stdout/_init_stderr eingerichtet wurden, führte der Versuch, in sie zu schreiben, zu undefiniertem Verhalten. Dies wirkte sich auch auf Schreibvorgänge aus stdlib-Funktionen wie perror() aus. Alle Schreibvorgänge in diese Streams vor der Initialisierung werden jetzt ignoriert.
- Nicht unterstützter Modifizierer (XC8-2505) Die avr-libc-Bibliothek unterstützte beispielsweise den *-Modifizierer in Konvertierungsspezifizierern im Printf-Stil nichtample „%.*f“. Dies wird nun durch die Einführung der Microchip Unified Standard Library unterstützt.
- Mehrere nicht initialisierte Warnungen (XC8-2409) Der Compiler gab mehrere identische Warnmeldungen aus, als er auf ein const-Array stieß, das nicht initialisiert wurde. Die Meldung hätte nur einmal ausgegeben werden sollen, was jetzt der Fall ist, wenn diese Situation auftritt.
Version 2.41
- Dongle-Probleme auf Ventura (XC8-3088) Dongles, die zur Lizenzierung des Compilers verwendet wurden, wurden auf macOS Ventura-Hosts möglicherweise nicht ordnungsgemäß gelesen, was zu Lizenzierungsfehlern führte. Änderungen am XCLM-Lizenzmanager beheben dieses Problem.
- Falsche Angabe der Speicherzuweisung (XC8-2925) Es wurde versucht, SIZE_MAX Bytes (oder einen Wert in der Nähe dieses Werts) des Speichers mithilfe der standardmäßigen Speicherverwaltungsfunktionen der Bibliothek (malloc() et al.) zuzuweisen, die bei Verwendung der einfachen Implementierung der dynamischen Speicherzuweisung erforderlich sind. In solchen Situationen wird nun ein NULL-Zeiger zurückgegeben und errno auf ENOMEM gesetzt.
- Ungenaue FMA-Funktionen entfernt (XC8-2913) Die Funktionen der C99-Standardbibliothek fma()-Familie ( ) berechnete keine Multiplikation und Addition mit unendlicher Genauigkeit zu einer einzelnen Rundung, sondern akkumulierte Rundungsfehler bei jeder Operation. Diese Funktionen wurden aus der mitgelieferten Bibliothek entfernt.
- Schlechte Handhabung der String-Konvertierung (XC8-2921, XC8-2652) Wenn eine „Subjektsequenz“ für die Konvertierung durch strtod() etwas enthielt, das wie eine Gleitkommazahl im Exponentialformat aussah und nach dem e/E ein unerwartetes Zeichen stand Wenn endptr angegeben wurde, wurde ihm dann eine Adresse zugewiesen, die auf das Zeichen nach dem zeigte, während es auf das e//E-Zeichen selbst hätte zeigen sollen, da dieses nicht konvertiert wurde. Zum Beispielample, 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 korrekten Wert zurückgab, aber den Teil „xx“ der Zeichenfolge festlegte.
Version 2.40
- Zu entspannt (XC8-2876) Bei Verwendung der Option -mrelax hat der Compiler einige Abschnitte nicht zusammen zugewiesen, was zu weniger optimalen Codegrößen führte. Dies kann bei Code aufgetreten sein, der die neuen MUSL-Bibliotheken verwendet, oder bei schwachen Symbolen.
- Die Zuordnungsfunktion ist nicht deaktiviert, wie in der Warnung angegeben (XC8-2875). Die Funktion „const-data-in-config-mapped-progmem“ ist davon abhängig, dass die Funktion „const-data-in-progmem“ aktiviert ist. Wenn die Funktion „const-data-in-config-mapped-progmem“ mithilfe der Option explizit aktiviert und die Funktion „const-data-in-progmem“ deaktiviert wurde, schlug der Verknüpfungsschritt fehl, obwohl eine Warnmeldung angezeigt wurde, dass die Funktion „const-data-in Die Funktion -config-mapped-progmem wurde automatisch deaktiviert, was nicht ganz korrekt war. Die Funktion „const-data-in-config-mapped-progmem“ ist in dieser Situation jetzt vollständig deaktiviert.
- DFP-Änderungen für den korrekten Zugriff auf NVMCTRL (XC8-2848) Der von AVR64EA-Geräten verwendete Laufzeitstartcode berücksichtigte nicht, dass das NVMCTRL-Register unter Konfigurationsänderungsschutz (CCP) stand und den IO-SFR nicht auf die verwendete Seite festlegen konnte durch die Compilerfunktion const-data-in-config-mapped-progmem. Änderungen in AVR-Ex_DFP Version 2.2.55 ermöglichen es dem Laufzeit-Startcode, korrekt in dieses Register zu schreiben.
- DFP-Änderungen zur Vermeidung von Flash-Mapping (XC8-2847) Eine Problemumgehung für ein Problem mit der Flash-Mapping-Gerätefunktion, das im AVR128DA28/32/48/64 Silicon Errata (DS80000882) gemeldet wird, wurde implementiert. Die Compilerfunktion „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.
- Buildfehler mit sinhf oder coshf (XC8-2834) Versuche, die Bibliotheksfunktionen sinhf() oder coshf() zu verwenden, führten zu einem Linkfehler, der eine undefinierte Referenz beschrieb. Die fehlende Funktion, auf die verwiesen wird, wurde jetzt in die Compiler-Distribution aufgenommen.
- Buildfehler mit nopa (XC8-2833) Die Verwendung des nopa-Attributs mit einer Funktion, deren Assemblernamen 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 (Typ __memx) in der Liste der variablen Argumente übergeben werden, wenn die Funktion „const-data-in-progmem“ aktiviert ist ermöglicht. Argumente, die Zeiger auf den Datenspeicher waren, wurden als 16-Bit-Objekte übergeben, was beim endgültigen Lesen zu Codefehlern führte. Wenn die Funktion „const-data-in-progmem“ aktiviert ist, werden alle 16-Bit-Zeigerargumente jetzt in 24-Bit-Zeiger umgewandelt.
- strtoxxx-Bibliotheksfunktionen schlagen fehl (XC8-2620) Wenn die const-data-in-progmem-Funktion aktiviert war, wurde der endptr-Parameter in den strtoxxx-Bibliotheksfunktionen nicht richtig für Quell-String-Argumente aktualisiert, die sich nicht im Programmspeicher befinden.
- Warnungen für ungültige Umwandlungen (XC8-2612) Der Compiler gibt jetzt einen Fehler aus, wenn die Funktion „const-in-progmem“ aktiviert ist und die Adresse eines Zeichenfolgenliterals explizit in den Datenadressraum umgewandelt wird (wobei das const-Qualifikationsmerkmal gelöscht wird), z. Bample, (uint8_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 und const-flüchtige Objekte const
wurden nicht im Programmspeicher von Geräten abgelegt, die ihren Programmspeicher ganz oder teilweise dem Datenadressraum zuordnen. Für diese Geräte werden solche Objekte jetzt im Programmspeicher abgelegt, sodass ihre Funktionsweise mit der anderer Geräte übereinstimmt.
Version 2.39 (Funktionale Sicherheitsfreigabe)
Keiner.
Version 2.36
Fehler beim Verzögern (XC8-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 sie als Nichtkonstanten behandelt wurden und den Fehler auslösten: __builtin_avr_delay_cycles erwartet eine Ganzzahl zur Kompilierungszeit Konstante.
Version 2.35
- Kontinuierliche Zuweisung mit __at (XC8-2653) Die fortlaufende Zuweisung mehrerer Objektplätze in einem Abschnitt mit demselben Namen und mit __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 direkt nach arr1 platzieren sollen - Angeben von Abschnittsstartadressen (XC8-2650) Die Option -Wl,–section-start konnte stillschweigend fehlschlagen, Abschnitte an der nominierten Startadresse zu platzieren. Dieses Problem wurde für alle benutzerdefinierten Abschnitte behoben. Es funktioniert jedoch nicht für Standardabschnitte wie .text oder .bss, die mit der Option -Wl, -T platziert werden müssen. 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. In einem solchen Fall werden nun stattdessen Fehlermeldungen ausgegeben.
- Kein No-Fallback (XC8-2646) Die Option –nofallback 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 (XC8-2637) Bei der Auswahl von Optimierungen der Stufe 3 (-O3) wurden prozedurale Abstraktionsoptimierungen aktiviert. Diese Optimierungen verringern die Codegröße auf Kosten der Codegeschwindigkeit und hätten daher nicht durchgeführt werden dürfen.
- Schlechter EEPROM-Zugriff (XC8-2629) Die Routine eeprom_read_block funktionierte auf Xmega-Geräten nicht ordnungsgemäß, 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 Linker-Option -Ttext oder -Tdata (zampWenn die Datei, die mit der Treiberoption -Wl übergeben wird, angegeben wird, wurde der Ursprung des entsprechenden Text-/Datenbereichs aktualisiert. Allerdings wurde die Endadresse nicht entsprechend angepasst, was dazu hätte führen können, dass die Region den Speicherbereich des Zielgeräts überschreitet.
- Absturz bei ü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) Beim Erstellen für ATtiny-Geräte und bei deaktivierten Optimierungen (-O0) haben Interrupt-Funktionen möglicherweise einen Operanden außerhalb des zulässigen Bereichs ausgelöst
- Optionen werden nicht weitergegeben (XC8-2452) Bei Verwendung der Option -Wl mit mehreren, durch Kommas getrennten Linker-Optionen wurden nicht alle Linker-Optionen an den Linker übergeben.
- Fehler beim indirekten Lesen des Programmspeichers (XC8-2450) In einigen Fällen erzeugte der Compiler einen internen Fehler (nicht erkennbarer insn), als er einen Zwei-Byte-Wert von einem Zeiger auf den Programmspeicher las
Version 2.32
Zweiter Zugriff auf die Bibliothek schlägt fehl (XC8-2381) Der zweite Aufruf der Windows-Version des xc8-ar.exe-Bibliotheksarchivierers für den Zugriff auf ein vorhandenes Bibliotheksarchiv ist möglicherweise mit der Fehlermeldung „Umbenennung nicht möglich“ fehlgeschlagen.
Version 2.31
Unerklärliche Compiler-Fehler (XC8-2367) Beim Ausführen auf Windows-Plattformen, bei denen das temporäre Systemverzeichnis auf einen Pfad mit einem Punkt „.“ gesetzt war. Zeichen kann der Compiler möglicherweise nicht ausgeführt werden.
Version 2.30
- Globale Beschriftungen nach Gliederung falsch platziert (XC8-2299) Handgeschriebener Assemblercode, der globale Beschriftungen in Assemblersequenzen platziert, die durch prozedurale Abstraktion ausgeklammert wurden, wurde möglicherweise nicht korrekt neu positioniert.
- Absturz beim Relaxing (XC8-2287) Die Verwendung der Option -mrelax hat möglicherweise zum Absturz des Linkers geführt, wenn Tail-Jump-Relaxation-Optimierungen versuchten, ret-Anweisungen zu entfernen, die nicht am Ende eines Abschnitts standen.
- Absturz beim Optimieren von Beschriftungen als Werte (XC8-2282) Code, der die GNU-C-Spracherweiterung „Beschriftungen als Werte“ verwendet, hat möglicherweise zum Absturz der prozeduralen Abstraktionsoptimierungen mit einem Fehler bei der Korrektur von Bereichsspannen geführt.
- Nicht so const (XC8-2271) Die Prototypen für strstr() und andere Funktionen von Geben Sie nicht mehr das nicht standardmäßige Qualifikationsmerkmal für zurückgegebene Zeichenfolgenzeiger an, wenn die Funktion „const -mconst-data-in-progmem“ 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 in einem Abschnitt platziert wurde (mit __section oder __attribute__((section)) ) und die erste Variable dieser Art mit Null initialisiert wurde oder keinen Initialisierer hatte, werden Initialisierer für Andere Variablen in derselben Übersetzungseinheit, die im selben Abschnitt platziert waren, gingen verloren.
Version 2.29 (Funktionale Sicherheitsfreigabe)
Keiner.
Version 2.20
- Fehler bei langen Befehlen (XC8-1983) Bei Verwendung eines AVR-Ziels wurde der Compiler möglicherweise mit einem Fehler „Datei nicht gefunden“ gestoppt, wenn die Befehlszeile extrem groß war und Sonderzeichen wie Anführungszeichen, Backslashes 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
Version 2.19 (Funktionale Sicherheitsfreigabe)
Keiner.
Version 2.10
- Verschiebungsfehler (XC8-1891) Der am besten geeignete Allokator hinterließ nach der Linkerrelaxation Speicherlücken zwischen den Abschnitten. Abgesehen von der Fragmentierung des Speichers erhöhte sich dadurch die Wahrscheinlichkeit, dass Linker-Verlagerungsfehler auftreten, die auf PC-bezogene Sprünge oder Anrufe zurückzuführen sind, die außerhalb der Reichweite 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-388) Mehrere Definitionen von B. clock_div_t und clock_prescale_set(), wurden nicht für Geräte definiert, einschließlich ATmega324PB, ATmega328PB, ATtiny441 und ATtiny841.
- Fehlende Makros Die vom Compiler automatisch definierten Präprozessormakros _XC8_MODE_, __XC8_VERSION, __XC und __XC8. Diese sind ab sofort verfügbar.
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.
- Weggelassener 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 für das Programm keine globalen Variablen definiert waren, wurde der Laufzeitstartcode nicht beendet und die Funktion „main()“ 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 verbrauchen.
- Falsches Lesen des Programmspeichers (XC8-1783) Projekte, die für Geräte kompiliert wurden, deren Programmspeicher dem Datenadressraum zugeordnet ist und die Objekte mithilfe des PROGMEM-Makros/-Attributs 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() oder attribute() zwischen dem Zeigernamen und dem dereferenzierten Typ definiert haben, z. Bample, 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 Sicherungen mit dem Konfigurations-Pragma könnte zu einer falschen Dateninitialisierung und/oder zum Blockieren der Programmausführung im Laufzeit-Startcode geführt haben, bevor main( ).
- Sicherungsfehler bei winzigen Geräten (XC8-1778, XC8-1742) Die attiny4/5/9/10/20/40-Geräte hatten in ihren Headerdateien eine falsche Sicherungslänge angegeben, die zu Linkerfehlern führte, wenn versucht wurde, Code zu erstellen, der Sicherungen definierte .
- Segmentierungsfehler (XC8-1777) Ein intermittierender Segmentierungsfehler wurde behoben.
- Assembler-Absturz (XC8-1761) Der avr-as-Assembler könnte abgestürzt sein, als der Compiler unter Ubuntu 18 ausgeführt wurde.
- Objekte nicht gelöscht (XC8-1752) Nicht initialisierte Objekte für die statische Speicherdauer 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) Das Symbol __heap_start wurde falsch gesetzt, was dazu führte, dass gewöhnliche Variablen möglicherweise durch den Heap beschädigt wurden.
- Linker-Verschiebungsfehler (XC8-1739) Ein Linker-Verschiebungsfehler wurde möglicherweise ausgegeben, wenn der Code einen rjmp oder rcall mit einem Ziel enthielt, das genau 4 KB entfernt war.
Version 2.00
Keiner.
Bekannte Probleme
Im Folgenden finden Sie Einschränkungen beim Betrieb des Compilers. Hierbei kann es sich um allgemeine Einschränkungen bei der Codierung oder um Abweichungen von den im Benutzerhandbuch enthaltenen Informationen handeln. Die in Klammern gesetzten Bezeichnungen im Titel geben die Identifizierung dieses Problems in der Tracking-Datenbank an. Dies kann von Vorteil sein, wenn Sie den Support kontaktieren müssen. Bei den Artikeln ohne Kennzeichnung handelt es sich um Einschränkungen, die Modi Operandi beschreiben und voraussichtlich dauerhaft in Kraft bleiben.
MPLAB X IDE-Integration
- MPLAB IDE-Integration Wenn Compiler von MPLAB IDE verwendet werden soll, müssen Sie MPLAB IDE vor der Installation von Compiler installieren.
- Array-Debug-Informationen (XC8-3157) Die vom Compiler erzeugten Debug-Informationen geben den Objekttyp für Arrays im __memx-Adressraum nicht genau wieder. Dadurch wird die Beobachtung des Objekts in einer IDE verhindert.
Codegenerierung
- Segfault mit section-anchors-Option (XC8-3045) 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 die Anweisungen verkleinern (z. Bample-Aufruf an rcall-Anweisungen) bleiben Quellzeilen-Adresszuordnungen möglicherweise nicht synchron, wenn in einem Abschnitt mehr als ein Verkleinerungsvorgang ausgeführt wird. Im folgenden Beispielample, 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 den verfügbaren Speicher ausfüllen sollte Raum.
- Nicht so smart Smart-IO (XC8-2872) Die Smart-IO-Funktion des Compilers generiert gültigen, aber nicht optimalen Code für die snprintf-Funktion, wenn die const-data-in-progmem-Funktion deaktiviert wurde oder das Gerät über alle Funktionen verfügt Flash im Datenspeicher abgebildet.
- Noch weniger intelligentes Smart-IO (XC8-2869) Die Smart-IO-Funktion des Compilers generiert gültigen, aber nicht optimalen Code, wenn beide Optionen -flto und -fno-builtin 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 zuordnet. Die Wahrscheinlichkeit falsch platzierter Daten steigt, wenn die Funktion „const-data-in-progmem“ aktiviert ist, insbesondere wenn auch die Funktion „const-data-in-config-mapped-progmem“ aktiviert ist. Diese Funktionen können bei Bedarf deaktiviert werden.
- Verarbeitungsreihenfolge der Objektdateien (XC8-2863) Die Reihenfolge, in der Objektdateien vom Linker verarbeitet werden, kann je nach Verwendung prozeduraler Abstraktionsoptimierungen (Option -mpa) unterschiedlich sein. Dies würde nur Code betreffen, der schwache Funktionen über mehrere Module hinweg definiert.
- Linkerfehler mit Absolutwert (XC8-2777) Wenn ein Objekt an einer Adresse am Anfang des RAM absolut gemacht wurde und auch nicht initialisierte Objekte definiert wurden, kann ein Linkerfehler ausgelöst werden.
- Kurze Aktivierungs-IDs (XC8-2775) Bei ATA5700/2-Geräten sind die PHID0/1-Register nur als 16 Bit breit und nicht als 32 Bit breit definiert.
- Linker-Absturz beim Aufrufen eines Symbols (XC8-2758) Der Linker kann abstürzen, wenn die Treiberoption -mrelax verwendet wird, wenn der Quellcode ein Symbol aufruft, das mit der Linker-Option –Wl,–defsym definiert wurde.
- Falsche Initialisierung (XC8-2679) Es besteht 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.
- Ungültige indirekte Funktionsaufrufe (XC8-2628) In einigen Fällen können Funktionsaufrufe über einen als Teil einer Struktur gespeicherten Funktionszeiger fehlschlagen.
- strtof gibt Null für hexadezimale Gleitkommazahlen zurück (XC8-2626). Die Bibliotheksfunktionen strtof() et al. und scanf() et al. konvertieren eine hexadezimale Gleitkommazahl, die keinen Exponenten angibt, immer in Null. Zum Beispielample: strtof(“0x1”, &endptr); gibt den Wert 0 zurück, nicht 1.
- Ungenaue Stack-Advisor-Meldungen (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 bei doppeltem Interrupt-Code (XC8-2421) Wenn mehr als eine Interrupt-Funktion denselben Hauptteil 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 aufgerufen wird und eine „spec“-Datei für das ausgewählte Gerät vorhanden ist, meldet der Compiler nicht das fehlende Gerätefamilienpaket und wählt stattdessen die „spec“-Datei aus. Datei, was dann zu einer ungültigen Ausgabe führen könnte. Die „spec“-Dateien sind möglicherweise nicht mit den verteilten DFPs auf dem neuesten Stand und sollten nur für interne Compilertests verwendet werden.
- Speicherüberlappung nicht erkannt (XC8-1966) Der Compiler erkennt die Speicherüberlappung von Objekten, die an einer Adresse absolut gemacht wurden (über __at()) und anderen Objekten, die den __section()-Spezifizierer verwenden und mit derselben Adresse verknüpft sind, nicht.
- Fehler bei Bibliotheksfunktionen und __memx (XC8-1763) Aufgerufene libgcc-Floatfunktionen mit einem Argument im __memx-Adressraum schlagen möglicherweise fehl. Beachten Sie, dass Bibliotheksroutinen von einigen C-Operatoren aufgerufen werden, z. Bample ist folgender Code betroffen: return regFloatVar > memxFloatVar;
- Eingeschränkte 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) Programmspeicher-Images über 128 KB werden von der Toolchain unterstützt; Es gibt jedoch bekannte Fälle von Linker-Abbrüchen ohne Relaxation und ohne eine hilfreiche Fehlermeldung, anstatt die erforderlichen Funktionsstubs zu generieren, wenn die Option -mrelax verwendet wird.
- Einschränkungen des Namensraums (AVRTC-733) Benannte Adressräume werden von der Toolchain unterstützt, vorbehaltlich der im Abschnitt „Spezielle Typqualifizierer“ des Benutzerhandbuchs genannten Einschränkungen.
- Zeitzonen Die Bibliotheksfunktionen gehen von GMT aus und unterstützen keine lokalen Zeitzonen, daher gibt localtime() z. B. die gleiche Zeit wie gmtime() zurückample.
Dokumente / Ressourcen
![]() |
MICROCHIP XC8 C Compiler Version 2.45 Versionshinweise für AVR MCU [pdf] Anweisungen AVR MCU, XC8 C, XC8 C Compiler Version 2.45 Versionshinweise für AVR MCU, Compiler Version 2.45 Versionshinweise für AVR MCU, Version 2.45 Versionshinweise für AVR MCU, Versionshinweise für AVR MCU, Hinweise für AVR MCU, AVR MCU |

