Software del compilatore MICROCHIP MPLAB XC8 C
QUESTO DOCUMENTO CONTIENE INFORMAZIONI IMPORTANTI RELATIVE AL COMPILATORE MPLAB XC8 C QUANDO SI PUNTANO AI DISPOSITIVI AVR MICROCHIP.
SI PREGA DI LEGGERE PRIMA DI ESEGUIRE QUESTO SOFTWARE. CONSULTARE LE NOTE DI RILASCIO DEL COMPILATORE MPLAB XC8 C PER IL DOCUMENTO PIC SE SI STA UTILIZZANDO IL COMPILATORE PER DISPOSITIVI PIC A 8 BIT.
Sopraview
Introduzione
Questa versione del compilatore C MPLAB® XC8 di Microchip contiene diverse nuove funzionalità, correzioni di bug e supporto per nuovi dispositivi.
Data di costruzione
La data di build ufficiale di questa versione del compilatore è il 3 luglio 2022.
Versione precedente
La precedente versione del compilatore MPLAB XC8 C era la 2.39, un compilatore di sicurezza funzionale, creato il 27 gennaio 2022. Il precedente compilatore standard era la versione 2.36, creato il 27 gennaio 2022.
Manuale di sicurezza funzionale
Un manuale di sicurezza funzionale per i compilatori MPLAB XC è disponibile nel pacchetto della documentazione quando si acquista una licenza di sicurezza funzionale.
Licenze e versioni dei componenti
Gli strumenti MPLAB® XC8 C Compiler per AVR MCU sono scritti e distribuiti sotto la GNU General Public License (GPL), il che significa che il suo codice sorgente è distribuito liberamente e disponibile al pubblico. Il codice sorgente per gli strumenti sotto GNU GPL può essere scaricato separatamente da Microchip webluogo. Puoi leggere la GNU GPL nel file file named si trova nella sottodirectory della directory di installazione. Una discussione generale sui principi alla base della GPL può essere trovata qui. Codice di supporto fornito per l'intestazione files, script linker e librerie di runtime sono codice proprietario e non coperto dalla GPL.
Questo compilatore è un'implementazione di GCC versione 5.4.0, binutils versione 2.26 e utilizza avr-libc versione 2.0.0.
Requisiti di sistema
Il compilatore MPLAB XC8 C e il software di licenza che utilizza sono disponibili per una varietà di sistemi operativi, incluse le versioni a 64 bit dei seguenti: Edizioni professionali di Microsoft Windows 10; Ubuntu 18.04; e macOS 10.15.5. I binari per Windows sono stati firmati in codice. I binari per mac OS sono stati firmati in codice e autenticati.
Se si esegue un server delle licenze di rete, solo i computer con sistemi operativi supportati dai compilatori possono essere utilizzati per ospitare il server delle licenze. A partire da xclm versione 2.0, il server delle licenze di rete può essere installato su una piattaforma Microsoft Windows Server, ma non è necessario che il server delle licenze venga eseguito su una versione server del sistema operativo.
Dispositivi supportati
Questo compilatore supporta tutti i dispositivi MCU AVR a 8 bit conosciuti al momento del rilascio. Vedere (nella directory doc del compilatore) per un elenco di tutti i dispositivi supportati. Questi fileElenca anche le impostazioni dei bit di configurazione per ciascun dispositivo.
Edizioni e aggiornamenti della licenza
Il compilatore MPLAB XC8 può essere attivato come prodotto con licenza (PRO) o senza licenza (gratuito). È necessario acquistare una chiave di attivazione per ottenere la licenza del compilatore. Una licenza consente un livello di ottimizzazione superiore rispetto al prodotto gratuito. Un compilatore senza licenza può essere utilizzato a tempo indeterminato senza licenza.
Un compilatore di sicurezza funzionale MPLAB XC8 deve essere attivato con una licenza di sicurezza funzionale acquistata da Microchip. Il compilatore non funzionerà senza questa licenza. Una volta attivato, puoi selezionare qualsiasi livello di ottimizzazione e utilizzare tutte le funzionalità del compilatore. Questa versione del compilatore di sicurezza funzionale MPLAB XC supporta la licenza del server di rete.
Consultare il documento Installing and Licensing MPLAB XC C Compilers (DS50002059) per informazioni sui tipi di licenza e sull'installazione del compilatore con una licenza.
Installazione e attivazione
Vedere anche le sezioni Problemi e limitazioni della migrazione per informazioni importanti sull'ultimo gestore di licenze incluso in questo compilatore.
Se utilizzi MPLAB IDE, assicurati di installare l'ultima versione di MPLAB X IDE 5.0 o successiva prima di installare questo strumento. Uscire dall'IDE prima di installare il compilatore. Eseguire l'applicazione di installazione del compilatore .exe (Windows), .run (Linux) o app (macOS), ad esempio XC8-1.00.11403-windows.exe e seguire le indicazioni sullo schermo.
Si consiglia la directory di installazione predefinita. Se stai usando Linux, devi installare il compilatore usando un terminale e da un account root. Installa utilizzando un account macOS con privilegi di amministratore.
L'attivazione viene ora eseguita separatamente dall'installazione. Consultare il documento License Manager for MPLAB® XC C Compilers (DS52059) per ulteriori informazioni.
Se scegli di eseguire il compilatore con la licenza di valutazione, ora riceverai un avviso durante la compilazione entro 14 giorni dalla fine del periodo di valutazione. Lo stesso avviso viene emesso se entro 14 giorni dalla scadenza dell'abbonamento HPA.
XC Network License Server è un programma di installazione separato e non è incluso nel programma di installazione del compilatore per utente singolo.
XC License Manager ora supporta il roaming delle licenze di rete mobili. Destinata agli utenti mobili, questa funzione consente a una licenza mobile di uscire dalla rete per un breve periodo di tempo. Utilizzando questa funzione, puoi disconnetterti dalla rete e continuare a utilizzare il tuo compilatore MPLAB XC. Vedere la cartella doc dell'installazione di XCLM per ulteriori informazioni su questa funzione. MPLAB X IDE include una finestra Licenze (Strumenti > Licenze) per gestire visivamente il roaming.
Risoluzione dei problemi di installazione
In caso di difficoltà nell'installazione del compilatore in uno qualsiasi dei sistemi operativi Windows, provare i seguenti suggerimenti.
- Esegui l'installazione come amministratore.
- Impostare le autorizzazioni dell'applicazione di installazione su "Controllo completo". (Fai clic con il pulsante destro del mouse su file, seleziona Proprietà, scheda Sicurezza, seleziona utente, modifica.)
- Imposta i permessi della cartella temporanea su “Controllo completo!
Per determinare la posizione della cartella temporanea, digitare %temp% nel comando Esegui (tasto WINDOWS + R). Questo aprirà un file finestra di dialogo di explorer che mostra quella directory e ti permetterà di determinare il percorso di quella cartella.
Documentazione del compilatore
Le guide per l'utente del compilatore possono essere aperte dalla pagina HTML che si apre nel browser quando si fa clic sul pulsante blu della guida nella dashboard di MPLAB X IDE, come indicato nello screenshot.
Se stai creando target AVR a 8 bit, la Guida per l'utente del compilatore MPLAB® XC8 C per MCU AVR® contiene informazioni sulle opzioni e le caratteristiche del compilatore applicabili a questa architettura.
Assistenza clienti
Microchip accoglie segnalazioni di bug, suggerimenti o commenti relativi a questa versione del compilatore. Si prega di indirizzare eventuali segnalazioni di bug o richieste di funzionalità tramite il sistema di supporto.
Aggiornamenti alla documentazione
Per le versioni online e aggiornate della documentazione MPLAB XC8, visitare la documentazione tecnica online di Microchip websito.
Documentazione AVR nuova o aggiornata in questa versione:
- Avviso sul copyright di MUSL
- Installazione e licenza dei compilatori MPLAB XC C (revisione M)
- MPLAB XC8 User!s Guide for Embedded Engineers – MCU AVR (revisione A)
- Guida per l'utente del compilatore MPLAB XC8 C per MCU AVR (revisione F)
- Guida di riferimento della libreria standard unificata di Microchip (revisione B)
La Guida di riferimento della libreria standard unificata di Microchip descrive il comportamento e l'interfaccia delle funzioni definite dalla libreria standard unificata di Microchip, nonché l'uso previsto dei tipi di libreria e delle macro. Alcune di queste informazioni erano precedentemente contenute nella Guida per l'utente del compilatore C MPLAB® XC8 per MCU AVR®. Le informazioni sulla libreria specifica del dispositivo sono ancora contenute in questa guida del compilatore.
Se hai appena iniziato con i dispositivi a 8 bit e il compilatore C MPLAB XC8, la Guida per l'utente MPLAB® XC8 per gli ingegneri embedded – MCU AVR® (DS50003108) contiene informazioni sull'impostazione dei progetti nell'IDE MPLAB X e sulla scrittura del codice per il tuo primo progetto MPLAB XC8 C. Questa guida è ora distribuita con il compilatore.
La Guida per l'utente di Hamate è stata inclusa nella directory dei documenti in questa versione. Questa guida è destinata a coloro che eseguono Hamate come applicazione autonoma.
Cosa c'è di nuovo
Di seguito sono riportate le nuove funzionalità di destinazione AVR ora supportate dal compilatore. Il numero di versione nei sottotitoli indica la prima versione del compilatore a supportare le funzionalità che seguono.
Versione 2.40
Supporto per nuovi dispositivi Il supporto è ora disponibile per le seguenti parti AVR: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 e AVR64EA48.
Astrazione procedurale migliorata Lo strumento di ottimizzazione dell'astrazione procedurale (PA) è stato migliorato in modo che il codice contenente un'istruzione di chiamata di funzione (call recall) possa essere strutturato. Ciò avverrà solo se lo stack non viene utilizzato per passare argomenti né ottenere il valore restituito dalla funzione. Lo stack viene utilizzato quando si chiama una funzione con un elenco di argomenti variabili o quando si chiama una funzione che accetta più argomenti di quanti siano i registri designati per questo scopo. Questa funzione può essere disabilitata usando l'opzione monk-pa-outline-calls, oppure l'astrazione procedurale può essere disabilitata completamente per un oggetto file o funzione usando il -monk-pa-on-file e -mo.-pa-on-function rispettivamente, oppure utilizzando l'attributo nipa (specificatore nipa) in modo selettivo con le funzioni
Macro di copertura del codice Il compilatore ora definisce la macro __CODECOV se viene specificata un'opzione mcodecov valida.
Opzione di prenotazione della memoria Il driver xc8-cc ora accetterà l'opzione -mreserve=space@start:end durante la compilazione per target AVR. Questa opzione riserva l'intervallo di memoria specificato nello spazio di memoria dei dati o del programma, impedendo al linker di popolare il codice o gli oggetti in quest'area.
IO intelligente più intelligente Sono stati apportati diversi miglioramenti alle funzioni Smart IO, tra cui modifiche generali al codice principale printf, trattando l'identificatore di conversione %n come una variante indipendente, collegando le routine vararg pop su richiesta, utilizzando tipi di dati più brevi ove possibile per la gestione degli argomenti della funzione IO e factoring del codice comune nella gestione della larghezza del campo e della precisione. Ciò può comportare un notevole risparmio di codice e dati, nonché aumentare la velocità di esecuzione dell'IO.
Versione 2.39 (rilascio di sicurezza funzionale)
Licenza per server di rete Questa versione del compilatore di sicurezza funzionale MPLAB XC8 supporta la licenza del server di rete.
Versione 2.36
Nessuno.
Versione 2.35
Supporto per nuovi dispositivi Il supporto è disponibile per le seguenti parti AVR: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 e AVR64DD32.
Cambio di contesto migliorato La nuova opzione -mcall-isr-prologues modifica il modo in cui le funzioni di interrupt salvano i registri all'ingresso e il modo in cui tali registri vengono ripristinati quando la routine di interrupt termina. Funziona in modo simile all'opzione -mcall-prologues, ma influisce solo sulle funzioni di interruzione (ISR).
Cambio di contesto ancora più migliorato La nuova opzione -mgas-isr-prologues controlla il codice itch dei contesti generato per piccole routine di servizio di interruzione. Se abilitata, questa funzione consentirà all'assembler di eseguire la scansione dell'ISR per l'utilizzo dei registri e di salvare questi registri utilizzati solo se necessario.
Mappatura flash configurabile Alcuni dispositivi della famiglia AVR DA e AVR DB hanno un SFR (ad es. FLMAP) che specifica quale sezione di 32k della memoria di programma verrà mappata nella memoria dati. La nuova opzione – mconst-data-in-config-mapped-proem può essere utilizzata per fare in modo che il linker inserisca tutti i dati qualificati contro in una sezione da 32k e inizializzi automaticamente il registro SFR pertinente per garantire che questi dati siano mappati nello spazio di memoria dei dati , dove sarà possibile accedervi in modo più efficace.
Librerie standard unificate di Microchip Tutti i compilatori MPLAB XC condivideranno una Microchip Unified Standard Library, che è ora disponibile con questa versione di MPLAB XC8. La Guida per l'utente del compilatore MPLAB® XC8 C/o l'MCU AVR® non include più la documentazione per queste funzioni standard. Queste informazioni possono ora essere trovate nella Guida di riferimento della libreria standard unificata di Microchip. Si noti che alcune funzionalità precedentemente definite da avr-libc non sono più disponibili. (Vedi Biblioteca):'. funzionalità…)
IO intelligente Come parte delle nuove librerie unificate, le funzioni IO nelle famiglie di stampa e scansione sono ora generate in modo personalizzato su ogni build, in base a come queste funzioni vengono utilizzate nel programma. Questo può ridurre sostanzialmente le risorse utilizzate da un programma.
Opzione di assistenza Smart IO Quando si analizzano le chiamate a funzioni IO intelligenti (come printf () o scanf () ), il compilatore non può sempre determinare dalla stringa di formato o dedurre dagli argomenti gli specificatori di conversione richiesti dalla chiamata. In precedenza, il compilatore non faceva sempre presupposti e si assicurava che le funzioni IO completamente funzionanti fossero collegate all'immagine finale del programma. È stata aggiunta una nuova opzione – msmart-io-format=fmt in modo che il compilatore possa invece essere informato dall'utente degli specificatori di conversione utilizzati dalle funzioni IO intelligenti il cui utilizzo è ambiguo, impedendo il collegamento di routine IO eccessivamente lunghe. (Vedi Opzione smart-io-format per maggiori dettagli.)
Inserimento di sezioni personalizzate In precedenza, l'opzione -Wl, –section-start posizionava la sezione specificata solo all'indirizzo richiesto quando lo script del linker definiva una sezione di output con lo stesso nome. In caso contrario, la sezione è stata collocata in un indirizzo scelto dal linker e l'opzione è stata sostanzialmente ignorata. Ora l'opzione verrà rispettata per tutte le sezioni personalizzate, anche se lo script del linker non definisce la sezione. Si noti, tuttavia, che per le sezioni standard, come . testo, . bs o . dati, l'allocatore più adatto avrà ancora il controllo completo sul loro posizionamento e l'opzione non avrà alcun effetto. Utilizzare l'opzione -Wl, -Tsection=add, come descritto nella guida dell'utente.
Versione 2.32
Guida allo stack Disponibile con una licenza del compilatore PRO, la funzione di guida allo stack del compilatore può essere utilizzata per stimare la profondità massima di qualsiasi stack utilizzato da un programma. Costruisce e analizza il grafico delle chiamate di un programma, determina l'utilizzo dello stack di ciascuna funzione e produce un report dal quale è possibile dedurre la profondità degli stack utilizzati dal programma. Questa funzionalità è abilitata tramite l'opzione della riga di comando -mchp-stack-usage. Dopo l'esecuzione viene stampato un riepilogo dell'utilizzo dello stack. Un rapporto dettagliato sullo stack è disponibile nella mappa file, che può essere richiesto con le consuete modalità.
Supporto per nuovi dispositivi Supporto è disponibile per le seguenti parti AVR: ATTINY 427, ATTINY 424, ATTINY 426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 e AVR32DB48.
Supporto dispositivo retratto Supporto non è più disponibile per le seguenti parti AVR: AVR16DA28, AVR16DA32 e, AVR16DA48.
Versione 2.31
Nessuno.
Versione 2.30
Nuova opzione per impedire l'inizializzazione dei dati Una nuova opzione del driver -mno-data-ini t impedisce l'inizializzazione dei dati e la cancellazione delle sezioni bss. Funziona sopprimendo l'output dei simboli do_ copy_ data e d o_ clear_ bss in assembly files, che a sua volta impedirà l'inclusione di tali routine da parte del linker.
Ottimizzazioni migliorate Sono stati apportati numerosi miglioramenti all'ottimizzazione, tra cui la rimozione delle istruzioni di ritorno ridondanti, la rimozione di alcuni salti dopo un'istruzione skip-if-bit-is e una migliore astrazione procedurale e la capacità di iterare questo processo.
Sono ora disponibili opzioni aggiuntive per controllare alcune di queste ottimizzazioni, in particolare -f section anchors, che consente l'accesso agli oggetti statici da eseguire relativamente a un simbolo; -mpai derations=n, che consente di modificare il numero di iterazioni di astrazione procedurale dal valore predefinito di 2; e, -mpa- call cost- shortcall, che esegue un'astrazione procedurale più aggressiva, nella speranza che il linker possa rilassare le chiamate lunghe. Quest'ultima opzione può aumentare la dimensione del codice se i presupposti sottostanti non vengono realizzati.
Supporto per nuovi dispositivi Il supporto è disponibile per le seguenti parti AVR: AVR16DA28, AVR16DA32,
AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 e AVR128DB64.
Supporto dispositivo retratto Il supporto non è più disponibile per le seguenti parti AVR: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C e ATA664251.
Versione 2.29 (rilascio di sicurezza funzionale)
Intestazione file per i built-in del compilatore Per garantire che il compilatore possa essere conforme alle specifiche del linguaggio come MISRA, il intestazione file, che viene automaticamente incluso da , è stato aggiornato. Questa intestazione contiene i prototipi per tutte le funzioni integrate, come _buil tin _avrnop () e _buil tin_ avr delay_ cycles () . Alcuni built-in potrebbero non essere conformi a MISRA; questi possono essere omessi aggiungendo define _Xe_ STRICT_ MISRA alla riga di comando del compilatore. I built-in e le relative dichiarazioni sono stati aggiornati per utilizzare i tipi a larghezza fissa.
Versione 2.20
Supporto per nuovi dispositivi Il supporto è disponibile per le seguenti parti AVR: ATTINY1624, ATTINY1626 e ATTINY1627.
Migliore allocazione migliore L'allocatore Best Fit (BFA) nel compilatore è stato migliorato in modo che le sezioni siano allocate in un ordine che consenta una migliore ottimizzazione. Il BFA ora supporta spazi di indirizzi denominati e gestisce meglio l'inizializzazione dei dati.
Astrazione procedurale migliorata Le ottimizzazioni dell'astrazione procedurale vengono ora eseguite su più sequenze di codice. Le situazioni precedenti in cui questa ottimizzazione potrebbe aver aumentato la dimensione del codice sono state risolte rendendo il codice di ottimizzazione consapevole del processo di Garbage Collection del linker.
Assenza di AVR Assembler L'Assembler AVR non è più incluso in questa distribuzione.
Versione 2.19 (rilascio di sicurezza funzionale)
Nessuno.
Versione 2.10
Code Coverage Questa versione include una funzione di copertura del codice che facilita l'analisi della misura in cui il codice sorgente di un progetto è stato eseguito. Usa l'opzione -mcodecov=ram per abilitarlo. Dopo l'esecuzione del programma sul tuo hardware, le informazioni sulla copertura del codice verranno raccolte nel dispositivo e queste possono essere trasferite e visualizzate dall'IDE MPLAB X tramite un plug-in di copertura del codice. Vedere la documentazione IDE per ottenere informazioni su questo plugin. Il #pragma mcodecov può essere utilizzato per escludere funzioni successive dall'analisi della copertura. Idealmente il pragma dovrebbe essere aggiunto all'inizio del file file escludere tutto questo file dall'analisi della copertura. In alternativa, l'attributo ( (mcodecov) ) può essere utilizzato per escludere una funzione specifica dall'analisi della copertura.
Descrizione del dispositivo files Un nuovo dispositivo file chiamato avr chipinfo. html si trova nella directory docs della distribuzione del compilatore. Questo file elenca tutti i dispositivi supportati dal compilatore. Fare clic sul nome di un dispositivo e si aprirà una pagina che mostra tutte le coppie di impostazioni/valori di bit di configurazione consentite per quel dispositivo, con exampmeno.
Astrazione procedurale Al compilatore sono state aggiunte le ottimizzazioni dell'astrazione procedurale, che sostituiscono i blocchi comuni di codice assembly con chiamate a una copia estratta di quel blocco. Questi vengono eseguiti da un'applicazione separata, che viene richiamata automaticamente dal compilatore quando si selezionano le ottimizzazioni di livello 2, 3 o. Queste ottimizzazioni riducono le dimensioni del codice, ma possono ridurre la velocità di esecuzione e la possibilità di debug del codice.
L'astrazione procedurale può essere disabilitata a livelli di ottimizzazione superiori utilizzando l'opzione -mno-pa, oppure può essere abilitata a livelli di ottimizzazione inferiori (soggetto alla licenza) utilizzando -mpa. Può essere disabilitato per un oggetto file usando -mno-pa-on-file=filename o disabilitato per una funzione utilizzando -mno-pa su function= function.
All'interno del codice sorgente, l'astrazione procedurale può essere disabilitata per una funzione utilizzando _attribute_ ( (nopa)) con la definizione della funzione, o utilizzando _nopa, che si espande in attributo ( (nopa, noinline)) e quindi impedisce l'incorporamento della funzione. e c'è l'astrazione del codice inline.
Blocca il supporto del bit in pragma La configurazione #pragma ora può essere utilizzata per specificare i bit di blocco AVR e gli altri bit di configurazione. Controlla le informazioni sul chip avr. html file (menzionato sopra) per le coppie impostazione/valore da usare con questo pragma.
Supporto per nuovi dispositivi Il supporto è disponibile per le seguenti parti: AVR28DA128, AVR64DA128, AVR32DA128 e AVR48DA128.
Versione 2.05
Più bit per il tuo dollaro La versione macOS di questo compilatore e gestore di licenze è ora un'applicazione a 64 bit. Ciò assicurerà che il compilatore venga installato ed eseguito senza avvisi nelle versioni recenti di macOS.
Oggetti const nella memoria del programma Il compilatore può ora collocare oggetti qualificati const nella memoria flash del programma, invece di averli nella RAM. Il compilatore è stato modificato in modo che i dati globali qualificati const siano archiviati nella memoria flash del programma e sia possibile accedervi direttamente e indirettamente utilizzando le istruzioni di memoria del programma appropriate. Questa nuova funzione è abilitata per impostazione predefinita, ma può essere disabilitata utilizzando l'opzione -mno-const-data-in-progmem. Per le architetture avrxmega3 e avrtiny, questa funzione non è richiesta ed è sempre disabilitata, poiché la memoria del programma è mappata nello spazio degli indirizzi dei dati per questi dispositivi.
Standard gratuitamente Le versioni senza licenza (gratuite) di questo compilatore ora consentono ottimizzazioni fino al livello 2 incluso. Ciò consentirà un output simile, sebbene non identico, a quello che era possibile in precedenza utilizzando una licenza standard.
Benvenuto AVRASM2 L'assembler AVRASM2 per dispositivi a 8 bit è ora incluso nel programma di installazione del compilatore XC8. Questo assemblatore non è utilizzato dal compilatore XC8, ma è disponibile per progetti basati su sorgenti di assemblaggio scritte a mano.
Supporto per nuovi dispositivi Il supporto è disponibile per le seguenti parti: ATMEGA1608, ATMEGA1609, ATMEGA808 e ATMEGA809.
Versione 2.00
Autista di primo livello Un nuovo driver, chiamato xc8-cc, ora si trova sopra il precedente driver avr-gcc e il driver xc8, e può chiamare il compilatore appropriato in base alla selezione del dispositivo di destinazione. Questo driver accetta opzioni in stile GCC, che vengono tradotte o passate al compilatore in esecuzione. Questo driver consente di utilizzare un insieme simile di opzioni con semantica simile con qualsiasi destinazione AVR o PIC ed è quindi il modo consigliato per invocare il compilatore. Se necessario, il vecchio driver avr-gcc può essere richiamato direttamente utilizzando le opzioni vecchio stile accettate nelle versioni precedenti del compilatore.
Interfaccia C comune Questo compilatore può ora essere conforme all'interfaccia MPLAB Common C, consentendo di trasferire più facilmente il codice sorgente su tutti i compilatori MPLAB XC. L'opzione -mext=cci richiede questa funzionalità, abilitando la sintassi alternativa per molte estensioni di linguaggio.
Nuovo driver bibliotecario Un nuovo driver librarian è posizionato sopra il precedente librarian PIC libr e il librarian AVR avr-ar. Questo driver accetta opzioni in stile archiviatore GCC, che vengono tradotte o passate al bibliotecario in esecuzione. Il nuovo driver consente di utilizzare un insieme simile di opzioni con semantica simile per creare o manipolare qualsiasi libreria PIC o AVR file ed è quindi il modo consigliato per invocare il bibliotecario. Se richiesto per i progetti legacy, il precedente librarian può essere richiamato direttamente utilizzando le opzioni vecchio stile accettate nelle versioni precedenti del compilatore.
Problemi di migrazione
Di seguito sono riportate le funzionalità che ora vengono gestite in modo diverso dal compilatore. Queste modifiche potrebbero richiedere la modifica del codice sorgente in caso di trasferimento del codice a questa versione del compilatore. Il numero di versione nei sottotitoli indica la prima versione del compilatore a supportare le modifiche successive.
Versione 2.40
Nessuno.
Versione 2.39 (rilascio di sicurezza funzionale)
Nessuno.
Versione 2.36
Nessuno.
Versione 2.35
Gestione delle basi string-to (XCS-2420) Per garantire la coerenza con altri compilatori XC, le funzioni XC8 string-to, come strtol () ecc., non tenteranno più di convertire una stringa di input se la base specificata è maggiore di 36 e imposteranno invece errno su EINVAL. Lo standard C non specifica il comportamento delle funzioni quando questo valore di base viene superato.
Ottimizzazioni della velocità inappropriate Le ottimizzazioni dell'astrazione procedurale venivano abilitate durante la selezione delle ottimizzazioni di livello 3 (-03). Queste ottimizzazioni riducono le dimensioni del codice a scapito della velocità del codice, quindi non avrebbero dovuto essere eseguite. I progetti che utilizzano questo livello di ottimizzazione potrebbero riscontrare differenze nella dimensione del codice e nella velocità di esecuzione se compilati con questa versione.
Funzionalità della libreria Il codice per molte delle funzioni della libreria C standard ora proviene dalla Unified Standard Library di Microchip, che potrebbe mostrare un comportamento diverso in alcune circostanze rispetto a quello fornito dalla precedente libreria avr-libc. Per esample, non è più necessario collegarsi alla libreria lprintf_flt (opzione -print _flt) per attivare il supporto IO formattato per identificatori di formato float. Le funzionalità smart IO della Microchip Unified Standard Library rendono questa opzione ridondante. Inoltre, non è più necessario l'uso di routine con suffisso _p per funzioni di stringa e memoria (ad esempio strcpy_P () ecc..) che operano su stringhe const in flash. Le routine C standard (ad esempio strcpy ()) funzioneranno correttamente con tali dati quando la funzione const-data-in-program-memory è abilitata.
Versione 2.32
Nessuno.
Versione 2.31
Nessuno.
Versione 2.30
Nessuno.
Versione 2.29 (rilascio di sicurezza funzionale)
Nessuno.
Versione 2.20
Layout DFP modificato Il compilatore assume ora un layout diverso utilizzato dai DFP (Device Family Pack). Ciò significa che un vecchio DFP potrebbe non funzionare con questa versione e che i compilatori meno recenti non saranno in grado di utilizzare i DFP più recenti.
Versione 2.19 (rilascio di sicurezza funzionale)
Nessuno.
Versione 2.10
Nessuno
Versione 2.05
Const oggetti nella memoria del programma Si noti che per impostazione predefinita, gli oggetti qualificati const verranno posizionati e accessibili nella memoria del programma (come descritto qui) . Ciò influirà sulle dimensioni e sulla velocità di esecuzione del progetto, ma dovrebbe ridurre l'utilizzo della RAM. Questa funzione può essere disabilitata, se necessario, utilizzando l'opzione -mnoconst-da ta-in-progmem.
Versione 2.00
Fusibili di configurazione I fusibili di configurazione del dispositivo ora possono essere programmati utilizzando un pragma di configurazione seguito da coppie di valori di impostazione per specificare lo stato del fusibile, ad es.
#pragma configurazione WDT0N = IMPOSTATO
#pragmaconfig B0DLEVEL = B0DLEVEL_4V3
Oggetti assoluti e funzioni Gli oggetti e le funzioni possono ora essere posizionati in un indirizzo specifico in memoria utilizzando l'identificatore CCI _at (indirizzo), ad esempioample: #include int foobar at(Ox800100); char at(Ox250) get ID(int offset) { … } L'argomento di questo specificatore deve essere una costante che rappresenta l'indirizzo in cui verrà inserito il primo byte o istruzione. Gli indirizzi RAM sono indicati utilizzando un offset di 0x800000. Consentire al CCI di utilizzare questa funzione.
Nuova sintassi della funzione di interrupt Il compilatore ora accetta l'identificatore di interrupt CCI (num) per indicare che le funzioni C sono gestori di interrupt. Lo specificatore accetta un numero di interrupt, ad esample: #include void interrupt(SPI STC_ vect _num) spi Isr(void) { … }
Problemi risolti
Di seguito sono riportate le correzioni apportate al compilatore. Questi potrebbero correggere bug nel codice generato o alterare il funzionamento del compilatore rispetto a quello previsto o specificato dalla guida dell'utente. Il numero di versione nei sottotitoli indica la prima versione del compilatore a contenere correzioni per i problemi che seguono. Le etichette tra parentesi nel titolo sono l'identificazione del problema nel database di monitoraggio. Questi possono essere utili se è necessario contattare l'assistenza.
Tieni presente che alcuni problemi specifici del dispositivo vengono corretti nel Device Family Pack (DFP) associato al dispositivo. Consulta MPLAB Pack Manager per informazioni sulle modifiche apportate ai DFP e per scaricare gli ultimi pacchetti.
Versione 2.40
Troppo rilassato (XCS-2876) Quando si utilizzava l'opzione -mrelax, il compilatore non allocava insieme alcune sezioni, con conseguenti dimensioni del codice meno ottimali. Ciò potrebbe essersi verificato con codice che utilizzava le nuove librerie MUSL o con simboli deboli.
Funzione di mappatura non disabilitata come indicato nell'avviso (XCS-2875) La funzione del programma mappato dei dati di costo in configurazione dipende dall'abilitazione della funzione dei dati di costo in proem. Se la funzione cost-data-ipconfig-mapped-proem è stata abilitata in modo esplicito utilizzando l'opzione e la funzione cost-data-inprogmem è stata disabilitata, il passaggio del collegamento ha avuto esito negativo, nonostante un messaggio di avviso indicante che la funzione cons data-in-config-mapped- proem era stata disabilitata automaticamente, il che non era del tutto corretto. La funzionalità const-data-in-config-mapped-proem è ora completamente disabilitata in questa situazione.
DFP cambia per accedere correttamente a NVMCTRL (XCS-2848) Il codice di avvio del runtime utilizzato dai dispositivi AVR64EA non teneva conto del fatto che il registro NVMCTRL era sotto Configuration Change Protection (CCP) e non era in grado di impostare l'IO SFR sulla pagina utilizzata dal compilatore const-data-in configmapped-proem caratteristica. Le modifiche apportate in AVR-Ex_DFP versione 2.2.55 consentiranno al codice di avvio del runtime di scrivere correttamente in questo registro.
Modifiche a DFP per evitare la mappatura flash (XCS-2847) È stata implementata una soluzione per un problema con la funzione del dispositivo di mappatura flash riportato nell'AVR128DA28/32/48/64 Silicon Errata (DS80000882). La funzionalità del compilatore const-data-in-config-mapped-proem non verrà applicata per impostazione predefinita per i dispositivi interessati e questa modifica verrà visualizzata in AVR-Ex_DFP versione 2.2.160.
Errore di compilazione con sinhf o coshf (XCS-2834) I tentativi di utilizzare le funzioni di libreria sinhf () o coshf () hanno provocato un errore di collegamento, descrivendo un riferimento non definito. La funzione mancante a cui si fa riferimento è stata ora inclusa nella distribuzione del compilatore.
Errori di compilazione con nopa (XCS-2833) L'utilizzo dell'attributo nopa con una funzione il cui nome dell'assembler è stato specificato utilizzando as () ha attivato i messaggi di errore dall'assembler. Questa combinazione non è possibile.
Errore della funzione variadica con argomenti puntatore (XCS-2755, XCS-2731) Le funzioni con un numero variabile di argomenti prevedono che vengano passati puntatori a 24 bit (tipo _memo) nell'elenco di argomenti variabili quando è abilitata la funzione cost-data-in-proem. Gli argomenti che erano puntatori alla memoria dei dati venivano passati come oggetti a 16 bit, causando errori di codice quando venivano letti. Quando la funzione cons data-in-proem è abilitata, tutti gli argomenti dei puntatori a 16 bit vengono ora convertiti in puntatori a 24 bit. Errore delle funzioni della libreria strtoxxx (XCS-2620) Quando la funzione const-data-in-proem era abilitata, il parametro di immissione nelle funzioni della libreria strtoxxx non veniva aggiornato correttamente per gli argomenti della stringa di origine non nella memoria del programma.
Avvisi per cast non validi (XCS-2612) Il compilatore ora genererà un errore se la funzione cost-in-proem è abilitata e l'indirizzo di una stringa letterale viene esplicitamente convertito nello spazio degli indirizzi dei dati (eliminando il qualificatore const), ad esempioample, (uint8 t *) “Ciao Mondo!”. Viene emesso un avviso se l'indirizzo potrebbe non essere valido quando un puntatore dati const viene trasmesso in modo esplicito allo spazio degli indirizzi dei dati.
Posizionamento di oggetti const non inizializzati (XCS-2408) Gli oggetti const e const volatile non inizializzati non venivano inseriti nella memoria del programma sui dispositivi che mappano tutta o parte della memoria del programma nello spazio degli indirizzi dei dati. Per questi dispositivi, tali oggetti vengono ora inseriti nella memoria del programma, rendendo il loro funzionamento coerente con altri dispositivi.
Versione 2.39 (rilascio di sicurezza funzionale)
Nessuno.
Versione 2.36
Errore durante il ritardo (XCS-2774) Modifiche minori nelle ottimizzazioni predefinite della modalità libera hanno impedito il ripiegamento costante delle espressioni di operando nelle funzioni integrate di ritardo, con il risultato che venivano trattate come noncontatti e che attivavano l'errore: _buil tin avr delay_ cycles si aspetta un mpilo costante intera di tempo.
Versione 2.35
Allocazione contigua utilizzando _at (XCS-2653) L'allocazione contigua di più oggetti posti in una sezione con lo stesso nome e l'utilizzo di at () non funzionava correttamente. Per esample: constchararrl [ ] at tri butte ((sect on(“.misses”))) at (Ox50 0 ) = {Oxo , Ox CD} ; cost char arr2[ ] at tri butte ((section(“.my s eke”))) = {Oxen, Ox FE }; avrebbe dovuto posizionare arr2 immediatamente dopo aril.
Specifica degli indirizzi iniziali della sezione (XCS-2650) L'opzione -Wal, –section-start non riusciva silenziosamente a posizionare le sezioni all'indirizzo di inizio indicato. Questo problema è stato risolto per qualsiasi sezione con nome personalizzato; tuttavia, non funzionerà per nessuna sezione standard, come . testo o . bss, che deve essere posizionato utilizzando un'opzione -Wl, -T.
Il linker si arresta in modo anomalo durante il rilassamento (XCS-2647) Quando l'ottimizzazione -relax era abilitata e c'erano sezioni di codice o dati che non rientravano nella memoria disponibile, il linker si arrestava in modo anomalo. Ora, in tale circostanza, vengono invece emessi messaggi di errore.
Accesso EEPROM errato (XCS-2629) La routine del blocco leproma _read_ non funzionava correttamente sui dispositivi Mega quando l'opzione -monist-data-in-proem era abilitata (che è lo stato predefinito), con il risultato che la memoria EEPROM non veniva letta correttamente.
Allocazione di memoria non valida (XCS-2593, XCS-2651) Quando l'opzione del linker -Text o -Tata (ad esample passato utilizzando un'opzione del driver -Wl) è specificato, l'origine dell'area dati/testo corrispondente è stata aggiornata; tuttavia, l'indirizzo finale non è stato regolato di conseguenza, il che potrebbe aver portato la regione a superare l'intervallo di memoria del dispositivo di destinazione.
Codice di interruzione ATtiny non valido (XCS-2465) Durante la compilazione per i dispositivi Tatin e le ottimizzazioni sono state disabilitate (-00), le funzioni di interrupt potrebbero aver attivato i messaggi dell'assembler operando fuori intervallo.
Opzioni non trasferite (XCS-2452) Quando si utilizza l'opzione -Wl con più opzioni del linker separate da virgole, non tutte le opzioni del linker venivano passate al linker.
Errore durante la lettura indiretta della memoria del programma (XCS-2450) In alcuni casi, il compilatore ha prodotto un errore interno (insn irriconoscibile) durante la lettura di un valore di due byte da un puntatore alla memoria del programma
Versione 2.32
Il secondo accesso alla libreria non riesce (XCS-2381) Invocando la versione Windows di xc8-ar. exe library archiver una seconda volta per accedere a un archivio di libreria esistente potrebbe non essere riuscito con un messaggio di errore incapace di rinominare.
Versione 2.31
Errori inspiegabili del compilatore (XCS-2367) Durante l'esecuzione su piattaforme Windows che avevano la directory temporanea di sistema impostata su un percorso che includeva un punto'.' carattere, il compilatore potrebbe non essere riuscito a eseguire.
Versione 2.30
Etichette globali fuori posto dopo il contorno (XCS-2299) Il codice assembly scritto a mano che inserisce etichette globali all'interno di sequenze di assembly fattorizzate dall'astrazione procedurale potrebbe non essere stato riposizionato correttamente.
Uno schianto rilassante (XCS-2287) L'uso dell'opzione -merlad potrebbe aver causato l'arresto anomalo del linker quando le ottimizzazioni del rilassamento del salto di coda hanno tentato di rimuovere l'istruzione ret che non si trovava alla fine di una sezione.
Blocco durante l'ottimizzazione delle etichette come valori (XCS-2282) Il codice che utilizza l'estensione del linguaggio GNU C "Etichette come valori" potrebbe aver causato l'arresto anomalo delle ottimizzazioni dell'astrazione procedurale, con un errore di correzione dell'intervallo VMA delineato.
Non così const (XCS-2271) I prototipi per start () e altre funzioni da non specifica più il qualificatore di costo non standard sui puntatori di stringa restituiti quando la funzione -monist-data inprogmem è disabilitata. Si noti che con i dispositivi avrxmega3 e avertin, questa funzione è abilitata in modo permanente.
Inizializzatori persi (XCS-2269) Quando più di una variabile in un'unità di traduzione è stata inserita in una sezione (usando la sezione o l'attributo ((sezione))) e la prima di queste variabili è stata inizializzata zero o non ha avuto un inizializzatore, inizializzatori per altre variabili nella stessa unità di traduzione che erano collocati nella stessa sezione andarono perduti.
Versione 2.29 (rilascio di sicurezza funzionale)
Nessuno.
Versione 2.20
Errore con comandi lunghi (XCS-1983) Quando si utilizza un target AVR, il compilatore potrebbe essersi arrestato con a file errore non trovato, se la riga di comando era estremamente grande e conteneva caratteri speciali come virgolette, barre rovesciate, ecc.
Sezione rodata non assegnata (XCS-1920) Il linker AVR non è riuscito ad assegnare la memoria per le sezioni rodata personalizzate durante la compilazione per le architetture avrxmega3 e avrtiny, producendo potenzialmente errori di sovrapposizione della memoria
Versione 2.19 (rilascio di sicurezza funzionale)
Nessuno.
Versione 2.10
Errori di trasferimento (XCS-1891) L'allocatore più adatto stava lasciando "buchi" di memoria tra le sezioni dopo il rilassamento del linker. A parte la frammentazione della memoria, ciò ha aumentato la possibilità che si verifichino errori di riposizionamento del linker relativi a salti relativi al PC o chiamate fuori portata.
Istruzioni non trasformate dal rilassamento (XCS-1889) Il rilassamento del linker non si è verificato per le istruzioni di salto o chiamata i cui obiettivi diventano raggiungibili se rilassati.
Mancante funzionalità (XCSE-388) Diverse definizioni da , come clock_ div_ t e clock_prescale_set (), non sono stati definiti per i dispositivi, inclusi ATmega324PB, ATmega328PB, ATtiny441 e ATtiny841.
Macro mancanti Le macro del preprocessore_ xcs _MODE_, _xcs VERSION, _xc e xcs non sono state definite automaticamente dal compilatore. Questi sono ora disponibili.
Versione 2.05
Errore interno del compilatore (XCS-1822) Durante la compilazione in Windows, potrebbe essere stato prodotto un errore interno del compilatore durante l'ottimizzazione del codice.
Overflow RAM non rilevato (XCS-1800, XCS-1796) I programmi che superavano la RAM disponibile non venivano rilevati dal compilatore in alcune situazioni, provocando un errore del codice di runtime.
Memoria flash omessa (XCS-1792) Per i dispositivi avrxmega3 e avrtiny, parti della memoria flash potrebbero essere state lasciate non programmate dall'IDE MPLAB X.
Impossibile eseguire main (XCS-1788) In alcune situazioni in cui il programma non aveva variabili globali definite, il codice di avvio del runtime non terminava e la funzione main() non veniva mai raggiunta.
Informazioni sulla memoria errate (XCS-1787) Per i dispositivi avrxmega3 e avrtiny, il programma avr-size segnalava che i dati di sola lettura consumavano RAM invece della memoria del programma.
Lettura memoria programma errata (XCS-1783) I progetti compilati per i dispositivi con la memoria del programma mappata nello spazio degli indirizzi dei dati e che definiscono oggetti utilizzando la macro/attributo PROGMEM potrebbero aver letto questi oggetti dall'indirizzo errato.
Errore interno con attributi (XCS-1773) Si è verificato un errore interno se hai definito oggetti puntatore con l'estensione
_at() o attribute() token tra il nome del puntatore e il tipo dereferenziato, ad esample, carattere *
_at ( 0x80015 0) cp; Ora viene emesso un avviso se viene rilevato tale codice.
Impossibile eseguire main (XCS-1780, XCS-1767, XCS-1754) L'utilizzo di variabili EEPROM o la definizione di fusibili utilizzando il pragma di configurazione potrebbe aver causato un'inizializzazione errata dei dati e/o l'esecuzione bloccata del programma nel codice di avvio del runtime, prima di raggiungere main () .
Errore di fusione con dispositivi piccoli (XCS-1778, XCS-1742) I dispositivi attiny4/5/9/10/20/40 avevano una lunghezza del fusibile errata specificata nell'intestazione files che portano a errori del linker durante il tentativo di creare codice che definisce i fusibili.
Errore di segmentazione (XCS-1777) È stato corretto un errore di segmentazione intermittente.
Arresto dell'Assembler (XCS-1761) L'assemblatore avr-as potrebbe essersi arrestato in modo anomalo quando il compilatore è stato eseguito in Ubuntu 18.
Oggetti non cancellati (XCS-1752) Gli oggetti di durata dell'archiviazione statica non inizializzati potrebbero non essere stati cancellati dal codice di avvio del runtime.
Specifica del dispositivo in conflitto ignorata (XCS-1749) Il compilatore non generava un errore quando venivano utilizzate più opzioni di specifica del dispositivo e indicavano dispositivi diversi.
Corruzione della memoria per heap (XCS-1748) Il simbolo heap_start veniva impostato in modo errato, con conseguente possibilità che le variabili ordinarie venissero danneggiate dall'heap.
Errore di riposizionamento del linker (XCS-1739) Potrebbe essere stato emesso un errore di riposizionamento del linker quando il codice conteneva un rjmp o rcall con una destinazione esattamente a 4k byte di distanza.
Versione 2.00
Nessuno.
Problemi noti
Di seguito sono riportate le limitazioni nel funzionamento del compilatore. Queste possono essere restrizioni di codifica generali o
deviazioni dalle informazioni contenute nel manuale dell'utente. Le etichette tra parentesi nel titolo sono l'identificazione del problema nel database di monitoraggio. Questo può essere utile se è necessario contattare l'assistenza. Gli articoli che non hanno etichette sono limitazioni che descrivono le modalità operandi e che probabilmente rimarranno in vigore in modo permanente.
Integrazione MPLAB X IDE
Integrazione MPLAB IDE Se il compilatore deve essere utilizzato da MPLAB IDE, è necessario installare MPLAB IDE prima di installare il compilatore.
Generazione del codice
Errore di allocazione della memoria PA (XCS-2881) Quando si utilizzano gli ottimizzatori di astrazione procedurale, il linker potrebbe segnalare errori di allocazione della memoria quando la dimensione del codice è vicina alla quantità di memoria del programma disponibile sul dispositivo, anche se il programma dovrebbe essere in grado di adattarsi allo spazio disponibile.
Smart-IO non così intelligente (XCS-2872) La funzione smart-io del compilatore genererà un codice valido ma subottimale per la funzione sprint se la funzione coast-data-in-proem è stata disabilitata o se il dispositivo ha tutta la memoria flash mappata nella memoria dati.
Smart-IO ancora meno intelligente (XCS-2869) La funzionalità smart-io del compilatore genererà codice valido ma non ottimale quando vengono utilizzate entrambe le opzioni -floe e -fno-buil tin.
Posizionamento dei dati di sola lettura subottimale (XCS-2849) Il linker attualmente non è a conoscenza delle sezioni di memoria APPCODE e APPDATA, né delle divisioni [No-]Read-While-Write nella mappa di memoria. Di conseguenza, c'è una piccola possibilità che il linker possa allocare dati di sola lettura in un'area di memoria non adatta. La possibilità di dati fuori posto aumenta se la funzionalità coast-data-in-pragma è abilitata, soprattutto se è abilitata anche la funzionalità coast-data-in-config-mapped-proem. Queste funzioni possono essere disabilitate se necessario.
Oggetto file ordine di elaborazione (XCS-2863) L'ordine in cui gli oggetti files verranno elaborati dal linker potrebbero differire in base all'uso di ottimizzazioni di astrazione procedurale (opzione -mpa). Ciò influenzerebbe solo il codice che definisce le funzioni deboli su più moduli.
Errore del linker con assoluto (XCS-2777) Quando un oggetto è stato reso assoluto in un indirizzo all'inizio della RAM e sono stati definiti anche oggetti non inizializzati, potrebbe essere attivato un errore del linker.
ID di riattivazione brevi (XCS-2775) Per i dispositivi ATA5700/2, i registri PHID0/1 sono definiti solo come larghi 16 bit, anziché larghi 32 bit.
Arresto anomalo del linker durante la chiamata al simbolo (XCS-2758) Il linker potrebbe arrestarsi in modo anomalo se viene utilizzata l'opzione del driver -merlad quando il codice sorgente chiama un simbolo che è stato definito utilizzando l'opzione del linker -Wl, –defsym.
Inizializzazione errata (XCS-2679) Esiste una discrepanza tra il punto in cui i valori iniziali per alcuni oggetti globali/statici della dimensione di un byte vengono inseriti nella memoria dati e il punto in cui si accederà alle variabili in fase di esecuzione.
avviato in modo errato set vuoti (XCS-2652) Nei casi in cui una stringa dell'oggetto per la conversione da dichiarata () contiene quello che sembra essere un numero a virgola mobile in formato esponenziale e c'è un carattere imprevisto dopo un carattere e, allora l'indirizzo vuoto, se fornito, punterà al carattere dopo la e e non la e stessa. Per esample: dichiarato ("hooey", vuoto); risulterà in un puntamento vuoto al carattere x.
Chiamate di funzioni indirette errate (XCS-2628) In alcuni casi, le chiamate di funzione effettuate tramite un puntatore a funzione archiviato come parte di una struttura potrebbero non riuscire.
strtof restituisce zero per float esadecimali (XCS-2626) Le funzioni di libreria strtof () et al e scanf () et al, convertiranno sempre un numero esadecimale in virgola mobile che non specifica un esponente in
zero. Per esample: statore(“Gufo”, &vuoto); restituirà il valore 0, non 1.
Messaggi di stack advisor imprecisi (XCS-2542, XCS-2541) In alcuni casi, l'avviso dell'advisor dello stack relativo alla ricorsione o allo stack indeterminato utilizzato (possibilmente attraverso l'uso di alloca()) non viene emesso.
Errore con codice di interruzione duplicato (XCS-2421) Dove più di una funzione di interruzione ha lo stesso corpo, il compilatore potrebbe avere l'output per una funzione di interruzione che chiama l'altra. Ciò comporterà il salvataggio non necessario di tutti i registri cancellati dalle chiamate e gli interrupt verranno abilitati anche prima dell'esecuzione dell'epilogo dell'attuale gestore di interrupt, il che potrebbe portare a un errore del codice.
Oggetti Const non nella memoria del programma (XCS-2408) Per i progetti avrxmega3 e avertins, gli oggetti const non idealizzati vengono inseriti nella memoria dei dati, anche se un avviso suggerisce che sono stati inseriti nella memoria del programma. Ciò non influirà sui dispositivi che non hanno la memoria del programma mappata nello spazio di memoria dei dati, né influirà su alcun oggetto inizializzato.
Output errato con percorso DFP non valido (XCS-2376) Se il compilatore viene richiamato con un percorso DFP non valido e una "spec" file esiste per il dispositivo selezionato, il compilatore non segnala il family pack del dispositivo mancante e seleziona invece la 'spec' file, che potrebbe quindi portare a un output non valido. La 'specifica' files potrebbero non essere aggiornati con i DFP distribuiti ed erano destinati all'uso solo con i test interni del compilatore.
Sovrapposizione memoria non rilevata (XCS-1966) Il compilatore non rileva la sovrapposizione di memoria di oggetti resi assoluti a un indirizzo (tramite at ()) e altri oggetti che utilizzano l'identificatore di sezione () e che sono collegati allo stesso indirizzo.
Errore con le funzioni di libreria e _meme (XCS-1763) Le funzioni limbic float chiamate con un argomento nello spazio degli indirizzi _memo potrebbero non riuscire. Si noti che le routine di libreria vengono chiamate da alcuni operatori C, quindi, ad esample, il seguente codice è interessato: return regFloatVar > memxFloatVar;
Implementazione limbica limitata (AVRTC-731) Per i prodotti ATTiny4/5/9/10/20/40, l'implementazione della libreria standard C/Math in limbic è molto limitata o assente.
Limitazioni della memoria del programma (AVRTC-732) Le immagini della memoria di programma oltre i 128 kb sono supportate dalla toolchain; tuttavia, esistono casi noti di interruzione del linker senza rilassamento e senza un messaggio di errore utile anziché generare gli stub di funzione richiesti quando viene utilizzata l'opzione -relax.
Limitazioni dello spazio dei nomi (AVRTC-733) Gli spazi di indirizzi denominati sono supportati dalla toolchain, soggetti alle limitazioni menzionate nella sezione Qualificatori di tipo speciale della guida dell'utente.
Fusi orari IL le funzioni di libreria assumono GMT e non supportano i fusi orari locali, quindi l'ora locale () restituirà la stessa ora di gummite (), ad esempioamplui.
ASSISTENZA CLIENTI
file:///Applicazioni/microehip/xc8/v 2 .40/docs/Leggimi_X C 8_ per A VR. htm
Documenti / Risorse
![]() |
Software del compilatore MICROCHIP MPLAB XC8 C [pdf] Manuale del proprietario MPLAB XC8 C, software del compilatore MPLAB XC8 C, software del compilatore, software |