MICROCHIP MPLAB XC8 C-Compiler-Software 

MICROCHIP MPLAB XC8 C-Compiler-Software

DIESES DOKUMENT ENTHÄLT WICHTIGE INFORMATIONEN ZUM MPLAB XC8 C-COMPILER FÜR DIE AUSRICHTUNG VON MICROCHIP AVR-GERÄTEN.
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.

Inhalt verstecken

Überview

Einführung

Diese Version des Microchip MPLAB® XC8 C-Compilers enthält mehrere neue Funktionen, Fehlerbehebungen und neue Geräteunterstützung.

Erstellungsdatum

Das offizielle Build-Datum dieser Compilerversion ist der 3. Juli 2022.

Vorherige Version

Die vorherige Version des MPLAB XC8 C-Compilers war 2.39, ein funktionaler Sicherheitscompiler, erstellt am 27. Januar 2022. Der vorherige Standardcompiler war Version 2.36, erstellt am 27. Januar 2022.

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-Compilers für AVR-MCUs werden unter der GNU General Public License (GPL) geschrieben und vertrieben, was bedeutet, dass der Quellcode frei verteilt und öffentlich verfügbar ist. 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 Lizenzierungssoftware sind für eine Vielzahl von Betriebssystemen verfügbar, darunter 64-Bit-Versionen der folgenden: Professional Editions von Microsoft Windows 10; Ubuntu 18.04; und macOS 10.15.5. Binärdateien für Windows wurden mit einem Code signiert. Binärdateien für Mac OS wurden mit einem Code signiert und notariell beglaubigt.

Wenn Sie einen Netzwerklizenzserver betreiben, dürfen nur Computer mit von den Compilern unterstützten Betriebssystemen als Host für den Lizenzserver verwendet werden. Ab xclm Version 2.0 kann der Netzwerklizenzserver auf einer Microsoft Windows Server-Plattform installiert werden, der Lizenzserver muss jedoch nicht auf einer Serverversion des Betriebssystems ausgeführt werden.

Unterstützte Geräte

Dieser Compiler unterstützt alle zum Zeitpunkt der Veröffentlichung bekannten 8-Bit-AVR-MCU-Geräte. Eine Liste aller unterstützten Geräte finden Sie (im doc-Verzeichnis des Compilers). Diese fileEs werden auch die Konfigurationsbiteinstellungen für jedes Gerät aufgelistet.

Editionen und Lizenz-Upgrades

Der MPLAB XC8-Compiler kann als lizenziertes (PRO) oder unlizenziertes (Free) Produkt aktiviert werden. Sie müssen einen Aktivierungsschlüssel erwerben, um Ihren Compiler zu lizenzieren. Eine Lizenz ermöglicht ein höheres Maß an Optimierung im Vergleich zum Free-Produkt. Ein unlizenzierter Compiler kann ohne Lizenz unbegrenzt betrieben werden.

Ein MPLAB XC8 Functional Safety-Compiler muss mit einer von Microchip erworbenen Functional Safety-Lizenz aktiviert werden. Ohne diese Lizenz funktioniert der Compiler nicht. Nach der Aktivierung können Sie jede Optimierungsstufe auswählen und alle Compilerfunktionen nutzen. Diese Version des MPLAB XC Functional Safety-Compilers 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).

Installation und Aktivierung

Siehe auch die Abschnitte Migrationsprobleme und Einschränkungen für wichtige Informationen über den neuesten Lizenzmanager, der in diesem Compiler enthalten ist.
Wenn Sie MPLAB IDE verwenden, installieren Sie unbedingt die neueste MPLAB X IDE-Version 5.0 oder höher, bevor Sie dieses Tool installieren. Beenden Sie die IDE, bevor Sie den Compiler installieren. Führen Sie das Compiler-Installationsprogramm .exe (Windows), .run (Linux) oder app (macOS) aus, z. B. XC8-1.00.11403-windows.exe, und folgen Sie den 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. Die Installation erfolgt über ein macOS-Konto mit Administratorrechten.

Die Aktivierung erfolgt nun separat zur Installation. Weitere Informationen finden Sie im Dokument License Manager for MPLAB® XC C Compilers (DS52059).

Wenn Sie 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 Roaming von Floating-Netzwerklizenzen. Diese Funktion richtet sich an mobile Benutzer und ermöglicht es, eine Floating-Lizenz für einen kurzen Zeitraum vom Netzwerk zu trennen. Mit dieser Funktion können Sie die Verbindung zum Netzwerk trennen und trotzdem Ihren MPLAB XC-Compiler verwenden. Weitere Informationen zu dieser Funktion finden Sie im Doc-Ordner der XCLM-Installation. MPLAB X IDE enthält ein Lizenzfenster (Tools > Lizenzen), um Roaming visuell zu verwalten.

Beheben von Installationsproblemen

Wenn bei der Installation des Compilers unter einem der Windows-Betriebssysteme Probleme auftreten, versuchen Sie die folgenden Vorschläge.

  • Führen Sie die Installation als Administrator aus.
  • Stellen Sie die Berechtigungen der Installationsanwendung auf „Vollzugriff“. (Klicken Sie mit der rechten Maustaste auf file, wählen Sie „Eigenschaften“, Registerkarte „Sicherheit“, wählen Sie „Benutzer“ und „Bearbeiten“.)
  • 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 file Der Explorer-Dialog zeigt dieses Verzeichnis an und ermöglicht Ihnen, den Pfad dieses Ordners zu ermitteln.

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.

Compiler-Dokumentation
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

Microchip freut sich über Fehlerberichte, Vorschläge oder Kommentare zu dieser Compiler-Version. Bitte richten Sie 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:

  • MUSL Copyright-Hinweis
  • Installieren und Lizenzieren von MPLAB XC C-Compilern (Revision M)
  • MPLAB XC8-Benutzerhandbuch für Embedded-Ingenieure – AVR-MCUs (Revision A)
  • MPLAB XC8 C Compiler Benutzerhandbuch für AVR MCU (Revision F)
  • Referenzhandbuch zur einheitlichen Standardbibliothek von Microchip (Revision B)

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 Compilerhandbuch 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 Ihr erstes MPLAB XC8 C-Projekt. Dieses Handbuch wird jetzt mit dem Compiler verteilt.

Das Hamate-Benutzerhandbuch wurde in das Verzeichnis „docs“ dieser Version aufgenommen. Dieses Handbuch richtet sich an Benutzer, die Hamate als eigenständige Anwendung ausführen.

Was ist neu

Im Folgenden sind die neuen AVR-Zielfunktionen aufgeführt, die der Compiler jetzt unterstützt. Die Versionsnummer in den Unterüberschriften gibt die erste Compilerversion an, die die folgenden Funktionen unterstützt.

Version 2.40

Unterstützung neuer Geräte Für die folgenden AVR-Teile ist jetzt Support 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 recall) enthält, skizziert werden kann. Dies geschieht nur, wenn der Stapel nicht verwendet wird, um Argumente an die Funktion zu übergeben oder einen Rückgabewert von der Funktion abzurufen. Der Stapel wird verwendet, wenn eine Funktion mit einer variablen Argumentliste aufgerufen wird oder wenn eine Funktion aufgerufen wird, die mehr Argumente annimmt, als Register für diesen Zweck vorgesehen sind. Diese Funktion kann mit der Option monk-pa-outline-calls deaktiviert werden, oder die prozedurale Abstraktion kann für ein Objekt vollständig deaktiviert werden. file oder funktionieren durch die Verwendung von -monk-pa-on-file bzw. -mo.-pa-on-function oder durch die selektive Verwendung des nipa-Attributs ( nipa-Spezifizierer) mit Funktionen

Codeabdeckungsmakro Der Compiler definiert jetzt das Makro __CODECOV, wenn eine gültige mcodecov-Option 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 entweder im Daten- oder im Programmspeicherbereich und verhindert, dass der Linker Code oder Objekte in diesem Bereich füllt.

Intelligentere IO An den Smart IO-Funktionen wurden mehrere Verbesserungen vorgenommen, darunter allgemeine Anpassungen am printf-Kerncode, die Behandlung des %n-Konvertierungsspezifizierers als unabhängige Variante, die Einbindung von Vararg-Pop-Routinen bei Bedarf, die Verwendung kürzerer Datentypen zur Handhabung von IO-Funktionsargumenten, soweit möglich, und die Berücksichtigung gemeinsamen Codes bei der Handhabung von Feldbreite und Präzision. Dies kann zu erheblichen Code- und Dateneinsparungen führen und die Ausführungsgeschwindigkeit von IO erhöhen.

Version 2.39 (Funktionale Sicherheitsfreigabe)

Netzwerkserver-Lizenz Diese Version des MPLAB XC8 Functional Safety Compiler unterstützt die Network Server License.

Version 2.36

Keiner.

Version 2.35

Unterstützung neuer Geräte Für die folgenden AVR-Teile ist Support verfügbar: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 und AVR64DD32.

Verbesserter Kontextwechsel Die neue Option -mcall-isr-prologues ändert, wie Interruptfunktionen Register beim Eintritt speichern und wie diese Register wiederhergestellt werden, wenn die Interruptroutine beendet wird. Sie funktioniert ähnlich wie die Option -mcall-prologues, betrifft aber nur Interruptfunktionen (ISRs).

Noch weiter verbesserter Kontextwechsel Die neue Option -mgas-isr-prologues steuert den Kontextcode, der für kleine Interrupt-Serviceroutinen generiert wird. Wenn diese Funktion aktiviert ist, durchsucht der Assembler den ISR nach Registernutzung und speichert diese verwendeten Register nur bei Bedarf.

Konfigurierbares Flash-Mapping Einige Geräte der AVR DA- und AVR DB-Familie verfügen über ein SFR (z. B. FLMAP), das angibt, welcher 32-kB-Abschnitt des Programmspeichers in den Datenspeicher abgebildet wird. Mit der neuen Option – mconst-data-in-config-mapped-proem kann der Linker alle Cons-qualifizierten Daten in einem 32-kB-Abschnitt platzieren und das entsprechende SFR-Register automatisch initialisieren, um sicherzustellen, dass diese Daten in den Datenspeicherbereich abgebildet werden, wo sie effektiver abgerufen werden können.

Einheitliche Standardbibliotheken von Microchip Alle MPLAB XC-Compiler nutzen eine Microchip Unified Standard Library, die jetzt mit dieser Version von MPLAB XC8 verfügbar ist. Das MPLAB® XC8 C Compiler-Benutzerhandbuch/oder AVR® MCU enthält keine Dokumentation mehr für diese Standardfunktionen. 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 Librar):'. functionalitY…)

Intelligente IO Als Teil der neuen vereinheitlichten Bibliotheken werden IO-Funktionen in den Druck- und Scanfamilien jetzt bei jedem Build benutzerdefiniert generiert, basierend darauf, wie diese Funktionen im Programm verwendet werden. Dadurch können die von einem Programm verwendeten Ressourcen erheblich reduziert werden.
Smart IO-Unterstützungsoption Beim Analysieren von Aufrufen intelligenter IO-Funktionen (wie printf () oder scanf () ) kann der Compiler nicht immer aus der Formatzeichenfolge oder aus den Argumenten die vom Aufruf benötigten Konvertierungsspezifizierer ableiten. Bisher hat der Compiler immer keine Annahmen getroffen und sichergestellt, dass voll funktionsfähige IO-Funktionen in das endgültige Programmbild eingebunden wurden. Eine neue Option – msmart-io-format=fmt wurde hinzugefügt, damit der Compiler stattdessen vom Benutzer über die von intelligenten IO-Funktionen verwendeten Konvertierungsspezifizierer informiert werden kann, deren Verwendung mehrdeutig ist, wodurch verhindert wird, dass übermäßig lange IO-Routinen eingebunden werden. (Weitere Einzelheiten finden Sie unter Option smart-io-format.)

Platzieren von benutzerdefinierten Abschnitten 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 am besten geeignete Allocator weiterhin die vollständige Kontrolle über deren Platzierung hat und die Option keine Auswirkung hat. Verwenden Sie die Option -Wl, -Tsection=add, wie im Benutzerhandbuch beschrieben.

Version 2.32

Stapelanleitung Die mit einer PRO-Compilerlizenz verfügbare Stack Guidance-Funktion des Compilers kann verwendet werden, um die maximale Tiefe eines von einem Programm verwendeten Stacks abzuschätzen. Sie 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 Stack-Bericht ist in der Karte verfügbar file, die wie gewohnt angefordert werden können.

Unterstützung für neue Geräte ist für die folgenden AVR-Teile verfügbar: ATTINY 427, ATTINY 424, ATTINY 426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 und AVR32DB48.

Eingefahrene Gerätehalterung Unterstützung ist für die folgenden AVR-Teile nicht mehr verfügbar: AVR16DA28, AVR16DA32 und AVR16DA48.

Version 2.31

Keiner.

Version 2.30

Neue Option zum Verhindern der Dateninitialisierung Eine neue Treiberoption -mno-data-ini t verhindert die Initialisierung von Daten und das Löschen von BSS-Abschnitten. Dies funktioniert, indem die Ausgabe der Symbole do_copy_data und do_clear_bss in Assembler unterdrückt wird. files, was wiederum die Einbeziehung dieser Routinen durch den Linker verhindert.

Verbesserte Optimierungen Eine Reihe von Optimierungsverbesserungen wurden vorgenommen, darunter das Entfernen redundanter Rückgabebefehle, das Entfernen einiger Sprünge nach einem Skip-if-bit-is-Befehl sowie eine verbesserte prozedurale Abstraktion und die Möglichkeit, diesen Prozess zu wiederholen.

Es sind jetzt zusätzliche Optionen verfügbar, um einige dieser Optimierungen zu steuern, insbesondere -f section anchors, das den Zugriff auf statische Objekte relativ zu einem Symbol ermöglicht; -mpai derations=n, das die Änderung der Anzahl der Iterationen der prozeduralen Abstraktion vom Standardwert 2 ermöglicht; und -mpa- call cost- shortcall, das eine aggressivere prozedurale Abstraktion durchführt, in der Hoffnung, dass der Linker lange Aufrufe entlasten kann. Diese letzte Option kann die Codegröße erhöhen, wenn die zugrunde liegenden Annahmen nicht erfüllt werden.

Unterstützung neuer Geräte Support ist verfügbar für die folgenden AVR-Teile: AVR16DA28, AVR16DA32,
AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 und AVR128DB64.

Unterstützung für eingefahrene Geräte Für die folgenden AVR-Teile wird kein Support mehr angeboten: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C und ATA664251.

Version 2.29 (Funktionale Sicherheitsfreigabe)

Kopfbereich file für Compiler-Built-Ins Um sicherzustellen, dass der Compiler Sprachspezifikationen wie MISRA einhält, Header file, das automatisch einbezogen wird durch , wurde aktualisiert. Dieser Header enthält die Prototypen für alle integrierten Funktionen, wie _buil tin _avrnop () und _buil tin_ avr delay_ cycles (). Einige integrierte Funktionen sind möglicherweise nicht MISRA-kompatibel; diese können weggelassen werden, indem der Compiler-Befehlszeile das Attribut define _Xe_ STRICT_ MISRA hinzugefügt wird. Die integrierten Funktionen und ihre Deklarationen wurden aktualisiert, um Typen mit fester Breite zu verwenden.

Version 2.20

Unterstützung neuer Geräte Für die folgenden AVR-Teile ist Support verfügbar: ATTINY1624, ATTINY1626 und ATTINY1627.

Bessere Best-Fit-Zuteilung Der Best Fit Allocator (BFA) im Compiler wurde verbessert, sodass Abschnitte in einer Reihenfolge zugewiesen werden, die eine bessere Optimierung ermöglicht. Der BFA unterstützt jetzt benannte Adressräume und verarbeitet die Dateninitialisierung besser.

Verbesserte prozedurale Abstraktion Die prozeduralen Abstraktionsoptimierungen werden jetzt für mehr Codesequenzen durchgeführt. Frühere Situationen, in denen diese Optimierung möglicherweise die Codegröße erhöht hätte, wurden dadurch behoben, dass der Optimierungscode auf den Garbage Collection-Prozess des Linkers aufmerksam gemacht wurde.

Fehlen eines AVR-Assemblers Der AVR-Assembler ist in dieser Distribution nicht mehr enthalten.

Version 2.19 (Funktionale Sicherheitsfreigabe)

Keiner.

Version 2.10

Code Coverage Diese Version enthält eine Code Coverage-Funktion, die die Analyse des Umfangs der Ausführung des Quellcodes eines Projekts erleichtert. Verwenden Sie die Option -mcodecov=ram, um sie zu aktivieren. Nach der Ausführung des Programms auf Ihrer Hardware werden Code Coverage-Informationen im Gerät gesammelt und können über ein Code Coverage-Plugin an die MPLAB X IDE übertragen und dort angezeigt werden. Informationen zu diesem Plugin finden Sie in der IDE-Dokumentation. Das #pragma mcodecov kann verwendet werden, um nachfolgende Funktionen von der Coverage-Analyse auszuschließen. Idealerweise sollte das Pragma am Anfang des file das ganze auszuschließen file von der Abdeckungsanalyse ausgeschlossen werden. Alternativ kann das Attribut ( (mcodecov) ) verwendet werden, um eine bestimmte Funktion von der Abdeckungsanalyse auszuschließen.

Gerätebeschreibung files Ein neues Gerät file namens avr chipinfo.html befindet sich im docs-Verzeichnis der Compiler-Distribution. Diese file listet alle vom Compiler unterstützten Geräte auf. Klicken Sie auf einen Gerätenamen, und es öffnet sich eine Seite mit allen zulässigen Konfigurationsbiteinstellungs-/Wertpaaren für dieses Gerät, mit Beispielamples.

Prozedurale Abstraktion Dem Compiler wurden prozedurale Abstraktionsoptimierungen hinzugefügt, die 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 höher 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 werden. Auf niedrigeren Optimierungsstufen (je nach Lizenz) kann sie mit -mpa aktiviert werden. Sie kann für ein Objekt deaktiviert werden. file mit -mno-pa-on-file=fileName oder für eine Funktion durch Verwendung von -mno-pa für function= function deaktiviert.
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 zum Attribut ( (nopa, noinline)) erweitert wird und somit die Inline-Erstellung von Funktionen und die Abstraktion von Inline-Code verhindert.
Sperrbit-Unterstützung in Pragma Mit #pragma config können nun die AVR-Sperrbits sowie die anderen Konfigurationsbits angegeben werden. Überprüfen Sie die AVR-Chip-Informationen. html file (siehe oben) für die mit diesem Pragma zu verwendenden Einstellungs-/Wertpaare.
Unterstützung neuer Geräte Für die folgenden Teile ist Support verfügbar: AVR28DA128, AVR64DA128, AVR32DA128 und AVR48DA128.

Version 2.05

Mehr für Ihr Geld Die macOS-Version dieses Compilers und Lizenzmanagers ist jetzt eine 64-Bit-Anwendung. Dadurch wird sichergestellt, dass der Compiler auf neueren Versionen von macOS ohne Warnungen installiert und ausgeführt wird.
Konstante Objekte im Programmspeicher Der Compiler kann jetzt konstante Objekte im Programm-Flash-Speicher platzieren, anstatt diese im RAM zu speichern. Der Compiler wurde so geändert, dass konstante globale Daten im Programm-Flash-Speicher gespeichert werden und auf diese Daten direkt und indirekt mit den entsprechenden Programmspeicheranweisungen zugegriffen werden kann. Diese neue Funktion ist standardmäßig aktiviert, kann aber mit der Option -mno-const-data-in-progmem deaktiviert werden. Für avrxmega3- und avrtiny-Architekturen ist diese Funktion nicht erforderlich und immer deaktiviert, da der Programmspeicher für diese Geräte in den Datenadressraum abgebildet wird.
Standard kostenlos Nicht lizenzierte (kostenlose) Versionen dieses Compilers ermöglichen jetzt Optimierungen bis einschließlich Level 2. Dies ermöglicht eine ähnliche, wenn auch nicht identische Ausgabe wie zuvor mit einer Standardlizenz.
Willkommen AVRASM2 Der AVRASM2-Assembler für 8-Bit-Geräte ist jetzt im XC8-Compiler-Installationsprogramm enthalten. Dieser Assembler wird vom XC8-Compiler nicht verwendet, ist aber für Projekte verfügbar, die auf handgeschriebenen Assemblerquellen basieren.
Unterstützung neuer Geräte Für die folgenden Teile ist Support verfügbar: ATMEGA1608, ATMEGA1609, ATMEGA808 und ATMEGA809.

Version 2.00

Fahrer auf höchstem Niveau Ein neuer Treiber namens xc8-cc sitzt jetzt über dem vorherigen avr-gcc-Treiber und dem xc8-Treiber und kann den entsprechenden Compiler basierend auf der Auswahl des Zielgeräts aufrufen. Dieser Treiber akzeptiert Optionen im GCC-Stil, die entweder übersetzt oder an den ausgeführten Compiler weitergegeben werden. Dieser Treiber ermöglicht die Verwendung eines ähnlichen Optionssatzes mit ähnlicher Semantik mit jedem AVR- oder PIC-Ziel und ist daher die empfohlene Methode zum Aufrufen des Compilers. Bei Bedarf kann der alte avr-gcc-Treiber direkt mit den Optionen im alten Stil aufgerufen werden, die er in früheren Compilerversionen akzeptiert hat.

Gemeinsame C-Schnittstelle Dieser Compiler kann jetzt der MPLAB Common C Interface entsprechen, sodass Quellcode einfacher auf alle MPLAB XC-Compiler portiert werden kann. Die Option -mext=cci fordert diese Funktion an und ermöglicht eine alternative Syntax für viele Spracherweiterungen.

Neuer Bibliothekar-Fahrer Ein neuer Bibliothekartreiber wird über dem bisherigen PIC libr-Bibliothekar und dem AVR avr-ar-Bibliothekar positioniert. Dieser Treiber akzeptiert Optionen im GCC-Archiver-Stil, die entweder für den ausgeführten Bibliothekar übersetzt oder an diesen weitergegeben werden. Der neue Treiber ermöglicht die Verwendung eines ähnlichen Satzes von Optionen mit ähnlicher Semantik zum Erstellen oder Bearbeiten beliebiger PIC- oder AVR-Bibliotheken. file und ist daher die empfohlene 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 vom Compiler jetzt anders gehandhabt. Diese Änderungen können eine Anpassung Ihres Quellcodes erforderlich machen, wenn Sie Code auf diese Compilerversion portieren. Die Versionsnummer in den Unterüberschriften gibt die erste Compilerversion an, die die folgenden Änderungen unterstützt.

Version 2.40

Keiner.

Version 2.39 (Funktionale Sicherheitsfreigabe)

Keiner.

Version 2.36

Keiner.

Version 2.35

Handhabung von String-to-Basen (XCS-2420) Um die Konsistenz mit anderen XC-Compilern zu gewährleisten, 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 setzen stattdessen errno auf EINVAL. Der C-Standard spezifiziert nicht das Verhalten der Funktionen, wenn dieser Basiswert überschritten wird.

Unangemessene Geschwindigkeitsoptimierungen Bei der Auswahl von Optimierungen der Ebene 3 (-03) wurden prozedurale Abstraktionsoptimierungen aktiviert. Diese Optimierungen reduzieren die Codegröße auf Kosten der Codegeschwindigkeit und hätten daher nicht durchgeführt werden sollen. Projekte, die diese Optimierungsstufe verwenden, sehen möglicherweise Unterschiede in der Codegröße und Ausführungsgeschwindigkeit, wenn sie mit dieser Version erstellt werden.

Bibliotheksfunktion Der Code für viele der Standardfunktionen der C-Bibliothek stammt jetzt aus der Unified Standard Library von Microchip, die unter Umständen ein anderes Verhalten aufweisen kann als die frühere avr-libc-Bibliothek. Zum Beispielample ist es nicht mehr notwendig, die lprintf_flt-Bibliothek einzubinden (Option -print _flt), um die formatierte IO-Unterstützung für Float-Formatspezifizierer zu aktivieren. Die intelligenten IO-Funktionen der Microchip Unified Standard Library machen diese Option überflüssig. Darüber hinaus ist die Verwendung von Routinen mit der Endung _p für String- und Speicherfunktionen (z. B. strcpy_P() usw.), die mit konstanten Strings im Flash arbeiten, nicht mehr erforderlich. Die Standard-C-Routinen (z. B. strcpy()) funktionieren mit solchen Daten ordnungsgemäß, 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.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.

Version 2.19 (Funktionale Sicherheitsfreigabe)

Keiner.

Version 2.10

Keiner

Version 2.05

Const-Objekte im Programmspeicher Beachten Sie, dass die standardmäßig als const qualifizierten Objekte im Programmspeicher abgelegt und aufgerufen werden (wie hier beschrieben). Dies wirkt sich auf die Größe und Ausführungsgeschwindigkeit Ihres Projekts aus, sollte aber den RAM-Verbrauch reduzieren. Diese Funktion kann bei Bedarf mit der Option -mnoconst- data-in-progmem deaktiviert werden.

Version 2.00

Konfigurationssicherungen Die Gerätekonfigurationssicherungen können nun mit einem Konfigurationspragma programmiert werden, gefolgt von Einstellungs-Wert-Paaren, um den Sicherungsstatus anzugeben, z. B.
#pragma config WDT0N = SET
#pragma config B0DLEVEL = B0DLEVEL_4V3
Absolute Objekte und Funktionen Objekte und Funktionen können nun mit dem CCI _at (Adress-)Spezifizierer an bestimmten Adressen im Speicher platziert werden, zum Beispielample: #einschließen int foobar at(Ox800100); char at(Ox250) get ID(int offset) { … } Das Argument für diesen Spezifizierer muss eine Konstante sein, die die Adresse darstellt, an der das erste Byte oder die erste Anweisung platziert wird. RAM-Adressen werden durch einen Offset von 0x800000 angegeben. Aktivieren Sie das CCI, um diese Funktion zu verwenden.
Neue Interrupt-Funktionssyntax Der Compiler akzeptiert jetzt den CCI-Interrupt-Spezifizierer (num), um anzugeben, dass C-Funktionen Interrupt-Handler sind. Der Spezifizierer akzeptiert eine Interrupt-Nummer, z. B.ample: #einschließen 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 die Funktionsweise des Compilers so ändern, wie es beabsichtigt oder im Benutzerhandbuch angegeben ist. Die Versionsnummer in den Unterüberschriften gibt die erste Compilerversion an, die Korrekturen für die folgenden Probleme enthält. Die eingeklammerten Beschriftungen im Titel sind die Identifikation des Problems in der Tracking-Datenbank. Diese können hilfreich sein, wenn Sie sich an den Support wenden müssen.

Beachten Sie, dass einige gerätespezifische Probleme im Device Family Pack (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.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.
Die Zuordnungsfunktion ist nicht wie in der Warnung angegeben deaktiviert (XCS-2875). Die Funktion cost-data-in-config-mappedprogmem ist davon abhängig, dass die Funktion cost-data-in-proem aktiviert ist. Wenn die Funktion cost-data-ipconfig-mapped-proem explizit mit der Option aktiviert und die Funktion cost-data-inprogmem deaktiviert wurde, schlug der Verknüpfungsschritt fehl, obwohl eine Warnmeldung angezeigt wurde, dass die Funktion cons data-in-config-mapped-proem automatisch deaktiviert wurde, was nicht ganz korrekt war. Die Funktion const-data-in-config-mapped-proem ist in dieser Situation jetzt vollständig deaktiviert.
DFP-Änderungen für den korrekten Zugriff auf NVMCTRL (XCS-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 IO SFR nicht auf die Seite setzen, die von der Compilerfunktion const-data-in configmapped-proem verwendet wurde. Änderungen in AVR-Ex_DFP Version 2.2.55 ermöglichen dem Runtime-Startcode, korrekt in dieses Register zu schreiben.
DFP-Änderungen zur Vermeidung von Flash-Mapping (XCS-2847) Ein Workaround für ein Problem mit der Flash-Mapping-Gerätefunktion, das in den AVR128DA28/32/48/64 Silicon Errata (DS80000882) gemeldet wurde, wurde implementiert. Die Compilerfunktion const-data-in-config-mapped-proem wird für betroffene Geräte standardmäßig nicht angewendet, und diese Änderung wird in AVR-Ex_DFP Version 2.2.160 erscheinen.
Build-Fehler mit sinhf oder coshf (XCS-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 (XCS-2833) Die Verwendung des Attributs nopa mit einer Funktion, deren Assemblername mit as() angegeben wurde, löste Fehlermeldungen vom Assembler aus. Diese Kombination ist nicht möglich.
Variadic-Funktionsfehler mit Zeigerargumenten (XCS-2755, XCS-2731) Funktionen mit einer variablen Anzahl von Argumenten erwarten, dass 24-Bit-Zeiger (Typ _memo) in der variablen Argumentenliste übergeben werden, wenn die Funktion „const-data-in-proem“ aktiviert ist. Argumente, die Zeiger auf den Datenspeicher waren, wurden als 16-Bit-Objekte übergeben, was zu Codefehlern führte, wenn sie schließlich gelesen wurden. Wenn die Funktion „const-data-in-proem“ aktiviert ist, werden alle 16-Bit-Zeigerargumente jetzt in 24-Bit-Zeiger konvertiert. Fehler bei den Funktionen der strtoxxx-Bibliothek (XCS-2620) Wenn die Funktion „const-data-in-proem“ aktiviert war, wurde der Eingabeparameter in den Funktionen der strtoxxx-Bibliothek für Quellzeichenfolgenargumente, die sich nicht im Programmspeicher befanden, nicht richtig aktualisiert.
Warnungen bei ungültigen Casts (XCS-2612) Der Compiler gibt nun einen Fehler aus, wenn die Cost-in-Proem-Funktion aktiviert ist und die Adresse eines Stringliterals explizit in den Datenadressraum umgewandelt wird (wobei der const-Qualifizierer gelöscht wird), z. B.ample, (uint8 t *) „Hallo Welt!“. Eine Warnung wird ausgegeben, wenn die Adresse möglicherweise ungültig ist, wenn ein konstanter Datenzeiger explizit in den Datenadressraum umgewandelt wird.
Platzierung nicht initialisierter const-Objekte (XCS-2408) Nicht initialisierte const- und const volatile-Objekte wurden auf Geräten, die ihren gesamten oder einen Teil ihres Programmspeichers in den Datenadressraum abbilden, nicht im Programmspeicher abgelegt. Für diese Geräte werden solche Objekte jetzt im Programmspeicher abgelegt, wodurch ihre Funktionsweise mit der anderer Geräte konsistent wird.

Version 2.39 (Funktionale Sicherheitsfreigabe)

Keiner.

Version 2.36

Fehler beim Verzögern (XCS-2774) Kleinere Änderungen in den Standardoptimierungen im freien Modus verhinderten die konstante Faltung von Operandenausdrücken in die integrierten Verzögerungsfunktionen, was dazu führte, dass diese als Nichtkontakte behandelt wurden und den Fehler auslösten: _buil tin avr delay_ cycles expects a compile time integer constant.

Version 2.35

Kontinuierliche Zuordnung mit _at (XCS-2653) Die zusammenhängende Zuordnung mehrerer Objekte in einem Abschnitt mit gleichem Namen und Verwendung von at() funktionierte nicht korrekt. Beispielsweiseample: constchararrl [ ] bei tri butte ((sect on(“.misses“))) bei (Ox50 0 ) = {Oxo , Ox CD} ; cost char arr2[ ] bei tri butte ((section(“.my s eke“))) = {Oxen, Ox FE }; arr2 hätte direkt nach aril platziert werden sollen.
Festlegen von Abschnittsstartadressen (XCS-2650) Die Option -Wal, –section-start konnte Abschnitte nicht unbemerkt an der angegebenen Startadresse platzieren. Dieses Problem wurde für alle benutzerdefinierten Abschnitte behoben. Es funktioniert jedoch nicht für Standardabschnitte wie . text oder . bss, die mit der Option -Wl, -T platziert werden müssen.
Linker stürzt beim Entspannen ab (XCS-2647) Wenn die -relax-Optimierung aktiviert war und Code- oder Datenabschnitte vorhanden waren, die nicht in den verfügbaren Speicher passten, stürzte der Linker ab. Jetzt werden in einem solchen Fall stattdessen Fehlermeldungen ausgegeben.
Ungültiger EEPROM-Zugriff (XCS-2629) Die Leproma-Blockroutine „_read_“ funktionierte auf Mega-Geräten nicht richtig, wenn die Option „-monist-data-in-proem“ aktiviert war (was der Standardzustand ist), was dazu führte, dass der EEPROM-Speicher nicht richtig gelesen wurde.
Ungültige Speicherzuweisung (XCS-2593, XCS-2651) Wenn die Linkeroption -Text oder -Tata (z. B.ampBei der Angabe einer mit der Treiberoption -Wl durchgereichten Datei (Datei) wurde der entsprechende Text-/Datenbereichsursprung aktualisiert; die Endadresse wurde jedoch nicht entsprechend angepasst, was dazu führen konnte, dass der Bereich den Speicherbereich des Zielgeräts überschritt.
Ungültiger ATtiny-Interruptcode (XCS-2465) Beim Erstellen für Tatin-Geräte und wenn die Optimierungen deaktiviert waren (-00), haben Interruptfunktionen möglicherweise Assemblermeldungen ausgelöst, dass ein Operand außerhalb des gültigen Bereichs liegt.
Optionen werden nicht weitergegeben (XCS-2452) Bei Verwendung der Option -Wl mit mehreren, durch Kommas getrennten Linkeroptionen wurden nicht alle Linkeroptionen an den Linker übergeben.
Fehler beim indirekten Lesen des Programmspeichers (XCS-2450) In einigen Fällen erzeugte der Compiler einen internen Fehler (nicht erkennbarer Insn) beim Lesen eines Zwei-Byte-Wertes von einem Zeiger in den Programmspeicher

Version 2.32

Zweiter Zugriff auf die Bibliothek schlägt fehl (XCS-2381) Der zweite Aufruf der Windows-Version des Bibliotheksarchivierungsprogramms xc8-ar.exe zum Zugriff auf ein vorhandenes Bibliotheksarchiv ist möglicherweise mit der Fehlermeldung „Umbenennen nicht möglich“ fehlgeschlagen.

Version 2.31

Unerklärliche Compilerfehler (XCS-2367) Bei der Ausführung auf Windows-Plattformen, bei denen das temporäre Systemverzeichnis auf einen Pfad eingestellt war, der ein Punktzeichen (.) enthielt, konnte der Compiler möglicherweise nicht ausgeführt werden.

Version 2.30

Globale Beschriftungen nach der Gliederung falsch platziert (XCS-2299) Handgeschriebener Assemblercode, der globale Beschriftungen in Assemblersequenzen platziert, die durch prozedurale Abstraktion ausgeklammert werden, wurde möglicherweise nicht korrekt neu positioniert.
Ein entspannender Absturz (XCS-2287) Die Verwendung der Option -merlad konnte möglicherweise einen Absturz des Linker verursachen, wenn Tail-Jump-Relaxationsoptimierungen versuchten, Ret-Anweisungen zu entfernen, die sich nicht am Ende eines Abschnitts befanden.
Absturz beim Optimieren von Beschriftungen als Werte (XCS-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 (XCS-2271) Die Prototypen für Starts () und andere Funktionen aus Geben Sie den nicht standardmäßigen Kostenqualifizierer für zurückgegebene Zeichenfolgenzeiger nicht mehr an, wenn die Inprogmem-Funktion -monist-data deaktiviert ist. Beachten Sie, dass diese Funktion bei avrxmega3- und avertin-Geräten dauerhaft aktiviert ist.
Verlorene Initialisierer (XCS-2269) Wenn mehr als eine Variable einer Übersetzungseinheit in einen Abschnitt eingefügt wurde (mithilfe von Abschnitt oder Attribut ((Abschnitt)))) und die erste dieser Variablen mit null initialisiert war oder keinen Initialisierer hatte, gingen Initialisierer für andere Variablen in derselben Übersetzungseinheit, die im selben Abschnitt eingefügt wurden, verloren.

Version 2.29 (Funktionale Sicherheitsfreigabe)

Keiner.

Version 2.20

Fehler bei langen Befehlen (XCS-1983) Bei Verwendung eines AVR-Ziels stoppte der Compiler möglicherweise mit einem file nicht gefunden Fehler, wenn die Befehlszeile sehr groß war und Sonderzeichen wie Anführungszeichen, Backslashes etc.
Nicht zugewiesener Rodata-Abschnitt (XCS-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

Umzugsfehler (XCS-1891) Der am besten geeignete Allocator ließ nach der Linker-Relaxation Speicherlücken zwischen den Abschnitten. Abgesehen von der Fragmentierung des Speichers erhöhte dies die Möglichkeit von Linker-Verlagerungsfehlern im Zusammenhang mit PC-relativen Sprüngen oder Aufrufen, die außerhalb des Bereichs liegen.
Anweisungen, die nicht durch Entspannung transformiert werden (XCS-1889) Bei Sprung- oder Aufrufanweisungen, deren Ziele bei Lockerung erreichbar werden, trat keine Linker-Entspannung auf.
Fehlen Funktionalität (XCSE-388) Mehrere Definitionen aus , wie clock_div_t und clock_prescale_set(), wurden für Geräte wie ATmega324PB, ATmega328PB, ATtiny441 und ATtiny841 nicht definiert.
Fehlende Makros Die Präprozessormakros _xcs_MODE_, _xcs_VERSION, _xc und xcs wurden vom Compiler nicht automatisch definiert. Diese sind nun verfügbar.

Version 2.05

Interner Compilerfehler (XCS-1822) Beim Erstellen unter Windows ist möglicherweise bei der Codeoptimierung ein interner Compilerfehler aufgetreten.
Kein RAM-Überlauf erkannt (XCS-1800, XCS-1796) Programme, die den verfügbaren RAM überschritten, wurden in einigen Situationen vom Compiler nicht erkannt, was zu einem Laufzeitcodefehler führte.
Fehlender Flash-Speicher (XCS-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 (XCS-1788) In einigen Situationen, in denen im Programm keine globalen Variablen definiert waren, wurde der Startcode der Laufzeit nicht beendet und die main()-Funktion wurde nie erreicht.
Falsche Speicherinformationen (XCS-1787) Bei avrxmega3- und avrtiny-Geräten meldete das avr-size-Programm, dass schreibgeschützte Daten RAM statt Programmspeicher verbrauchten.
Fehlerhaftes Lesen des Programmspeichers (XCS-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 mit Attributen (XCS-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 ( 0x80015 0) cp; Beim Auftreten eines solchen Codes wird jetzt eine Warnung ausgegeben.
Fehler beim Ausführen von main (XCS-1780, XCS-1767, XCS-1754) Die Verwendung von EEPROM-Variablen oder das Definieren von Sicherungen mithilfe des Konfigurationspragmas könnte eine falsche Dateninitialisierung verursacht und/oder die Programmausführung im Startcode zur Laufzeit blockiert haben, bevor main() erreicht wurde.
Sicherungsfehler bei Kleinstgeräten (XCS-1778, XCS-1742) Bei den Geräten attiny4/5/9/10/20/40 war in der Kopfzeile eine falsche Sicherungslänge angegeben files, die zu Linkerfehlern führen, wenn versucht wird, Code zu erstellen, der Fuses definiert.
Segmentierungsfehler (XCS-1777) Ein zeitweise auftretender Segmentierungsfehler wurde behoben.
Assembler-Absturz (XCS-1761) Möglicherweise ist der avr-as-Assembler abgestürzt, als der Compiler unter Ubuntu 18 ausgeführt wurde.
Objekte nicht gelöscht (XCS-1752) Nicht initialisierte statische Speicherdauerobjekte wurden möglicherweise nicht vom Runtime-Startcode gelöscht.
Widersprüchliche Gerätespezifikation ignoriert (XCS-1749) Der Compiler generierte keinen Fehler, wenn mehrere Gerätespezifikationsoptionen verwendet wurden und unterschiedliche Geräte anzeigten.
Speicherbeschädigung durch Heap (XCS-1748) Das Heap_Startsymbol wurde falsch gesetzt, was dazu führen konnte, dass normale Variablen durch den Heap beschädigt wurden.
Fehler bei der Linker-Verschiebung (XCS-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.

Version 2.00

Keiner.

Bekannte Probleme

Im Folgenden sind Einschränkungen bei der Funktionsweise des Compilers aufgeführt. Dies können allgemeine Codierungsbeschränkungen sein oder
Abweichungen von den Informationen im Benutzerhandbuch. Die eingeklammerten Beschriftungen im Titel sind die Identifikation des Problems in der Tracking-Datenbank. Dies kann hilfreich sein, wenn Sie den Support kontaktieren müssen. Bei den Elementen ohne Beschriftung handelt es sich um Einschränkungen, die die Vorgehensweise beschreiben und wahrscheinlich dauerhaft in Kraft bleiben.

MPLAB X IDE-Integration

MPLAB IDE-Integration Wenn der Compiler von MPLAB IDE aus verwendet werden soll, müssen Sie MPLAB IDE vor der Installation des Compilers installieren.

Codegenerierung

Fehler bei der PA-Speicherzuweisung (XCS-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 schlaues Smart-IO (XCS-2872) Die Smart-I/O-Funktion des Compilers generiert gültigen, aber nicht optimalen Code für die Sprint-Funktion, wenn die Coast-Data-in-Proem-Funktion deaktiviert wurde oder wenn der gesamte Flash des Geräts in den Datenspeicher abgebildet ist.
Noch weniger smartes Smart-IO (XCS-2869) Die Smart-I/O-Funktion des Compilers generiert gültigen, aber nicht optimalen Code, wenn sowohl die Optionen -floe als auch -fno-build verwendet werden.
Suboptimale schreibgeschützte Datenplatzierung (XCS-2849) Der Linker kennt derzeit weder die Speicherabschnitte APPCODE und APPDATA 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 „coast-data-in-pragma“ aktiviert ist, insbesondere wenn auch die Funktion „coast-data-in-config-mapped-proem“ aktiviert ist. Diese Funktionen können bei Bedarf deaktiviert werden.
Objekt file Verarbeitungsreihenfolge (XCS-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 absolutem (XCS-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 (XCS-2775) Für ATA5700/2-Geräte sind die PHID0/1-Register nur mit einer Breite von 16 Bit statt 32 Bit definiert.
Linker-Absturz beim Symbolaufruf (XCS-2758) Der Linker kann abstürzen, wenn die Treiberoption -merlad verwendet wird, wenn der Quellcode ein Symbol aufruft, das mit der Linkeroption -Wl, –defsym definiert wurde.
Fehlerhafte Initialisierung (XCS-2679) Es besteht eine Diskrepanz zwischen dem Ort, an dem die Anfangswerte für einige globale/statische Objekte in Byte-Größe im Datenspeicher abgelegt werden, und dem Ort, an dem zur Laufzeit auf die Variablen zugegriffen wird.
fälschlicherweise gestartete Sets leer (XCS-2652) In Fällen, in denen eine Subjektzeichenfolge zur Konvertierung durch angegeben () eine scheinbare Gleitkommazahl im Exponentialformat enthält und nach einem e-Zeichen ein unerwartetes Zeichen steht, zeigt die leere Adresse, falls angegeben, auf das Zeichen nach dem e und nicht auf das e selbst. Zum Beispielample: angegeben („hooey“, leer); führt zu einem leeren Zeiger auf das Zeichen x.
Ungültige indirekte Funktionsaufrufe (XCS-2628) In einigen Fällen können Funktionsaufrufe, die über einen als Teil einer Struktur gespeicherten Funktionszeiger erfolgen, fehlschlagen.
strtof gibt für hexadezimale Gleitkommazahlen Null zurück (XCS-2626) Die Bibliotheksfunktionen strtof () und scanf () konvertieren eine hexadezimale Gleitkommazahl, die keinen Exponenten angibt, immer in
Null. Zum Beispielample: stator(„Owl“, &empty); gibt den Wert 0 zurück, nicht 1.
Ungenaue Stack Advisor-Nachrichten (XCS-2542, XCS-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 Interruptcode (XCS-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.
Const-Objekte nicht im Programmspeicher (XCS-2408) Bei avrxmega3- und avertins-Projekten werden nicht idealisierte Konstantenobjekte in den Datenspeicher gelegt, auch wenn eine Warnung darauf hinweist, dass sie in den Programmspeicher gelegt wurden. Dies hat keine Auswirkungen auf Geräte, deren Programmspeicher nicht in den Datenspeicherbereich abgebildet ist, und auch auf Objekte, die initialisiert werden.
Fehlerhafte Ausgabe mit ungültigem DFP-Pfad (XCS-2376) Wenn der Compiler mit einem ungültigen DFP-Pfad und einer "Spezifikation" aufgerufen wird file für das ausgewählte Gerät vorhanden ist, meldet der Compiler das fehlende Gerätefamilienpaket nicht und wählt stattdessen die „Spezifikation“ aus. file, was dann zu einer ungültigen Ausgabe führen kann. Die 'Spezifikation' files sind möglicherweise nicht auf dem neuesten Stand der verteilten DFPs und sollten nur für interne Compiler-Tests verwendet werden.
Speicherüberlappung nicht erkannt (XCS-1966) Der Compiler erkennt keine Speicherüberlappung zwischen Objekten, die an einer Adresse absolut gemacht wurden (über at()), und anderen Objekten, die den Abschnittsspezifizierer () verwenden und mit derselben Adresse verknüpft sind.
Fehler mit Bibliotheksfunktionen und _meme (XCS-1763) Aufgerufene limbische Float-Funktionen mit einem Argument im _memo-Adressraum können fehlschlagen. Beachten Sie, dass Bibliotheksroutinen von einigen C-Operatoren aufgerufen werden, z. B.ample ist folgender Code betroffen: return regFloatVar > memxFloatVar;
Begrenzte limbische Implementierung (AVRTC-731) Für die Produkte ATTiny4/5/9/10/20/40 ist die Standardimplementierung der C/Math-Bibliothek in Limbic sehr eingeschränkt oder nicht vorhanden.
Einschränkungen des Programmspeichers (AVRTC-732) Programmspeicherabbilder über 128 KB werden von der Toolchain unterstützt. Es gibt jedoch bekannte Fälle, in denen der Linker ohne Relaxation und ohne eine hilfreiche Fehlermeldung abbricht, anstatt die erforderlichen Funktionsstümpfe zu generieren, wenn die Option -relax 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 Der Bibliotheksfunktionen gehen von GMT aus und unterstützen keine lokalen Zeitzonen, daher gibt local time () dieselbe Zeit zurück wie gummite (), z. B.ample.

KUNDENDIENST

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

Dokumente / Ressourcen

MICROCHIP MPLAB XC8 C-Compiler-Software [pdf] Bedienungsanleitung
MPLAB XC8 C, MPLAB XC8 C Compiler-Software, Compiler-Software, Software

Verweise

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind markiert *