Software compilador MICROCHIP MPLAB XC8 C
ESTE DOCUMENTO CONTÉN INFORMACIÓN IMPORTANTE RELATIVA AO COMPILADOR MPLAB XC8 C CANDO SE DIRAN DISPOSITIVOS MICROCHIP AVR.
LER ANTES DE EXECUTAR ESTE SOFTWARE. CONSULTA AS NOTAS DE VERSIÓN DO COMPILADOR MPLAB XC8 C PARA O DOCUMENTO PIC SE ESTÁ A UTILIZAR O COMPILADOR PARA DISPOSITIVOS PIC DE 8 BITS.
Acabadoview
Introdución
Esta versión do compilador Microchip MPLAB® XC8 C contén varias funcións novas, correccións de erros e compatibilidade con novos dispositivos.
Data de construción
A data oficial de compilación desta versión do compilador é o 3 de xullo de 2022.
Versión anterior
A versión anterior do compilador MPLAB XC8 C era a 2.39, un compilador de seguridade funcional, construído o 27 de xaneiro de 2022. O compilador estándar anterior era a versión 2.36, construída o 27 de xaneiro de 2022.
Manual de Seguridade Funcional
Un manual de seguridade funcional para os compiladores MPLAB XC está dispoñible no paquete de documentación cando compra unha licenza de seguridade funcional.
Licenzas e versións de compoñentes
O compilador MPLAB® XC8 C para ferramentas MCU AVR está escrito e distribuído baixo a licenza pública xeral (GPL) de GNU, o que significa que o seu código fonte distribúese libremente e está dispoñible para o público. O código fonte das ferramentas baixo a GNU GPL pódese descargar por separado de Microchip websitio. Podes ler a GNU GPL na páxina file nomeado localizou o subdirectorio do seu directorio de instalación. Aquí pódese atopar unha discusión xeral dos principios subxacentes á GPL. Código de soporte proporcionado para a cabeceira files, os scripts de ligazón e as bibliotecas en tempo de execución son código propietario e non están cubertos pola GPL.
Este compilador é unha implementación de GCC versión 5.4.0, binutils versión 2.26 e usa avr-libc versión 2.0.0.
Requisitos do sistema
O compilador MPLAB XC8 C e o software de licenzas que utiliza están dispoñibles para unha variedade de sistemas operativos, incluíndo versións de 64 bits dos seguintes: Edicións profesionais de Microsoft Windows 10; Ubuntu 18.04; e macOS 10.15.5. Os binarios para Windows foron asinados en código. Os binarios para mac OS foron asinados en código e notariados.
Se está a executar un servidor de licenzas de rede, só se poden utilizar ordenadores con sistemas operativos compatibles cos compiladores para aloxar o servidor de licenzas. A partir da versión 2.0 de xclm, o servidor de licenzas de rede pódese instalar nunha plataforma Microsoft Windows Server, pero o servidor de licenzas non necesita executarse nunha versión do servidor do sistema operativo.
Dispositivos compatibles
Este compilador admite todos os dispositivos AVR MCU de 8 bits coñecidos no momento do lanzamento. Consulte (no directorio doc do compilador) unha lista de todos os dispositivos compatibles. Estes fileTamén enumere os axustes de bits de configuración para cada dispositivo.
Edicións e actualizacións de licenza
O compilador MPLAB XC8 pódese activar como produto con licenza (PRO) ou sen licenza (gratis). Debes mercar unha clave de activación para licenciar o teu compilador. Unha licenza permite un maior nivel de optimización en comparación co produto gratuíto. Un compilador sen licenza pode funcionar indefinidamente sen licenza.
Un compilador MPLAB XC8 Functional Safety debe activarse cunha licenza de seguridade funcional adquirida a Microchip. O compilador non funcionará sen esta licenza. Unha vez activado, pode seleccionar calquera nivel de optimización e utilizar todas as funcións do compilador. Esta versión do compilador de seguridade funcional MPLAB XC admite a licenza de servidor de rede.
Consulte o documento Instalación e licenza de compiladores MPLAB XC C (DS50002059) para obter información sobre os tipos de licenza e a instalación do compilador cunha licenza.
Instalación e Activación
Consulte tamén as seccións de problemas e limitacións de migración para obter información importante sobre o xestor de licenzas máis recente incluído neste compilador.
Se utiliza MPLAB IDE, asegúrese de instalar a versión 5.0 ou posterior de MPLAB X IDE máis recente antes de instalar esta ferramenta. Saia do IDE antes de instalar o compilador. Execute a aplicación de instalación do compilador .exe (Windows), .run (Linux) ou aplicación (macOS), por exemplo, XC8-1.00.11403-windows.exe e siga as instrucións que aparecen na pantalla.
Recoméndase o directorio de instalación predeterminado. Se está a usar Linux, debe instalar o compilador mediante un terminal e desde unha conta root. Instala usando unha conta de macOS con privilexios de administrador.
A activación realízase agora por separado para a instalación. Consulte o documento Xestor de licenzas para compiladores MPLAB® XC C (DS52059) para obter máis información.
Se decide executar o compilador baixo a licenza de avaliación, agora recibirá un aviso durante a compilación cando estea dentro dos 14 días seguintes ao final do seu período de avaliación. O mesmo aviso emítese se está dentro dos 14 días seguintes ao final da súa subscrición HPA.
O XC Network License Server é un instalador independente e non está incluído no instalador do compilador de usuario único.
O XC License Manager agora admite a itinerancia de licenzas de rede flotantes. Destinada a usuarios móbiles, esta función permite que unha licenza flotante saia da rede durante un curto período de tempo. Usando esta función, podes desconectarte da rede e seguir usando o teu compilador MPLAB XC. Consulte o cartafol de documentos da instalación de XCLM para obter máis información sobre esta función. MPLAB X IDE inclúe unha ventá de Licenzas (Ferramentas > Licenzas) para xestionar visualmente a itinerancia.
Resolución de problemas de instalación
Se tes problemas para instalar o compilador en calquera dos sistemas operativos Windows, proba as seguintes suxestións.
- Executa a instalación como administrador.
- Establece os permisos da aplicación de instalación en "Control total". (Fai clic co botón dereito do rato en file, seleccione Propiedades, pestana Seguridade, seleccione usuario, editar.)
- Establece os permisos do cartafol temporal en "Control total!
Para determinar a localización do cartafol temporal, escriba %temp% no comando Executar (tecla do logotipo de Windows + R). Isto abrirá un file diálogo do explorador que mostra ese directorio e permitirache determinar a ruta dese cartafol.
Documentación do compilador
As guías de usuario do compilador pódense abrir desde a páxina HTML que se abre no seu navegador ao facer clic no botón azul de axuda no panel de control de MPLAB X IDE, como se indica na captura de pantalla.
Se está a crear obxectivos AVR de 8 bits, a Guía do usuario do compilador MPLAB® XC8 C para AVR® MCU contén información sobre as opcións e funcións do compilador aplicables a esta arquitectura.
Atención ao cliente
Microchip recibe informes de erros, suxestións ou comentarios sobre esta versión do compilador. Dirixe os informes de erros ou solicitudes de funcións a través do Sistema de soporte.
Actualizacións de documentación
Para ver versións en liña e actualizadas da documentación de MPLAB XC8, visite a documentación técnica en liña de Microchip websitio.
Documentación AVR nova ou actualizada nesta versión:
- Aviso de copyright de MUSL
- Instalación e licenza de compiladores MPLAB XC C (revisión M)
- Guía de usuario de MPLAB XC8 para enxeñeiros integrados - MCU AVR (revisión A)
- Guía de usuario del compilador MPLAB XC8 C para AVR MCU (revisión F)
- Guía de referencia de biblioteca estándar unificada de Microchip (revisión B)
A Guía de referencia da biblioteca estándar unificada de Microchip describe o comportamento e a interface coas funcións definidas pola biblioteca estándar unificada de Microchip, así como o uso previsto dos tipos de biblioteca e as macros. Parte desta información estaba contida anteriormente na Guía de usuario do compilador MPLAB® XC8 C para AVR® MCU. A información da biblioteca específica do dispositivo aínda está contida nesta guía do compilador.
Se estás comezando con dispositivos de 8 bits e o compilador MPLAB XC8 C, a Guía de usuario de MPLAB® XC8 para enxeñeiros incorporados: MCUs AVR® (DS50003108) ten información sobre como configurar proxectos no IDE MPLAB X e escribir código. para o seu primeiro proxecto MPLAB XC8 C. Esta guía distribúese agora co compilador.
A Guía do usuario de Hamate incluíuse no directorio docs desta versión. Esta guía está destinada a aqueles que executan Hamate como unha aplicación autónoma.
O que hai de novo
As seguintes son as novas funcións de destino AVR que agora admite o compilador. O número de versión dos subtítulos indica a primeira versión do compilador que admite as funcións seguintes.
Versión 2.40
Soporte de novo dispositivo A compatibilidade agora está dispoñible para as seguintes pezas do AVR: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32EA64 e.
Abstracción procesual mellorada Mellorouse a ferramenta de optimización de abstracción procesual (PA) para que se poida delinear o código que contén unha instrución de chamada de función (call recall). Isto só terá lugar se a pila non se usa para pasar argumentos nin para obter o valor de retorno da función. A pila úsase cando se chama unha función cunha lista de argumentos variables ou cando se chama a unha función que toma máis argumentos dos que hai rexistros designados para este fin. Esta función pódese desactivar usando a opción monk-pa-outline-calls ou a abstracción procesual pódese desactivar por completo para un obxecto file ou funcione usando o -monk-pa-on-file e -mo.-pa-on-función respectivamente, ou usando o atributo nipa (especificador nipa) selectivamente con funcións
Macro de cobertura de código O compilador agora define a macro __CODECOV se se especifica unha opción mcodecov válida.
Opción de reserva de memoria O controlador xc8-cc agora aceptará a opción -mreserve=space@start: end ao crear obxectivos AVR. Esta opción reserva o intervalo de memoria especificado no espazo de memoria de datos ou programa, evitando que o enlazador enche código ou obxectos nesta área.
IO intelixente máis intelixente Realizáronse varias melloras nas funcións de Smart IO, incluíndo axustes xerais no código principal de printf, tratando o especificador de conversión %n como unha variante independente, enlazando rutinas vararg pop baixo demanda, utilizando tipos de datos máis curtos cando sexa posible para manexar argumentos da función IO , e factorización do código común en ancho de campo e manexo de precisión. Isto pode producir un aforro significativo de código e datos, así como aumentar a velocidade de execución de IO.
Versión 2.39 (Versión de seguridade funcional)
Licenza de servidor de rede Esta versión do compilador de seguridade funcional MPLAB XC8 admite a licenza de servidor de rede.
Versión 2.36
Ningún.
Versión 2.35
Soporte de novo dispositivo O soporte está dispoñible para as seguintes pezas de AVR: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 e AVR64DD32.
Cambio de contexto mellorado A nova opción -mcall-isr-prologues cambia como as funcións de interrupción gardan os rexistros na entrada e como eses rexistros se restauran cando finaliza a rutina de interrupción. Funciona dun xeito similar á opción -mcall-prologues, pero só afecta ás funcións de interrupción (ISR).
Cambio de contexto aínda máis mellorado A nova opción -mgas-isr-prologues controla os contextos que xeran o código de picazón para pequenas rutinas de servizo de interrupción. Cando está activada, esta función fará que o ensamblador escanee o ISR para o uso do rexistro e só garde estes rexistros usados se é necesario.
Mapeo flash configurable Algúns dispositivos da familia AVR DA e AVR DB teñen un SFR (por exemplo, FLMAP) que especifica que sección de 32k da memoria do programa se asignará á memoria de datos. A nova opción - mconst-data-in-config-mapped-proem pódese usar para que o enlazador coloque todos os datos cualificados contras nunha sección de 32k e inicialice automaticamente o rexistro SFR relevante para garantir que estes datos se mapeen no espazo de memoria de datos. , onde se accederá máis eficazmente.
Bibliotecas estándar unificadas de Microchip Todos os compiladores de MPLAB XC compartirán unha biblioteca estándar unificada de Microchip, que agora está dispoñible con esta versión de MPLAB XC8. O MPLAB® XC8 C Compiler User's Guide/ou AVR® MCU xa non inclúe a documentación destas funcións estándar. Agora pódese atopar esta información na Guía de referencia da biblioteca estándar unificada de Microchip. Teña en conta que algunhas funcións previamente definidas por avr-libc xa non están dispoñibles. (Ver Biblioteca):'. funcionalidade...)
IO intelixente Como parte das novas bibliotecas unificadas, as funcións de E/S nas familias de impresión e dixitalización agora xéranse personalizados en cada compilación, en función de como se usan estas funcións no programa. Isto pode reducir substancialmente os recursos empregados por un programa.
Opción de asistencia Smart IO Ao analizar chamadas a funcións de E/S intelixentes (como printf () ou scanf () ), o compilador non sempre pode determinar a partir da cadea de formato nin inferir a partir dos argumentos eses especificadores de conversión requiridos pola chamada. Anteriormente, o compilador sempre non facía ningunha suposición e aseguraba que as funcións de E/S totalmente funcionais estaban vinculadas á imaxe final do programa. Engadiuse unha nova opción - msmart-io-format=fmt para que o compilador poida ser informado polo usuario dos especificadores de conversión utilizados polas funcións de E/S intelixentes cuxo uso é ambiguo, evitando que se liguen rutinas de E/S excesivamente longas. (Consulte Opción de formato smart-io para máis detalles).
Colocación de seccións personalizadas Anteriormente, a opción -Wl, –section-start só colocaba a sección especificada no enderezo solicitado cando o script de ligazón definiu unha sección de saída co mesmo nome. Cando non era así, a sección colocábase nun enderezo elixido polo enlazador e ignoraba a opción esencialmente. Agora respectarase a opción para todas as seccións personalizadas, aínda que o script do enlace non defina a sección. Teña en conta, con todo, que para as seccións estándar, como . texto,. bss ou. datos, o asignador de mellor axuste seguirá tendo control total sobre a súa colocación e a opción non terá ningún efecto. Use a opción -Wl, -Tsection=engadir, como se describe na guía do usuario.
Versión 2.32
Orientación de pila Dispoñible cunha licenza de compilador PRO, a función de orientación de pilas do compilador pódese usar para estimar a profundidade máxima de calquera pila utilizada por un programa. Constrúe e analiza o gráfico de chamadas dun programa, determina o uso da pila de cada función e elabora un informe, a partir do cal se pode inferir a profundidade das pilas utilizadas polo programa. Esta función está habilitada a través da opción de liña de comandos -mchp-stack-usage. Imprímese un resumo do uso da pila despois da execución. Un informe detallado da pila está dispoñible no mapa file, que se pode solicitar na forma habitual.
Soporte para novos dispositivos está dispoñible para as seguintes pezas do AVR: ATTINY 427, ATTINY 424, ATTINY 426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, AVR32, e AVR48DBXNUMX.
Soporte de dispositivos retraídos xa non está dispoñible para as seguintes pezas do AVR: AVR16DA28, AVR16DA32 e AVR16DA48.
Versión 2.31
Ningún.
Versión 2.30
Nova opción para evitar a inicialización de datos Unha nova opción de controlador -mno-data-ini t impide a inicialización dos datos e a limpeza das seccións bss. Funciona suprimindo a saída dos símbolos do_ copy_ e d o_ clear_ bss na montaxe files, o que impedirá á súa vez a inclusión desas rutinas polo enlazador.
Optimizacións melloradas Realizáronse unha serie de melloras de optimización, incluíndo a eliminación de instrucións de retorno redundantes, a eliminación dalgúns saltos despois dunha instrución de salto se o bit é, e a abstracción do procedemento mellorada e a capacidade de iterar este proceso.
Agora están dispoñibles opcións adicionais para controlar algunhas destas optimizacións, concretamente as áncoras de sección -f, que permiten realizar o acceso a obxectos estáticos en relación a un símbolo; -mpai derations=n, que permite cambiar o número de iteracións de abstracción procesual do valor predeterminado de 2; e, -mpa- call cost- shortcall, que realiza unha abstracción procesual máis agresiva, coa esperanza de que o enlazador poida relaxar as chamadas longas. Esta última opción pode aumentar o tamaño do código se non se cumpren os supostos subxacentes.
Soporte de novo dispositivo A asistencia está dispoñible para as seguintes pezas AVR: AVR16DA28, AVR16DA32,
AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 e AVR128DB64.
Soporte de dispositivo retraído A compatibilidade xa non está dispoñible para as seguintes pezas do AVR: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C e ATA664251.
Versión 2.29 (Versión de seguridade funcional)
Cabeceira file para o compilador incorporado Para garantir que o compilador se axusta ás especificacións da linguaxe como MISRA, o cabeceira file, que se inclúe automaticamente por , actualizouse. Esta cabeceira contén os prototipos de todas as funcións integradas, como os ciclos _buil tin _avrnop () e _buil tin_ avr delay_ () . Algúns incorporados poden non ser compatibles con MISRA; estes pódense omitir engadindo o define _Xe_ STRICT_ MISRA á liña de comandos do compilador. Actualizáronse os elementos incorporados e as súas declaracións para utilizar tipos de ancho fixo.
Versión 2.20
Soporte de novo dispositivo A asistencia está dispoñible para as seguintes pezas de AVR: ATTINY1624, ATTINY1626 e ATTINY1627.
Mellor asignación de mellor axuste Mellorouse o mellor asignador de axuste (BFA) do compilador para que as seccións se asignen nunha orde que permita unha mellor optimización. O BFA agora admite espazos de enderezos con nome e xestiona mellor a inicialización de datos.
Abstracción procesual mellorada As optimizacións de abstracción procesual realízanse agora en máis secuencias de código. As situacións anteriores nas que esta optimización puido aumentar o tamaño do código abordáronse facendo que o código de optimización coñecese o proceso de recollida de lixo do enlazador.
Ausencia de AVR Assembler O AVR Assembler xa non está incluído nesta distribución.
Versión 2.19 (Versión de seguridade funcional)
Ningún.
Versión 2.10
Cobertura de código Esta versión inclúe unha función de cobertura de código que facilita a análise da medida en que se executou o código fonte dun proxecto. Use a opción -mcodecov=ram para activalo. Despois da execución do programa no seu hardware, a información de cobertura de código recollerase no dispositivo, e esta pode ser transferida e mostrada polo MPLAB X IDE mediante un complemento de cobertura de código. Consulte a documentación do IDE para obter información sobre este complemento. O #pragma mcodecov pódese usar para excluír funcións posteriores da análise de cobertura. O ideal é engadir o pragma ao comezo do file para excluír esa totalidade file a partir da análise da cobertura. Alternativamente, o atributo ( (mcodecov) ) pódese usar para excluír unha función específica da análise de cobertura.
Descrición do dispositivo files Un novo dispositivo file chamado avr chipinfo. html está situado no directorio docs da distribución do compilador. Isto file enumera todos os dispositivos admitidos polo compilador. Fai clic no nome dun dispositivo e abrirase unha páxina que mostra todos os pares de valores/configuración de bits permitidos para ese dispositivo, con examples.
Abstracción procesual Engadíronse ao compilador optimizacións de abstracción de procedemento, que substitúen bloques comúns de código ensamblador con chamadas a unha copia extraída dese bloque. Estes son realizados por unha aplicación separada, que é automaticamente invocada polo compilador ao seleccionar optimizacións de nivel 2, 3 ou. Estas optimizacións reducen o tamaño do código, pero poden reducir a velocidade de execución e a capacidade de depuración do código.
A abstracción por procedementos pódese desactivar en niveis de optimización máis altos usando a opción -mno-pa, ou pode activarse en niveis de optimización inferiores (suxeito á súa licenza) usando -mpa. Pódese desactivar para un obxecto file usando -mno-pa-on-file=filenome ou desactivado para unha función usando -mno-pa na función function=.
Dentro do seu código fonte, a abstracción procesual pódese desactivar para unha función usando _attribute_ ( (nopa)) coa definición da función, ou usando _nopa, que se expande a atributo ( (nopa, noinline)) e, polo tanto, evita que se produza a incorporación de funcións. e existindo abstracción de código en liña.
Soporte de bits de bloqueo en pragma Agora pódese usar a configuración #pragma para especificar os bits de bloqueo AVR así como os outros bits de configuración. Comprobe a información do chip avr. html file (mencionado anteriormente) para os pares de configuración/valor para usar con este pragma.
Soporte de novo dispositivo A asistencia está dispoñible para as seguintes pezas: AVR28DA128, AVR64DA128, AVR32DA128 e AVR48DA128.
Versión 2.05
Máis bits para o teu diñeiro A versión de macOS deste compilador e xestor de licenzas é agora unha aplicación de 64 bits. Isto garantirá que o compilador se instalará e executarase sen avisos nas versións recentes de macOS.
Obxectos const na memoria do programa O compilador agora pode colocar obxectos const cualificados na memoria Flash do programa, en lugar de telos situados na RAM. O compilador foi modificado para que os datos globais const-qualified se almacenen na memoria flash do programa e se poida acceder a estes datos directa e indirectamente mediante as instrucións adecuadas da memoria do programa. Esta nova función está activada por defecto pero pódese desactivar mediante a opción -mno-const-data-in-progmem. Para as arquitecturas avrxmega3 e avrtiny, esta función non é necesaria e sempre está desactivada, xa que a memoria do programa está asignada ao espazo de enderezos de datos destes dispositivos.
Estándar de balde As versións sen licenza (gratuítas) deste compilador agora permiten optimizacións ata o nivel 2 incluído. Isto permitirá unha saída similar, aínda que non idéntica, á que antes era posible cunha licenza estándar.
Benvido ABRASM2 O ensamblador AVRASM2 para dispositivos de 8 bits está agora incluído no instalador do compilador XC8. Este ensamblador non o utiliza o compilador XC8, pero está dispoñible para proxectos baseados na fonte de montaxe escrita a man.
Soporte de novo dispositivo A asistencia está dispoñible para as seguintes pezas: ATMEGA1608, ATMEGA1609, ATMEGA808 e ATMEGA809.
Versión 2.00
Condutor de nivel superior Un novo controlador, chamado xc8-cc, sitúase agora enriba do controlador avr-gcc anterior e do controlador xc8, e pode chamar ao compilador axeitado en función da selección do dispositivo de destino. Este controlador acepta opcións de estilo GCC, que se traducen ou se pasan ao compilador que se está a executar. Este controlador permite usar un conxunto similar de opcións cunha semántica similar con calquera obxectivo AVR ou PIC e, polo tanto, é a forma recomendada de invocar o compilador. Se é necesario, o antigo controlador avr-gcc pódese chamar directamente usando as opcións de estilo antigo que aceptaba nas versións anteriores do compilador.
Interface C común Este compilador agora pode axustarse á Interface C común de MPLAB, o que permite que o código fonte sexa máis facilmente portado en todos os compiladores MPLAB XC. A opción -mext=cci solicita esta función, habilitando unha sintaxe alternativa para moitas extensións de idioma.
Novo controlador de bibliotecario Un novo controlador de biblioteca está situado por riba do bibliotecario de biblioteca PIC anterior e do bibliotecario avr-ar de AVR. Este controlador acepta opcións de estilo de arquivador GCC, que se traducen ou se pasan ao bibliotecario que se está executando. O novo controlador permite usar un conxunto similar de opcións cunha semántica similar para crear ou manipular calquera biblioteca PIC ou AVR file e é así a forma recomendada de invocar o bibliotecario. Se é necesario para proxectos legados, pódese chamar directamente ao bibliotecario anterior usando as opcións de estilo antigo que aceptaba nas versións anteriores do compilador.
Cuestións migratorias
As seguintes son características que agora o compilador xestiona de forma diferente. Estes cambios poden requirir modificacións no seu código fonte se se porta o código a esta versión do compilador. O número de versión dos subtítulos indica a primeira versión do compilador para admitir os cambios seguintes.
Versión 2.40
Ningún.
Versión 2.39 (Versión de seguridade funcional)
Ningún.
Versión 2.36
Ningún.
Versión 2.35
Manipulación de bases de corda (XCS-2420) Para garantir a coherencia con outros compiladores XC, as funcións de cadea XC8, como strtol () etc., xa non tentarán converter unha cadea de entrada se a base especificada é maior que 36 e no seu lugar establecerán errno en EINVAL. O estándar C non especifica o comportamento das funcións cando se supera este valor base.
Optimizacións de velocidade inadecuadas As optimizacións de abstracción de procedementos estaban a ser habilitadas ao seleccionar optimizacións de nivel 3 (-03). Estas optimizacións reducen o tamaño do código a costa da velocidade do código, polo que non deberían terse realizado. Os proxectos que usan este nivel de optimización poden ver diferenzas no tamaño do código e na velocidade de execución cando se crean con esta versión.
Funcionalidade da biblioteca O código para moitas das funcións estándar da biblioteca C agora provén da biblioteca estándar unificada de Microchip, que pode presentar un comportamento diferente nalgunhas circunstancias en comparación co proporcionado pola antiga biblioteca avr-libc. Por exampxa non é necesario ligar na biblioteca lprintf_flt (opción -print _flt) para activar a compatibilidade de E/S con formato para especificadores de formato flotante. As funcións de E/S intelixentes da biblioteca estándar unificada de Microchip fan que esta opción sexa redundante. Ademais, xa non é necesario o uso de rutinas con sufixo _p para funcións de cadea e memoria (por exemplo, strcpy_P () etc.. ) que operan con cadeas const en flash. As rutinas C estándar (por exemplo, strcpy ()) funcionarán correctamente con tales datos cando a función const-data-in-program-memory estea activada.
Versión 2.32
Ningún.
Versión 2.31
Ningún.
Versión 2.30
Ningún.
Versión 2.29 (Versión de seguridade funcional)
Ningún.
Versión 2.20
Cambiouse o deseño de DFP O compilador agora asume un deseño diferente que usan os DFP (paquetes familiares de dispositivos). Isto significará que un DFP máis antigo pode non funcionar con esta versión e que os compiladores máis antigos non poderán utilizar os DFP máis recentes.
Versión 2.19 (Versión de seguridade funcional)
Ningún.
Versión 2.10
Ningún
Versión 2.05
Obxectos const na memoria do programa Teña en conta que, por defecto, os obxectos cualificados const colocaranse e accederase á memoria do programa (como se describe aquí) . Isto afectará o tamaño e a velocidade de execución do teu proxecto, pero debería reducir o uso de RAM. Esta función pódese desactivar, se é necesario, mediante a opción -mnoconst- da ta-in-progmem.
Versión 2.00
Fusibles de configuración Os fusibles de configuración do dispositivo agora pódense programar usando un pragma de configuración seguido de pares de valores de configuración para especificar o estado do fusible, por exemplo
#pragma config WDT0N = SET
#pragma config B0DLEVEL = B0DLEVEL_4V3
Obxectos e funcións absolutas Agora pódense colocar obxectos e funcións nun enderezo específico na memoria usando o especificador CCI _at (enderezo), por exemploample: #incluír int foobar at(Ox800100); char at(Ox250) get ID(int offset) { … } O argumento deste especificador debe ser unha constante que represente o enderezo no que se colocará o primeiro byte ou instrución. Os enderezos da memoria RAM indícanse mediante unha compensación de 0x800000. Active o CCI para usar esta función.
Nova sintaxe da función de interrupción O compilador agora acepta o especificador de interrupcións CCI (num) para indicar que as funcións C son controladores de interrupcións. O especificador toma un número de interrupción, por exemploample: #incluír void interrupción (SPI STC_ vect _num) spi Isr (void) { … }
Problemas solucionados
A continuación móstranse as correccións que se fixeron no compilador. Estes poden corrixir erros no código xerado ou alterar o funcionamento do compilador ao que estaba previsto ou especificado pola guía do usuario. O número de versión dos subtítulos indica a primeira versión do compilador que contén correccións para os seguintes problemas. As etiquetas entre corchetes no título son a identificación do problema na base de datos de seguimento. Estes poden ser útiles se precisas contactar co servizo de asistencia.
Teña en conta que algúns problemas específicos do dispositivo corríxense no Device Family Pack (DFP) asociado co dispositivo. Consulte o MPLAB Pack Manager para obter información sobre os cambios realizados nos DFP e para descargar os últimos paquetes.
Versión 2.40
Demasiado relaxado (XCS-2876) Ao usar a opción -mrelax, o compilador non estaba a asignar algunhas seccións xuntas, o que resultaba en tamaños de código menos óptimos. Isto puido ocorrer con código que usaba as novas bibliotecas MUSL ou con símbolos débiles.
A función de mapeo non está desactivada como se indica na advertencia (XCS-2875) A función cost-data-in-config mappedprogmem depende de que se active a función cost-data-in-proem. Se a función cost-data-ipconfig-mapped-proem estivo activada explícitamente mediante a opción e se desactivou a función cost-data-inprogmem, o paso da ligazón fallou, a pesar dunha mensaxe de aviso que indicaba que o contra data-in-config-mapped- A función proem desactivouse automaticamente, o que non era totalmente correcto. A función const-data-in-config-mapped-proem agora está totalmente desactivada nesta situación.
Cambios de DFP para acceder correctamente a NVMCTRL (XCS-2848) O código de inicio en tempo de execución utilizado polos dispositivos AVR64EA non tivo en conta que o rexistro NVMCTRL estaba baixo Protección de cambio de configuración (CCP) e non foi capaz de establecer o SFR de IO na páxina utilizada polo compilador const-data-in configmapped-proem característica. Os cambios realizados na versión 2.2.55 de AVR-Ex_DFP permitirán que o código de inicio de execución escriba correctamente neste rexistro.
Cambios de DFP para evitar a asignación flash (XCS-2847) Implementouse unha solución para un problema coa función do dispositivo de mapeo flash informado na Errata de silicio AVR128DA28/32/48/64 (DS80000882). A función do compilador const-data-in-config-mapped-proem non se aplicará de forma predeterminada aos dispositivos afectados e este cambio aparecerá na versión 2.2.160 de AVR-Ex_DFP.
Erro de compilación con sinhf ou coshf (XCS-2834) Os intentos de usar as funcións da biblioteca sinhf () ou coshf () provocaron un erro de ligazón que describiu unha referencia sen definir. A función que falta á que se fai referencia agora incluíuse na distribución do compilador.
Erros de compilación con nopa (XCS-2833) Usar o atributo nopa cunha función que teña especificado o nome do ensamblador usando como () desencadeou mensaxes de erro do ensamblador. Esta combinación non é posible.
Fallo da función variádica con argumentos de punteiro (XCS-2755, XCS-2731) As funcións cun número variable de argumentos esperan que se pasen punteiros de 24 bits (tipo _memo) na lista de argumentos variables cando se habilita a función de datos de custo en proem. Os argumentos que apuntaban á memoria de datos pasaban como obxectos de 16 bits, o que provocaba un fallo de código cando finalmente foron lidos. Cando se habilita a función contras data-in-proem, agora todos os argumentos de punteiros de 16 bits convértense en punteiros de 24 bits. Fallas nas funcións da biblioteca strtoxxx (XCS-2620) Cando se habilitou a función const-data-in-proem, o parámetro enter das funcións da biblioteca strtoxxx non se actualizou correctamente para os argumentos de cadea de orixe que non están na memoria do programa.
Alertas de emisións non válidas (XCS-2612) O compilador agora emitirá un erro se a función cost-in-proem está activada e o enderezo dun literal de cadea se envía explícitamente ao espazo de enderezos de datos (eliminando o calificador const), por exemploample, (uint8 t *) "Ola mundo!". Un aviso é un problema se o enderezo pode non ser válido cando un punteiro de datos const se envía explícitamente ao espazo de enderezos de datos.
Colocación de obxectos const non inicializados (XCS-2408) Os obxectos const e const v olátiles non inicializados non se estaban colocando na memoria do programa en dispositivos que mapeaban toda ou parte da súa memoria de programa no espazo de enderezos de datos. Para estes dispositivos, estes obxectos colócanse agora na memoria do programa, facendo que o seu funcionamento sexa consistente con outros dispositivos.
Versión 2.39 (Versión de seguridade funcional)
Ningún.
Versión 2.36
Erro ao atrasar (XCS-2774) Os cambios menores nas optimizacións predeterminadas do modo Libre impediron o pregamento constante de expresións de operandos nas funcións integradas de retardo, o que provocou que se tratasen como non contactos e desencadeasen o erro: _buil tin avr delay_ cycles expects ac ompile constante de tempo enteiro.
Versión 2.35
Asignación contigua mediante _at (XCS-2653) A asignación contigua de varios lugares de obxectos nunha sección co mesmo nome e usando en () non funcionou correctamente. Por example: constchararrl [ ] at tri butte ((sect on (".misses"))) at (Ox50 0 ) = {Oxo , Ox CD} ; cost char arr2[ ] at tri butte ((section(“.my s eke”))) = {Boi, Boi FE }; debería ter colocado arr2 inmediatamente despois de aril.
Especificación de enderezos de inicio de sección (XCS-2650) A opción -Wal, –section-start fallaba silenciosamente ao colocar seccións no enderezo de inicio indicado. Este problema foi solucionado para todas as seccións con nome personalizado; non obstante, non funcionará para ningunha sección estándar, como . texto ou. bss, que debe colocarse mediante a opción -Wl, -T.
O linker falla ao relaxarse (XCS-2647) Cando se habilitou a optimización -relax e había seccións de código ou datos que non encaixaban na memoria dispoñible, o enlazador fallou. Agora, en tal circunstancia, emítense mensaxes de erro.
Acceso a EEPROM incorrecto (XCS-2629) A rutina de bloqueo _read_ de leproma non funcionou correctamente nos dispositivos Mega cando se habilitou a opción -monist-data-in-proem (que é o estado predeterminado), o que provocou que a memoria EEPROM non se lise correctamente.
Asignación de memoria non válida (XCS-2593, XCS-2651) Cando a opción do enlazador -Text ou -Tata (por exemploampse especifica o ficheiro pasado mediante unha opción de controlador -Wl), actualizouse a orixe da rexión de texto/datos correspondente; con todo, o enderezo final non se axustou en consecuencia, o que podería levar a que a rexión superase o rango de memoria do dispositivo de destino.
Código de interrupción ATtiny non válido (XCS-2465) Cando se construíu para dispositivos Tatin e se desactivaron as optimizacións (-00), é posible que as funcións de interrupción desencadeasen mensaxes do ensamblador do operando fóra do rango.
Opcións que non se están a pasar (XCS-2452) Cando se utilizaba a opción -Wl con varias opcións de ligazón separadas por comas, non todas as opcións de ligazón se pasaron ao enlazador.
Erro na lectura indirecta da memoria do programa (XCS-2450) Nalgúns casos, o compilador produciu un erro interno (insn irrecoñecible) ao ler un valor de dous bytes desde un punteiro á memoria do programa.
Versión 2.32
Falla o segundo acceso á biblioteca (XCS-2381) Invocando a versión de Windows do xc8-ar. O arquivador da biblioteca exe por segunda vez para acceder a un arquivo de biblioteca existente pode fallar cunha mensaxe de erro que non se pode cambiar de nome.
Versión 2.31
Fallos inexplicables do compilador (XCS-2367) Cando se executa en plataformas Windows que tiñan o directorio temporal do sistema definido nunha ruta que incluía un punto'.' carácter, o compilador pode fallar ao executarse.
Versión 2.30
Etiquetas globais extraviadas despois de delinear (XCS-2299) É posible que o código de ensamblaxe escrito a man que coloca etiquetas globais dentro de secuencias de ensamblaxe que se eliminan mediante a abstracción procesual non se reposicionou correctamente.
Un accidente relaxante (XCS-2287) O uso da opción -merlad puido provocar que o enlazador fallase cando as optimizacións de relaxación do salto de cola intentaron eliminar instrucións ret que non estaban ao final dunha sección.
Fallo ao optimizar as etiquetas como valores (XCS-2282) O código que usa a extensión da linguaxe GNU C "Etiquetas como valores" puido provocar que as optimizacións de abstracción procesual fallasen, cun erro de corrección de intervalos de VMA descritos.
Non tan constante (XCS-2271) Os prototipos para arranca () e outras funcións desde xa non especifica o calificador de custo non estándar nos punteiros de cadea devoltos cando a función -monist-data inprogmem está desactivada. Teña en conta que cos dispositivos avrxmega3 e avertin, esta función está activada permanentemente.
Inicializadores perdidos (XCS-2269) Cando se colocou máis dunha variable nunha unidade de tradución nunha sección (usando sección ou atributo ((sección))), e a primeira destas variables estaba inicializada en cero ou non tiña un inicializador, os inicializadores para outras variables da mesma unidade de tradución que se colocaban no mesmo tramo perdéronse.
Versión 2.29 (Versión de seguridade funcional)
Ningún.
Versión 2.20
Erro con comandos longos (XCS-1983) Cando se usa un destino AVR, é posible que o compilador se detivese con a file non se atopou un erro, se a liña de comandos era moi grande e contiña caracteres especiais como comiñas, barras inclinadas invertidas, etc.
Sección de rodata sen asignar (XCS-1920) O enlazador AVR non puido asignar memoria para seccións de rodata personalizadas ao construír para arquitecturas avrxmega3 e avrtiny, o que pode producir erros de superposición de memoria.
Versión 2.19 (Versión de seguridade funcional)
Ningún.
Versión 2.10
Errores de reubicación (XCS-1891) O mellor asignador de axustes foi deixar "buratos" de memoria entre seccións despois da relaxación do enlazador. Ademais da fragmentación da memoria, isto aumentou a posibilidade de que houbese fallos de reubicación do enlazador relacionados con saltos relativos ao ordenador ou as chamadas que quedan fóra do alcance.
Instrucións non transformadas pola relaxación (XCS-1889) A relaxación do enlace non se produciu para as instrucións de salto ou chamada cuxos obxectivos se fan accesibles se se relaxan.
Falta funcionalidade (XCSE-388) Varias definicións de , como clock_div_t e clock_prescale_set (), non se definiron para dispositivos, incluídos os ATmega324PB, ATmega328PB, ATtiny441 e ATtiny841.
Faltan macros As macros do preprocesador_ xcs _MODE_, _xcs VERSION, _xc e xcs non foron definidas automaticamente polo compilador. Estes xa están dispoñibles.
Versión 2.05
Erro interno do compilador (XCS-1822) Ao construír en Windows, é posible que se producise un erro do compilador interno ao optimizar o código.
Non se detectou o exceso de RAM (XCS-1800, XCS-1796) O compilador non detectou nalgunhas situacións os programas que excedían a RAM dispoñible, o que provocou un fallo do código de execución.
Memoria flash omitida (XCS-1792) Para os dispositivos avrxmega3 e avrtiny, partes da memoria flash poderían quedar sen programar polo MPLAB X IDE.
Produciuse un erro ao executar o principal (XCS-1788) Nalgunhas situacións nas que o programa non tiña variables globais definidas, o código de inicio de execución non saía e nunca se chegou á función principal ().
Información de memoria incorrecta (XCS-1787) Para os dispositivos avrxmega3 e avrtiny, o programa avr-size informaba de que os datos de só lectura consumían memoria RAM en lugar de memoria do programa.
Lectura incorrecta da memoria do programa (XCS-1783) É posible que os proxectos compilados para dispositivos con memoria de programa asignada ao espazo de enderezos de datos e que definan obxectos mediante a macro/atributo PROGMEM leran estes obxectos desde o enderezo incorrecto.
Erro interno cos atributos (XCS-1773) Produciuse un erro interno se definiu obxectos punteiro co
Tokens _at () ou attribute() entre o nome do punteiro e o tipo desreferenciado, por exemploample, char *
_en ( 0x80015 0) cp; Agora emítese unha advertencia se se atopa ese código.
Produciuse un erro ao executar o principal (XCS-1780, XCS-1767, XCS-1754) O uso de variables EEPROM ou a definición de fusibles mediante o pragma de configuración puido provocar unha inicialización incorrecta dos datos e/ou bloquear a execución do programa no código de inicio de execución, antes de chegar a main () .
Erro de fusible con dispositivos pequenos (XCS-1778, XCS-1742) Os dispositivos attiny4/5/9/10/20/40 tiñan unha lonxitude de fusible incorrecta especificada na súa cabeceira files que levan a erros de enlace ao tentar construír código que define fusibles.
Fallo de segmentación (XCS-1777) Corrixiuse un fallo de segmentación intermitente.
Fallo do montador (XCS-1761) O ensamblador avr-as puido fallar cando o compilador se executou en Ubuntu 18.
Obxectos non borrados (XCS-1752) É posible que os obxectos de duración de almacenamento estático non inicializados non fosen borrados polo código de inicio do tempo de execución.
Ignorouse a especificación do dispositivo en conflito (XCS-1749) O compilador non estaba xerando un erro cando se utilizaron varias opcións de especificación de dispositivos e indicaban dispositivos diferentes.
Corrupción da memoria polo montón (XCS-1748) O símbolo de inicio heap_ estaba a ser definido incorrectamente, o que provocou a posibilidade de que as variables comúns fosen corrompidas polo montón.
Erro de traslado do enlace (XCS-1739) É posible que se emitise un erro de reubicación do enlazador cando o código contiña un rjmp ou rcall cun destino a exactamente 4k bytes de distancia.
Versión 2.00
Ningún.
Problemas coñecidos
As seguintes limitacións no funcionamento do compilador. Estas poden ser restricións xerais de codificación ou
desviacións da información contida no manual do usuario. As etiquetas entre corchetes no título son a identificación do problema na base de datos de seguimento. Isto pode ser beneficioso se precisas contactar co servizo de asistencia. Aqueles elementos que non teñen etiquetas son limitacións que describen o modo operandi e que probablemente permanecerán en vigor permanentemente.
Integración MPLAB X IDE
Integración MPLAB IDE Se o compilador se vai usar desde MPLAB IDE, debes instalar o MPLAB IDE antes de instalar o compilador.
Xeración de código
Fallo de asignación de memoria PA (XCS-2881) Ao usar os optimizadores de abstracción de procedementos, o enlazador pode informar erros de asignación de memoria cando o tamaño do código é próximo á cantidade de memoria do programa dispoñible no dispositivo, aínda que o programa debería poder axustar o espazo dispoñible.
Smart-IO non tan intelixente (XCS-2872) A función smart-io do compilador xerará un código válido pero subóptimo para a función sprint se se desactivou a función coast-data-in-proem ou se o dispositivo ten todo o seu flash mapeado na memoria de datos.
Smart-IO aínda menos intelixente (XCS-2869) A función smart-io do compilador xerará código válido pero subóptimo cando se usen as opcións -floe e -fno-buil tin.
Colocación de datos de só lectura subóptima (XCS-2849) O enlazador non coñece actualmente as seccións de memoria APPCODE e APPDATA, nin as divisións [Non-] Read-While-Write no mapa de memoria. Como resultado, hai unha pequena posibilidade de que o enlazador poida asignar datos de só lectura nunha área de memoria inadecuada. A posibilidade de que os datos se perdan se habilita a función coast-data-in-pragma, especialmente se tamén está habilitada a función coast-data-in-config-mapped-proem. Estas funcións pódense desactivar se é necesario.
Obxecto file orde de procesamento (XCS-2863) A orde en que os obxectos files serán procesados polo enlazador poden diferir segundo o uso de optimizacións de abstracción procesual (opción -mpa). Isto só afectaría ao código que define funcións débiles en varios módulos.
Erro do vinculador con absoluto (XCS-2777) Cando un obxecto fíxose absoluto nun enderezo ao inicio da RAM e tamén se definiron obxectos sen inicializar, é posible que se desencadee un erro de ligazón.
ID de activación curta (XCS-2775) Para os dispositivos ATA5700/2, os rexistros PHID0/1 só se definen como 16 bits de ancho, en lugar de 32 bits de ancho.
Fallo do enlace ao chamar ao símbolo (XCS-2758) O enlazador pode fallar se se utiliza a opción do controlador -merlad cando o código fonte chama a un símbolo que foi definido mediante a opción do enlazador -Wl, –defsym.
Inicialización incorrecta (XCS-2679) Hai unha discrepancia entre onde se colocan os valores iniciais para algúns obxectos globais/estáticos de tamaño de byte na memoria de datos e onde se accederá ás variables no tempo de execución.
iniciado incorrectamente queda baleiro (XCS-2652) Nos casos nos que unha cadea de asunto para a conversión mediante indicado () contén o que parece ser un número de coma flotante en formato exponencial e hai un carácter inesperado despois dun carácter e, entón o enderezo baleiro, se se proporciona, apuntará ao carácter despois. a e e non a propia e. Por example: stated("hooey", baleiro); dará lugar a un apuntamento baleiro ao carácter x.
Chamadas de función indirecta incorrectas (XCS-2628) Nalgúns casos, as chamadas de función feitas a través dun punteiro de función almacenado como parte dunha estrutura poden fallar.
strtof devolve cero para flotantes hexadecimais (XCS-2626) As funcións da biblioteca strtof () et al e scanf () et al, sempre converterán un número hexadecimal de coma flotante que non especifique un expoñente en
cero. Por example: estator ("Buho", &empty); devolverá o valor 0, non 1.
Mensaxes inexactas do asesor de pila (XCS-2542, XCS-2541) Nalgúns casos, non se emite a advertencia do asesor de pila sobre a recursividade ou a pila indeterminada utilizada (posiblemente mediante o uso de alloca()).
Fallo co código de interrupción duplicado (XCS-2421) Cando máis dunha función de interrupción teña o mesmo corpo, o compilador pode ter a saída dunha función de interrupción que chame á outra. Isto provocará que todos os rexistros afectados por chamadas sexan gardados innecesariamente e as interrupcións activaranse mesmo antes de que se execute o epílogo do controlador de interrupcións actual, o que podería provocar un fallo do código.
Obxectos Const non na memoria do programa (XCS-2408) Para os proxectos avrxmega3 e avertins, os obxectos const non idealizados colócanse na memoria de datos, aínda que unha advertencia suxire que foron colocados na memoria do programa. Isto non afectará aos dispositivos que non teñan memoria de programa asignada ao espazo de memoria de datos, nin afectará a ningún obxecto que estea inicializado.
Saída incorrecta cunha ruta DFP non válida (XCS-2376) Se se invoca o compilador cunha ruta de DFP non válida e unha "especificación" file existe para o dispositivo seleccionado, o compilador non está informando do paquete familiar de dispositivos que falta e selecciona a "especificación" file, o que pode levar a unha saída non válida. A "especificación" fileÉ posible que s non estean actualizados cos DFP distribuídos e só se destinan a probas internas do compilador.
Superposición de memoria sen detectar (XCS-1966) O compilador non detecta a superposición de memoria de obxectos feitos absolutos nun enderezo (a través de at ()) e outros obxectos usando o especificador de sección () e que están ligados ao mesmo enderezo.
Fallo coas funcións da biblioteca e _meme (XCS-1763) As funcións flotantes límbicas chamadas cun argumento no espazo de enderezos _memo poden fallar. Teña en conta que as rutinas da biblioteca son chamadas desde algúns operadores C, polo que, por exemploample, o seguinte código está afectado: return regFloatVar > memxFloatVar;
Implementación límbica limitada (AVRTC-731) Para os produtos ATTiny4/5/9/10/20/40, a implementación estándar da biblioteca C/Matemática en límbico é moi limitada ou non está presente.
Limitacións da memoria do programa (AVRTC-732) A cadea de ferramentas admite imaxes de memoria do programa que superan os 128 kb; porén, hai casos coñecidos de abortos do enlazador sen relaxación e sen unha mensaxe de erro útil en lugar de xerar os stubs de funcións necesarios cando se usa a opción -relax.
Limitacións de espazo de nomes (AVRTC-733) Os espazos de enderezos con nome son compatibles coa cadea de ferramentas, suxeitos ás limitacións mencionadas na sección Cualificadores de tipos especiais da guía do usuario.
Zonas horarias O As funcións da biblioteca asumen GMT e non admiten zonas horarias locais, polo que a hora local () devolverá a mesma hora que gummite (), por exemploample.
ATENCIÓN AO CLIENTE
file:///Aplicacións/microehip/xc8/v 2 .40/docs/Read me_X C 8_ para A VR. htm
Documentos/Recursos
![]() |
Software compilador MICROCHIP MPLAB XC8 C [pdfManual do propietario MPLAB XC8 C, MPLAB XC8 C Software de compilación, Software de compilación, Software |