Logo MICROCHIPNotas de lançamento do compilador MPLAB® XC8 C versão 2.41 para AVR® MCU
Manual do Proprietário

Software de desenvolvimento do compilador MPLAB XC8 C

ESTE DOCUMENTO CONTÉM INFORMAÇÕES IMPORTANTES RELACIONADAS AO COMPILADOR MPLAB XC8 C AO VISUALIZAR DISPOSITIVOS MICROCHIP AVR.
LEIA-O ANTES DE EXECUTAR ESTE SOFTWARE. VEJA AS NOTAS DE LANÇAMENTO DO COMPILADOR MPLAB XC8 C PARA O DOCUMENTO PIC SE VOCÊ ESTIVER USANDO O COMPILADOR PARA 8-BIT PIC DISPOSITIVOS.

Sobreview

1.1. Introdução
Esta versão do compilador Microchip MPLAB® XC8 C contém vários novos recursos e correções de bugs.
1.2. Data de construção
A data oficial de construção desta versão do compilador é 8 de fevereiro de 2023.
1.3. Versão anterior
A versão anterior do compilador MPLAB XC8 C era 2.40, construída em 3 de julho de 2022.
1.4. Manual de Segurança Funcional
Um Manual de Segurança Funcional para os compiladores MPLAB XC está disponível no pacote de documentação quando você compra uma licença de segurança funcional.
1.5. Licenças e versões de componentes
As ferramentas MPLAB XC8 C Compiler para AVR MCUs são escritas e distribuídas sob a GNU General Public License (GPL), o que significa que seu código-fonte é distribuído gratuitamente e disponível ao público.
O código-fonte para ferramentas sob a GNU GPL pode ser baixado separadamente do Microchip's website. Você pode ler a GNU GPL no arquivo chamado localizado no subdiretório de seu diretório install license.txt avr/doc. Uma discussão geral dos princípios subjacentes à GPL pode ser encontrada aqui.
O código de suporte fornecido para os arquivos de cabeçalho, scripts de linker e bibliotecas de tempo de execução são códigos proprietários e não cobertos pela GPL.
Este compilador é uma implementação do GCC versão 5.4.0, binutils versão 2.26 e usa avr-libc versão 2.0.0.
1.6. Requisitos do sistema
O compilador MPLAB XC8 C e o software de licenciamento que ele utiliza estão disponíveis para uma variedade de sistemas operacionais, incluindo versões de 64 bits dos seguintes: Edições profissionais do Microsoft® Windows® 10; Ubuntu® 18.04; e macOS® 10.15.5. Os binários para Windows foram assinados por código. Os binários para macOS foram assinados por código e autenticados. O MPLAB XC Network License Server está disponível para uma variedade de sistemas operacionais de 64 bits, incluindo Microsoft Windows 10 e superior; Ubuntu 18.04 e superior; ou macOS 10.15 e superior. O servidor também pode ser executado em vários outros sistemas operacionais, incluindo Windows Server, distribuições Linux, como Oracle® Enterprise Linux® e Red Hate Enterprise Linux, bem como versões mais antigas de sistemas operacionais suportados. No entanto, o MPLAB XC Network License Server não é testado nesses sistemas operacionais. O servidor de licenças de rede MPLAB XC pode ser executado em máquinas virtuais do sistema operacional suportado usando uma licença de máquina virtual para licenças de rede (SW006021-VM). Todas as versões de 32 bits do MPLAB XC Network Server foram descontinuadas a partir da versão 3.00.
dispositivos suportados
Este compilador suporta todos os dispositivos AVR MCU de 8 bits disponíveis no momento do lançamento. Consulte (no diretório do compilador) para obter uma lista de todos os dispositivos suportados. Esses arquivos também listam
avr_chipinfo.html doc de configuração de bits para cada dispositivo.

1.7. Edições e atualizações de licença
O compilador MPLAB XC8 pode ser ativado como um produto licenciado (PRO) ou não licenciado (Free). Você precisa comprar uma chave de ativação para licenciar seu compilador. Uma licença permite um nível mais alto de otimização em comparação com o produto gratuito. Um compilador não licenciado pode ser operado indefinidamente sem uma licença. Um compilador de segurança funcional MPLAB XC8 deve ser ativado com uma licença de segurança funcional adquirida da Microchip. O compilador não funcionará sem esta licença. Uma vez ativado, você pode selecionar qualquer nível de otimização e usar todos os recursos do compilador. Esta versão do Compilador de Segurança Funcional MPLAB XC suporta a Licença de Servidor de Rede.
Consulte o documento Instalando e licenciando compiladores MPLAB XC C (DS50002059) para obter informações sobre tipos de licença e instalação do compilador com uma licença.

1.8. Instalação e ativação
Consulte também as seções Problemas e limitações de migração para obter informações importantes sobre o gerenciador de licenças mais recente incluído neste compilador.
Se estiver usando o MPLAB IDE, certifique-se de instalar o último MPLAB X IDE versão 5.0 ou posterior antes de instalar esta ferramenta. Saia do IDE antes de instalar o compilador. Execute o aplicativo instalador do compilador .exe .run .app (Windows), (Linux) ou (macOS), por exemplo, e siga as instruções na tela. XC8-1.00.11403-windows.exe O diretório de instalação padrão é recomendado. Se estiver usando Linux, você deve instalar o compilador usando um terminal e de uma conta root. Instale usando uma conta macOS com privilégios de administrador.
A ativação agora é realizada separadamente da instalação. Consulte o documento License Manager for MPLAB® XC C Compilers (DS52059) para obter mais informações.
Se você optar por executar o compilador sob a licença de avaliação, agora receberá um aviso durante a compilação quando estiver dentro de 14 dias do final do período de avaliação. O mesmo aviso é emitido se você estiver dentro de 14 dias após o término de sua assinatura HPA.
O XC Network License Server é um instalador separado e não está incluído no instalador do compilador de usuário único.
O XC License Manager agora suporta roaming de licenças de rede flutuante. Destinado a usuários móveis, esse recurso permite que uma licença flutuante saia da rede por um curto período de tempo. Usando este recurso, você pode se desconectar da rede e ainda usar seu compilador MPLAB XC. Consulte a pasta doc da instalação do XCLM para obter mais informações sobre esse recurso.
O MPLAB X IDE inclui uma janela de Licenças (Ferramentas > Licenças) para gerenciar visualmente o roaming.

1.8.1. Resolvendo problemas de instalação
Se você tiver dificuldades para instalar o compilador em qualquer um dos sistemas operacionais Windows, tente as seguintes sugestões.
Execute a instalação como administrador.
Defina as permissões do aplicativo instalador para 'Controle total'. (Clique com o botão direito do mouse no arquivo, selecione Propriedades, guia Segurança, selecione usuário, edite.)
Defina as permissões da pasta temporária como 'Controle total'.
Para determinar a localização da pasta temporária, digite %temp% no comando Executar (tecla do logotipo do Windows + R).
Isso abrirá uma caixa de diálogo do explorador de arquivos mostrando esse diretório e permitirá que você determine o caminho dessa pasta.
1.9. Documentação do compilador
Os guias do usuário do compilador podem ser abertos a partir da página HTML que se abre em seu navegador ao clicar no botão de ajuda azul no painel do MPLAB X IDE, conforme indicado na captura de tela.

Se você estiver construindo para alvos AVR de 8 bits, o Guia do Usuário do Compilador MPLAB® XC8 C para AVR® MCU contém informações sobre as opções e recursos do compilador que são aplicáveis ​​a esta arquitetura.

Software de desenvolvimento do compilador MICROCHIP MPLAB XC8 C -

1.10. Suporte ao Cliente
A Microchip agradece relatórios de bugs, sugestões ou comentários sobre esta versão do compilador. Dirija quaisquer relatórios de bugs ou solicitações de recursos por meio do Sistema de Suporte.

Atualizações de documentação

Para versões on-line e atualizadas da documentação do MPLAB XC8, visite a documentação técnica on-line da Microchip website. Documentação AVR nova ou atualizada nesta versão:

  • Guia do usuário do compilador MPLAB® XC8 C para AVR® MCU (revisão G)
  • AVR® GNU Toolchain to MPLAB® XC8 Migration Guide (revisão A)
  • Guia do usuário Hexmate (revisão B)

O AVR® GNU Toolchain to MPLAB® XC8 Migration Guide descreve as mudanças no código-fonte e opções de compilação que podem ser necessárias caso você decida migrar um projeto baseado em C do AVR 8-bit GNU Toolchain para o Microchip MPLAB XC8 C Compiler. O Guia de Referência da Microchip Unified Standard Library descreve o comportamento e a interface para as funções definidas pela Microchip Unified Standard Library, bem como o uso pretendido dos tipos de biblioteca e macros. Algumas dessas informações estavam anteriormente contidas no MPLAB® XC8 C Compiler User's Guide for AVR® MCU. As informações da biblioteca específica do dispositivo ainda estão contidas neste guia do compilador.
Se você está apenas começando com dispositivos de 8 bits e o MPLAB XC8 C Compiler, o MPLAB® XC8 User's Guide for Embedded Engineers – AVR® MCUs (DS50003108) tem informações sobre como configurar projetos no MPLAB X IDE e escrever código para o seu primeiro projeto MPLAB XC8 C. Este guia agora é distribuído com o compilador.
O Guia do Usuário do Hexmate destina-se àqueles que executam o Hexmate como um aplicativo independente.

O que há de novo

A seguir estão os novos recursos de destino AVR que o compilador agora suporta. O número da versão nos subtítulos indica a primeira versão do compilador para suportar os recursos a seguir.
3.1. Versão 2.41
Suporte de inicialização (XC8-3053) O compilador colocará o conteúdo de qualquer seção com um prefixo em. endereço de inicialização 0x860000 no arquivo HEX. Essas seções são usadas para a memória BOOTROW, que é projetada para o armazenamento de chaves e outras informações seguras que devem ser acessíveis apenas a um gerenciador de inicialização.

Eliminação de retorno redundante (XC8-3048) O compilador agora eliminará instruções redundantes em funções ret com um tail jump quando scripts de vinculador personalizados forem usados. Esta é uma otimização semelhante àquela executada anteriormente, mas agora é executada em todas as seções órfãs, mesmo se um script de vinculador personalizado for usado e o esquema de alocação mais adequado não estiver em jogo. Alteração do tipo de tempo (XC8-2982, 2932) O tipo de biblioteca padrão C99 foi alterado de time_t para um tipo, que oferece melhorias no tamanho do código em algumas funções longas longas relacionadas ao tempo, como. mktime longo não assinado ()
Novo nop (XC8-2946, 2945) A macro foi adicionada. Esta macro insere um no- NOP() instrução de operação nop na saída.
Atualização para XCLM (XC8-2944) O gerenciador de licenças usado com o compilador foi atualizado e agora é mais responsivo ao verificar os detalhes da licença do compilador.
Trampchamadas olined (XC8-2760) O compilador agora pode executar a substituição de instruções de chamada de forma longa por chamadas relativas mais curtas quando as formas relativas das instruções normalmente estariam fora do alcance de seu destino. Nesta situação, o compilador tentará substituir por instruções para chamar rcall uma instrução que irá 'trampexecução oline' para o endereço requerido, por exemploamparquivo: jmp
rcall tramp_foo ;foi chamado de foo

rcall tramp_foo

tramp_foo:
jmp foo

Essa otimização, juntamente com otimizações de fluxo de programa semelhantes, é controlada pela opção -mrelax.

3.2. Versão 2.40
Suporte para novos dispositivos O suporte agora está disponível para as seguintes peças AVR: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 e AVR64EA48.
Abstração de procedimento aprimorada A ferramenta de otimização de abstração de procedimento (PA) foi aprimorada para que o código contendo uma instrução de chamada de função (/ ) possa ser finalizado. Isso só ocorrerá call rcall se a pilha não for usada para passar argumentos nem obter valor de retorno da função. A pilha é usada ao chamar uma função com uma lista de argumentos variáveis ​​ou ao chamar uma função que recebe mais argumentos do que os registradores designados para esse fim. Esse recurso pode ser desabilitado usando a opção, ou a abstração procedural pode ser desabilitada totalmente para um arquivo de objeto ou função usando- e, respectivamente, ou usando o atributo (especificador) seletivamente com funções.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa Macro de cobertura de código O compilador agora define a macro se uma opção válida for __nopa __CODECOV -mcodecov especificada.
Opção de reserva de memória O driver agora aceitará a opção xc8-cc -mreserve=space@start:end ao construir para alvos AVR. Esta opção reserva o intervalo de memória especificado nos dados ou no espaço de memória do programa, evitando que o vinculador preencha código ou objetos nesta área. Smarter smart IO Várias melhorias foram feitas nas funções Smart IO, incluindo ajustes gerais no código principal printf, tratando o especificador de conversão %n como uma variante independente, vinculando em vararg pop rotinas sob demanda, usando tipos de dados mais curtos sempre que possível para manipulação Argumentos da função IO e fatoração de código comum na largura do campo e manipulação de precisão. Isso pode resultar em economia significativa de código e dados, além de aumentar a velocidade de execução do IO.

3.3. Versão 2.39 (versão de segurança funcional)
Licença de Servidor de Rede Esta versão do Compilador de Segurança Funcional MPLAB XC8 suporta a Licença de Servidor de Rede.
3.4. Versão 2.36
Nenhum.

3.5. Versão 2.35
Suporte para novos dispositivos O suporte está disponível para as seguintes peças AVR: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 e AVR64DD32.
Alternância de contexto aprimorada A nova opção -mcall-isr-prologues altera como as funções de interrupção salvam registros na entrada e como esses registros são restaurados quando a rotina de interrupção termina. Ele funciona de maneira semelhante à opção -mcall-prologues, mas afeta apenas as funções de interrupção (ISRs).
Troca de contexto ainda mais aprimorada A nova opção -mgas-isr-prologues controla o código de troca de contexto gerado para pequenas rotinas de serviço de interrupção. Quando ativado, esse recurso fará com que o montador verifique o ISR para uso de registro e salve apenas esses registros usados, se necessário.
Mapeamento flash configurável Alguns dispositivos da família AVR DA e AVR DB possuem um SFR (por exemplo, FLMAP) que especifica qual seção de 32k da memória do programa será mapeada na memória de dados. A nova opção – mconst-data-in-config-mapped-progmem pode ser usada para que o vinculador coloque todos os dados const-qualificados em uma seção de 32k e inicialize automaticamente o registro SFR relevante para garantir que esses dados sejam mapeados na memória de dados espaço, onde será acessado de forma mais eficaz.
Microchip Unified Standard Library Todos os compiladores MPLAB XC compartilharão uma Microchip Unified Standard Library, que agora está disponível com esta versão do MPLAB XC8. O Guia do Usuário do Compilador MPLA# XC8 C para AVO MCU não inclui mais a documentação para essas funções padrão. Esta informação pode agora ser encontrada no Microchip Unified Standard Library Reference Guide. Observe que algumas funcionalidades definidas anteriormente por avr-libc não estão mais disponíveis. (Consulte a funcionalidade Lila.)
Smart I0 Como parte das novas bibliotecas unificadas, as funções I0 nas famílias printf e scanf agora são geradas de forma personalizada em cada compilação, com base em como essas funções são usadas no programa. Isso pode reduzir substancialmente os recursos utilizados por um programa.
Opção de assistência Smart ICI Ao analisar chamadas para funções inteligentes I0 (como print f () ou scanf ()), o compilador nem sempre pode determinar a partir da string de formato ou inferir dos argumentos aqueles especificadores de conversão exigidos pela chamada. Anteriormente, o compilador sempre não fazia suposições e garantia que 10 funções totalmente funcionais fossem vinculadas à imagem final do programa. Uma nova opção – msmart-io-format=fmt foi adicionada para que o compilador possa ser informado pelo usuário sobre os especificadores de conversão usados ​​pelas funções smart I0 cujo uso é ambíguo, evitando que rotinas 10 excessivamente longas sejam vinculadas. (Consulte a opção smart-io-format para obter mais detalhes.)
Colocando seções personalizadas Anteriormente, a opção -W1, –section-start apenas colocava a seção especificada no endereço solicitado quando o script do vinculador definia uma seção de saída com o mesmo nome. Quando não era esse o caso, a seção era colocada em um endereço escolhido pelo vinculador e a opção era basicamente ignorada. Agora, a opção será honrada para todas as seções personalizadas, mesmo que o script do vinculador não defina a seção. Observe, no entanto, que para seções padrão, como arquivos . texto, . bss ou . dados, o alocador de melhor ajuste ainda terá controle total sobre sua colocação e a opção não terá efeito. Use a opção -ton, -Tsection=addr, conforme descrito no guia do usuário.
3.6. Versão 2.32
Orientação de pilha Disponível com uma licença de compilador PRO, o recurso de orientação de pilha do compilador pode ser usado para estimar a profundidade máxima de qualquer pilha usada por um programa. Ele constrói e analisa o gráfico de chamadas de um programa, determina o uso da pilha de cada função e produz um relatório, a partir do qual a profundidade das pilhas usadas pelo programa pode ser inferida. Esse recurso é habilitado por meio da opção de linha de comando -mchp-stack-usage. Um resumo do uso da pilha é impresso após a execução. Um relatório de pilha detalhado está disponível no mapa file, que podem ser solicitados da forma habitual.
Suporte para novos dispositivos O suporte está disponível para as seguintes peças AVR: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 e AVR32DB48. Suporte de dispositivo retraído O suporte não está mais disponível para as seguintes peças AVR: AVR16DA28, AVR16DA32 e AVR16DA48.
3.7. Versão 2.31
Nenhum.
3.8. Versão 2.30
Nova opção para impedir a inicialização de dados Uma nova opção de driver -mno-data-init impede a inicialização de dados e a limpeza de seções bss. Ele funciona suprimindo a saída dos dados de cópia e dos símbolos bss claros na montagem files, o que, por sua vez, impedirá a inclusão dessas rotinas pelo vinculador.
Otimizações aprimoradas Várias melhorias de otimização foram feitas, incluindo a remoção de instruções de retorno redundantes, a remoção de alguns saltos após uma instrução skip-if-bit-is e abstração processual aprimorada e a capacidade de iterar esse processo. Opções adicionais agora estão disponíveis para controlar algumas dessas otimizações, especificamente -f section-anchors, que permite o acesso de objetos estáticos a serem executados em relação a um símbolo; -mpa-iterations=n, que permite que o número de iterações de abstração processual seja alterado do padrão de 2; e, -mpa-callcost-shortcall, que executa uma abstração processual mais agressiva, na esperança de que o vinculador possa relaxar as chamadas longas. Esta última opção pode aumentar o tamanho do código se as suposições subjacentes não forem realizadas.
Suporte para novos dispositivos O suporte está disponível para as seguintes peças AVR: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 e A128VR64DB. Dispositivo retraído Suporte O suporte não está mais disponível para as seguintes peças AVR: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C e ATA664251.
3.9. Versão 2.29 (versão de segurança funcional)
Cabeçalho file para compiladores integrados Para garantir que o compilador esteja em conformidade com as especificações de linguagem, como MISRA, o cabeçalho file, que é incluído automaticamente por , Tem sido atualizado. Este cabeçalho contém os protótipos para todas as funções embutidas, como builtin_avr_nop ( ) e builtin avr delay_cycles () . Alguns integrados podem não ser compatíveis com MISRA; eles podem ser omitidos incluindo o defineXCSTRICT_MISRA na linha de comando do compilador. Os built-ins e suas declarações foram atualizados para usar tipos de largura fixa.
3.10. Versão 2.20
Suporte a novos dispositivos O suporte está disponível para as seguintes peças de AVR: ATTINY1624, ATTINY1626 e ATTINY1627.
Melhor alocação de melhor ajuste O alocador de melhor ajuste (BFA) no compilador foi aprimorado para que as seções sejam alocadas em uma ordem que permita uma melhor otimização. O BFA agora oferece suporte a espaços de endereço nomeados e lida melhor com a inicialização de dados.
Abstração de procedimento aprimorada As otimizações de abstração de procedimento agora são executadas em mais sequências de código. Situações anteriores em que essa otimização poderia ter aumentado o tamanho do código foram abordadas tornando o código de otimização ciente do processo de coleta de lixo do vinculador.
Ausência do AVR Assembler O AVR Assembler não está mais incluído nesta distribuição.
3.11. Versão 2.19 (versão de segurança funcional)
Nenhum.
3.12. Versão 2.10
Cobertura de código Esta versão inclui um recurso de cobertura de código que facilita a análise da extensão em que o código-fonte de um projeto foi executado. Use a opção -mcodecov=ram para ativá-lo. Após a execução do programa em seu hardware, as informações de cobertura de código serão coletadas no dispositivo e poderão ser transferidas e exibidas pelo MPLAB X IDE por meio de um plug-in de cobertura de código. Consulte a documentação do IDE para obter informações sobre este plug-in. O #pragma nocodecov pode ser usado para excluir funções subsequentes da análise de cobertura. Idealmente, o pragma deve ser adicionado no início do file para excluir todo aquele file da análise de cobertura. Alternativamente, o _attribute_ ( (nocodecov) ) pode ser usado para excluir uma função específica da análise de cobertura.
Descrição do dispositivo files Um novo dispositivo file chamado avr_chipinfo. html está localizado no diretório docs da distribuição do compilador. Esse file lista todos os dispositivos suportados pelo compilador. Clique no nome de um dispositivo e ele abrirá uma página mostrando toda a configuração/valor de bit de configuração permitido para esse dispositivo, com examples. abstração processual
Otimizações de abstração processual, que substituem blocos comuns de código assembly por chamadas para uma cópia extraída desse bloco, foram adicionadas ao compilador. Eles são executados por um aplicativo separado, que é invocado automaticamente pelo compilador ao selecionar as otimizações de nível 2, 3 ou s. Essas otimizações reduzem o tamanho do código, mas podem reduzir a velocidade de execução e a capacidade de depuração do código. A abstração procedural pode ser desabilitada em níveis de otimização mais altos usando a opção -mno-pa ou pode ser habilitada em níveis de otimização mais baixos (sujeito à sua licença) usando -mpa. Pode ser desabilitado para um objeto file usando -mno-pa-on-file=filenome ou desabilitado para uma função usando -mno-pa-on-function=function. Dentro do seu código-fonte, a abstração procedural pode ser desativada para uma função usando o atributo ( (nopa) ) com a definição da função ou usando nopa, que se expande para o atributo ( (nopa, noinline) ) e, portanto, evita que o inlining da função ocorra e havendo abstração de código embutido.
Suporte de bit de bloqueio no pragma A configuração #pragma agora pode ser usada para especificar os bits de bloqueio do AVR, bem como os outros bits de configuração. Verifique o avr_chipinfo . html file (mencionado acima) para os pares de configuração/valor a serem usados ​​com este pragma. Suporte para novos dispositivos O suporte está disponível para as seguintes peças: AVR28DAl28, AVR64DAl28, AVR32DA 128 e AVR48DA 128.
3.13. Versão 2.05
Mais bits pelo seu dinheiro A versão macOS deste compilador e gerenciador de licenças agora é um aplicativo de 64 bits. Isso garantirá que o compilador seja instalado e executado sem avisos nas versões recentes do macOS.
Objetos const na memória do programa O compilador agora pode colocar objetos qualificados como const na memória Flash do programa, em vez de tê-los localizados na RAM. O compilador foi modificado para que os dados globais qualificados cons t sejam armazenados na memória flash do programa e esses dados possam ser acessados ​​direta e indiretamente usando as instruções apropriadas da memória do programa. Esse novo recurso é ativado por padrão, mas pode ser desativado usando a opção -mno-const-data-in-progmem. Para as arquiteturas avrxmega3 e avrtiny, esse recurso não é necessário e está sempre desativado, pois a memória do programa é mapeada no espaço de endereço de dados desses dispositivos.
Padrão para versões gratuitas Não licenciadas (Gratuitas) deste compilador agora permitem otimizações até e incluindo o nível 2. Isso permitirá uma saída semelhante, embora não idêntica, ao que era possível anteriormente usando uma licença Padrão.
Bem-vindo AVRASM2 O montador AVRASM2 para dispositivos de 8 bits agora está incluído no instalador do compilador XC8. Este montador não é usado pelo compilador XC8, mas está disponível para projetos baseados em fontes de montagem manuscritas.
Suporte a novos dispositivos O suporte está disponível para as seguintes peças: ATMEGA1608, ATMEGA1609, ATMEGA808 e ATMEGA809.

3.14. Versão 2.00
Driver de nível superior Um novo driver, chamado xc8-cc, agora fica acima do driver avr-gcc anterior e do driver xc8, e pode chamar o compilador apropriado com base na seleção do dispositivo de destino. Este driver aceita opções de estilo GCC, que são traduzidas ou passadas para o compilador que está sendo executado. Este driver permite que um conjunto semelhante de opções com semântica semelhante seja usado com qualquer destino AVR ou PIC e, portanto, é a maneira recomendada de invocar o compilador. Se necessário, o driver avr-gcc antigo pode ser chamado diretamente usando as opções de estilo antigo aceitas em versões anteriores do compilador.
Common C Interface Este compilador agora pode estar em conformidade com a MPLAB Common C Interface, permitindo que o código-fonte seja mais facilmente portado em todos os compiladores MPLAB XC. A opção -mext=cci solicita esse recurso, permitindo uma sintaxe alternativa para muitas extensões de idioma.
Novo driver bibliotecário Um novo driver bibliotecário é posicionado acima do bibliotecário PIC anterior e do bibliotecário avr-ar AVR. Este driver aceita opções de estilo de arquivador GCC, que são traduzidas ou repassadas para o bibliotecário que está sendo executado. O novo driver permite que um conjunto semelhante de opções com semântica semelhante seja usado para criar ou manipular qualquer biblioteca PIC ou AVR file e é, portanto, a maneira recomendada de invocar o bibliotecário. Se necessário para projetos legados, o bibliotecário anterior pode ser chamado diretamente usando as opções de estilo antigo aceitas em versões anteriores do compilador.

Problemas de migração

A seguir estão os recursos que agora são tratados de forma diferente pelo compilador. Essas alterações podem exigir modificações em seu código-fonte se portar o código para esta versão do compilador. O número da versão nos subtítulos indica a primeira versão do compilador para suportar as alterações a seguir.

4.1. Versão 2.41
Funções fma imprecisas removidas (XC8-2913) A biblioteca padrão C99 fma 0 funções da família ( ) não calculou uma multiplicação-adição com precisão infinita para um único arredondamento, mas acumulou erros de arredondamento com cada operação. Essas funções foram removidas da biblioteca fornecida.
4.2. Versão 2.40
Nenhum.
4.3. Versão 2.39 (versão de segurança funcional)
Nenhum.
4.4. Versão 2.36 Nenhum.
4.5. Versão 2.35
Manipulação de bases string-to (XC8-2420) Para garantir a consistência com outros compiladores XC, as funções string-to XC8, como strtol () etc., não tentarão mais converter uma string de entrada se a base especificada for maior que 36 e, em vez disso, definirá errno como EINVAL. O padrão C não especifica o comportamento das funções quando esse valor base é excedido.
Otimizações de velocidade inadequadas Otimizações de abstração processual estavam sendo habilitadas ao selecionar otimizações de nível 3 (-03). Essas otimizações reduzem o tamanho do código em detrimento da velocidade do código, portanto, não deveriam ter sido executadas. Os projetos que usam esse nível de otimização podem ver diferenças no tamanho do código e na velocidade de execução quando criados com esta versão.
Funcionalidade da biblioteca O código para muitas das funções da biblioteca C padrão agora vem da Biblioteca Padrão Unificada da Microchip, que pode exibir um comportamento diferente em algumas circunstâncias em comparação com o fornecido pela antiga biblioteca avr-libc. por example, não é mais necessário vincular na biblioteca 1printf flt (opção -1printf_flt) para ativar formatado I0 suporte para especificadores de formato float. o inteligente I0 As características da Microchip Unified Standard Library tornam esta opção redundante. Além disso, o uso de rotinas com sufixo _P para funções de string e memória (por exemplo, strcpy_P ( ) etc.) que operam em strings const em flash não são mais necessárias. As rotinas C padrão (por exemplo, strcpy ) funcionarão corretamente com esses dados quando o recurso const-data-in-program-memory estiver ativado.

4.6. Versão 2.32
Nenhum.
4.7. Versão 2.31
Nenhum.
4.8. Versão 2.30
Nenhum.
4.1. Versão 2.29 (versão de segurança funcional)
Nenhum.
4.2. Versão 2.20
Layout do DFP alterado O compilador agora assume um layout diferente usado pelos DFPs (Device Family Packs). Isso significa que um DFP mais antigo pode não funcionar com esta versão e compiladores mais antigos não poderão usar os DFPs mais recentes.
4.3. Versão 2.19 (versão de segurança funcional)
Nenhum.
4.4. Versão 2.10
Nenhum
4.5. Versão 2.05
Objetos const na memória do programa Observe que, por padrão, os objetos qualificados como const serão colocados e acessados ​​na memória do programa (conforme hue descrito). Isso afetará o tamanho e a velocidade de execução do seu projeto, mas deve reduzir o uso de RAM. Esse recurso pode ser desativado, se necessário, usando a opção -mnoconst-data-in-progmem.
4.6. Versão 2.00
Fusíveis de configuração Os fusíveis de configuração do dispositivo agora podem ser programados usando um pragma de configuração seguido por pares de valores de configuração para especificar o estado do fusível, por exemplo
#pragma configuração WDTON =SET
#pragma configuração BODLEVEL = BODLEVEL_4V3
Objetos e funções absolutos Objetos e funções agora podem ser colocados em um endereço específico na memória usando o especificador CCI (endereço), por exemploampem:
#incluir
int foobar_at(0x800100);
char __at(0x250) getID(deslocamento interno) { … }
O argumento para este especificador deve ser uma constante que representa o endereço no qual o primeiro byte ou instrução será colocado. Os endereços de RAM são indicados usando um deslocamento de 0x800000. Ative o CCI para usar esse recurso.
Nova sintaxe da função de interrupção O compilador agora aceita o especificador CCI _interrupt (num) para indicar que as funções C são manipuladores de interrupção. O especificador recebe um número de interrupção, por exemploampem:
#incluir
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }

Problemas corrigidos

A seguir estão as correções que foram feitas no compilador. Isso pode corrigir bugs no código gerado ou alterar a operação do compilador para aquela pretendida ou especificada pelo guia do usuário. O número da versão nos subtítulos indica a primeira versão do compilador a conter correções para os problemas a seguir. O(s) rótulo(s) entre colchetes no título são a identificação desse problema no banco de dados de rastreamento. Isso pode ser útil se você precisar entrar em contato com o suporte.
Observe que alguns problemas específicos do dispositivo são corrigidos no Device Family Pack (DFP) associado ao dispositivo. Consulte o MPLAB Pack Manager para obter informações sobre as alterações feitas nos DFPs e para baixar os pacotes mais recentes.

5.1. Versão 2.41
Problemas de dongle em Ventura (XC8-3088) Dongles usado para licenciar o compilador pode não ter sido lido corretamente nos hosts macOS Ventura, resultando em falhas de licenciamento. Alterações no gerenciador de licença XCLM corrigem esse problema.
Indicação incorreta de alocação de memória (XC8-2925) A tentativa de alocar bytes SIZE_MAX (ou um valor próximo a isso) de memória usando as funções de gerenciamento de memória da biblioteca padrão (malloc () et al) foi incorretamente bem-sucedida. Não levou em consideração que bytes extras eram necessários além do bloco solicitado ao usar a implementação de alocação dinâmica de memória simples. Um ponteiro NULL agora será retornado e errno definido como ENOMEM em tais situações.
Funções fma imprecisas removidas (XC8-2913) A biblioteca padrão C99 fma ( ) -funções da família ( ) não calculou uma multiplicação-adição com precisão infinita para um único arredondamento, mas acumulou erros de arredondamento com cada operação. Essas funções foram removidas da biblioteca fornecida.
Tratamento incorreto da conversão de string (XC8-2921, XC8-2652) Quando uma 'sequência de assunto' para conversão por strtod Cr continha o que parecia ser um número de ponto flutuante em formato exponencial e havia um caractere inesperado após o caractere e/E, onde endptr havia sido fornecido, era atribuído um endereço que ele apontava para o caractere após o e/E, enquanto deveria estar apontando para o próprio caractere e/E, já que ele não havia sido convertido. por example, strtod (“100exx”, &ep) deve retornar 100.00 e definir ep para apontar para a parte “exx” da string, enquanto a função estava retornando o valor correto, mas configurando ep para apontar para a parte “xx” da string .

5.2. Versão 2.40
Muito relaxado (XCS-2876) Ao usar a opção -mrelax, o compilador não estava alocando algumas seções juntas, resultando em tamanhos de código menos otimizados. Isso pode ter ocorrido com código que usava as novas bibliotecas MUSL ou com símbolos fracos.
Recurso de mapeamento não desativado conforme indicado no aviso (XC8-2875) O recurso const-data-in-config-mappedprogmem depende da ativação do recurso const-data-in-progmem. Se o recurso const-data-inconfig-mapped-progmem foi ativado explicitamente usando a opção e o recurso const-data-inprogmem foi desativado, a etapa do link falhou, apesar de uma mensagem de aviso informando que o figurino const-data-in-con o recurso mapped-progmem foi desabilitado automaticamente, o que não estava totalmente correto. O recurso const-data-in-config-mapped-progmem agora está totalmente desabilitado nesta situação.
Alterações do DFP para acessar corretamente o NVMCTRL (XC8-2848) O código de inicialização de tempo de execução usado pelos dispositivos AVR64EA não levou em consideração que o registro NVMCTRL estava sob proteção de alteração de configuração (CCP) e não foi capaz de definir o I0 SFR para a página usada pelo const-data-in-configmapped-progmem recurso do compilador. As alterações feitas no AVR-Ex_DFP versão 2.2.55 permitirão que o código de inicialização do tempo de execução grave corretamente neste registro.
Alterações do DFP a serem evitadas mapeamento flash (XC8-2847) Foi implementada uma solução alternativa para um problema com o recurso do dispositivo de mapeamento flash relatado no AVR128DA28/32/48/64 Silicon Errata (D580000882). O recurso do compilador const-data-in-config-mapped-progmem não será aplicado por padrão aos dispositivos afetados e essa alteração aparecerá no AVR-Dx_DFP versão 2.2.160.
Erro de compilação com sinhf ou coshf (XC8-2834) As tentativas de usar as funções da biblioteca sinhf () ou coshf () resultaram em um erro de link, descrevendo uma referência indefinida. A função ausente referenciada agora foi incluída na distribuição do compilador.
Erros de compilação com nopa (XC,8-2833) Usar o atributo nopa com uma função que teve seu nome de montador especificado usando asm ( ) acionou mensagens de erro do montador. Esta combinação não é possível.
Falha de função variádica com argumentos de ponteiro (XC8-2755, XC8-2731) As funções com um número variável de argumentos esperam que ponteiros de 24 bits (tipo memx) sejam passados ​​na lista de argumentos variáveis ​​quando o recurso const-data-in-progmem está ativado. Argumentos que eram ponteiros para a memória de dados estavam sendo passados ​​como objetos de 16 bits, causando falha de código quando finalmente eram lidos. Quando o recurso constdata-in-progmem está ativado, todos os argumentos de ponteiros de 16 bits agora são convertidos em ponteiros de 24 bits.
funções da biblioteca strtoxxx falhando (XC8-2620) Quando o recurso const-data-in-progmem foi ativado, o parâmetro endptr nas funções da biblioteca strtoxxx não foi atualizado corretamente para argumentos de string de origem que não estão na memória do programa.
Alertas para lançamentos inválidos (XC8-2612) O compilador agora emitirá um erro se o recurso const-in-progmem estiver ativado e o endereço de uma string literal for explicitamente convertido para o espaço de endereço de dados (eliminando o qualificador const), por exemploample, (uint 8_t *) “Hello World!”. Um aviso será emitido se o endereço puder ser inválido quando um ponteiro de dados const for explicitamente convertido para o espaço de endereço de dados.
Colocação de objetos const não inicializados (XC8-2408) Os objetos const e const voláteis não inicializados não estavam sendo colocados na memória do programa em dispositivos que mapeiam toda ou parte de sua memória do programa no espaço de endereço de dados. Para esses dispositivos, tais objetos agora são colocados na memória do programa, tornando sua operação consistente com outros dispositivos.

5.3. Versão 2.39 (versão de segurança funcional)
Nenhum.
5.4. Versão 2.36
Erro ao atrasar (XC8-2774) Pequenas alterações nas otimizações do modo Livre padrão impediram a dobra constante de expressões de operando para as funções internas de atraso, resultando em tratamento delas como não constantes e acionando o erro: builtin avr delay_cycles espera uma constante de número inteiro de tempo de compilação.
5.5. Versão 2.35
Alocação contígua usando _at (XC8-2653) A alocação contígua de vários lugares de objetos em uma seção com o mesmo nome e usando _at ( ) não funcionou corretamente. por exampem:
const char arr1[] __attribute__((seção(“.mysec”))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((seção(“.mysec”))) = {0xEF, 0xFE};
deveria ter colocado arr2 imediatamente após arr1.
Especificando endereços de início de seção (XC8-2650) -W1, a opção –section-start falhava silenciosamente ao colocar as seções no endereço inicial indicado. Esse problema foi corrigido para todas as seções com nomes personalizados; no entanto, não funcionará para nenhuma seção padrão, como . texto ou . bss, que deve ser colocado usando a opção -W1, -T.
O vinculador trava ao relaxar (XC8-2647) Quando a otimização -mrelax foi habilitada e havia código ou seções de dados que não cabiam na memória disponível, o vinculador travou. Agora, em tal circunstância, mensagens de erro são emitidas.

Sem retorno (XC8-2646) O A opção –nofallback não foi implementada corretamente, nem documentada. Isso agora pode ser selecionado para garantir que o compilador não volte para uma configuração de otimização mais baixa se o compilador não for licenciado e, em vez disso, emitirá um erro.

Otimizações de velocidade inadequadas (X03-2637) Otimizações de abstração processual estavam sendo habilitadas ao selecionar otimizações de nível 3 (-03). Essas otimizações reduzem o tamanho do código em detrimento da velocidade do código, portanto, não deveriam ter sido executadas.
EEPROM ruim acesso (XC8-2629) O A rotina eeprom_read_block não funcionava corretamente em dispositivos Xmega quando a opção -mconst-data-in-progmem era habilitada (que é o estado padrão), resultando na leitura incorreta da memória EEPROM.
Alocação de memória inválida (XC8-2593, XC8-2651) Quando o Opção de linker -Ttext ou -Tdata (por example passado usando uma opção de driver -vl) for especificado, a origem da região de texto/dados correspondente foi atualizada; no entanto, o endereço final não foi ajustado adequadamente, o que pode ter levado a região a exceder o intervalo de memória do dispositivo de destino.
Falha com função superatribuída (XC8-2580) O compilador travou se uma função foi declarada usando mais de um dos atributos de interrupção, sinal ou nmi, por exemplo, atributo ( ( sinal , interrupção ) ).
Código de interrupção ATtiny inválido (XC8-2465) Ao construir para dispositivos ATtiny e as otimizações foram desativadas (-00), as funções de interrupção podem ter acionado mensagens do montador operando fora do intervalo.
Opções não sendo passadas (XC8-2452) Ao usar a opção com várias opções de vinculador separadas por vírgula, nem todas as opções do vinculador estavam sendo passadas para o vinculador.
Erro ao ler indiretamente a memória do programa (X03-2450) Em alguns casos, o compilador produziu um erro interno (insn irreconhecível) ao ler um valor de dois bytes de um ponteiro para a memória do programa
5.6. Versão 2.32
Segundo acesso de biblioteca falha (XC8-2381) Chamando a versão do Windows do arquivo xc8-ar. O arquivador de biblioteca .exe uma segunda vez para acessar um arquivo de biblioteca existente pode ter falhado com uma mensagem de erro incapaz de renomear.
5.7. Versão 2.31
Compilador inexplicável falhas (XC8-2367) Ao executar em plataformas Windows que tinham o diretório temporário do sistema definido para um caminho que incluía um ponto '.' caractere, o compilador pode ter falhado ao executar.
5.8. Versão 2.30
Rótulos globais mal colocados após delinear (XC8-2299) O código de assembly escrito à mão que coloca rótulos globais em sequências de assembly que são fatoradas por abstração de procedimento pode não ter sido reposicionado corretamente.
Um acidente relaxante (XC8-2287) O uso da opção -mrelax pode ter causado a falha do vinculador quando as otimizações de relaxamento de salto na cauda tentaram remover a instrução ret que não estava no final de uma seção.
Falha ao otimizar rótulos como valores (XC8-2282) O código que usa a extensão de linguagem GNU C “Rótulos como valores” pode ter causado a falha das otimizações de abstração processual, com um erro de correção de spans do intervalo Outlined VMA.
Não tão constante (XC8-2271) Os protótipos para strstr ( ) e outras funções de não especifica mais o qualificador const não padrão nos ponteiros de string retornados quando o recurso -mconst-data-inprogmem está desativado. Observe que com os dispositivos avrxmega3 e avrtiny, esse recurso está ativado permanentemente.
Inicializadores perdidos (XC8-2269) Quando mais de uma variável em uma unidade de tradução foi colocada em uma seção (usando _section ou _attribute_ ( (seção) )), e a primeira dessas variáveis ​​foi inicializada com zero ou não tinha um inicializador, inicializadores para outras variáveis ​​na mesma unidade de tradução que foram colocadas na mesma seção foram perdidos.
5.1. Versão 2.29 (versão de segurança funcional)
Nenhum.
5.2. Versão 2.20
Erro com comandos longos (XC8-1983) Ao usar um alvo AVR, o compilador pode ter parado com um file erro não encontrado, se a linha de comando for extremamente grande e contiver caracteres especiais, como aspas, barras invertidas, etc.
Seção rodata não atribuída (XC8-1920) O vinculador AVR falhou ao atribuir memória para seções rodata personalizadas ao construir para arquiteturas avrxmega3 e avrtiny, potencialmente produzindo erros de sobreposição de memória
5.3. Versão 2.19 (Liberação de segurança funcional)
Nenhum.
5.4. Versão 2.10
Falhas de realocação (XC8-1891) O alocador de melhor ajuste estava deixando 'buracos' de memória entre as seções após o relaxamento do vinculador. Além de fragmentar a memória, isso aumentava a possibilidade de falhas de realocação do linker relacionadas a saltos relativos ao PC ou chamadas fora do alcance.
Instruções não transformadas por relaxamento (XC8-1889) O relaxamento do linker não ocorreu para instruções de salto ou chamada cujos alvos se tornam alcançáveis ​​se relaxados.
Ausente funcionalidade (XC8E-388) Várias definições de , como clock_div_t e clock_prescale set () , não foram definidos para dispositivos, incluindo ATmega324PB, ATmega328PB, ATtiny441 e ATtiny841.
Faltando macros As macros do pré-processador _XC8_MODE_, _XC8_VERS ION, _XC e _XC8 não foram definidas automaticamente pelo compilador. Estes já estão disponíveis.
5.5. Versão 2.05
Erro interno do compilador (XC8-1822) Ao compilar no Windows, um erro interno do compilador pode ter ocorrido durante a otimização do código.
Estouro de RAM não detectado (XC8-1800, XC8-1796) Os programas que excederam a RAM disponível não foram detectados pelo compilador em algumas situações, resultando em uma falha de código de tempo de execução.
Memória flash omitida (XC8-1792) Para dispositivos avrxmega3 e avrtiny, partes da memória flash podem ter sido deixadas não programadas pelo MPLAB X IDE.
Falha ao executar principal (XC8-1788) Em algumas situações em que o programa não tinha variáveis ​​globais definidas, o código de inicialização do runtime não saía e a função main ( ) nunca era acessada.
Informação de memória incorreta (XC8-1787) Para dispositivos avrxmega3 e avrtiny, o programa avr-size estava relatando que os dados somente leitura estavam consumindo RAM em vez de memória do programa.
Leitura incorreta da memória do programa (XC8-1783) Projetos compilados para dispositivos com memória de programa mapeada no espaço de endereço de dados e que definem objetos usando a macro/atributo PROGMEM podem ter lido esses objetos do endereço errado.
Erro interno com atributos (XC8-1773) Ocorreu um erro interno se você definiu objetos de ponteiro com o
tokens _at () ou attribute () entre o nome do ponteiro e o tipo desreferenciado, por exemploampele, char *
_at (0x800150) cp; Um aviso agora é emitido se esse código for encontrado.
Falha ao executar principal (XC8-1780, XC8-1767, XC8-1754) O uso de variáveis ​​EEPROM ou a definição de fusíveis usando o pragma de configuração pode ter causado inicialização incorreta dos dados e/ou travado a execução do programa no código de inicialização do tempo de execução, antes de atingir main ( ).
Erro de fusível com dispositivos minúsculos (XC8-1778, XC8-1742) Os dispositivos attiny4/5/9/10/20/40 tinham um comprimento de fusível incorreto especificado em seu cabeçalho files que levam a erros de vinculador ao tentar criar código que define fusíveis.
Segmentação falha (XC8-1777) Uma falha de segmentação intermitente foi corrigida.
Falha do montador (XC8-1761) O montador avr-as pode ter travado quando o compilador foi executado no Ubuntu 18.
Objetos não removidos (XC8-1752) Objetos de duração de armazenamento estático não inicializados podem não ter sido limpos pelo código de inicialização de tempo de execução.
Especificação de dispositivo conflitante ignorada (XC8-1749) O compilador não estava gerando um erro quando várias opções de especificação de dispositivo eram usadas e indicavam dispositivos diferentes.
Corrupção de memória por heap (XC8-1748) O O símbolo _heap_start estava sendo definido incorretamente, resultando na possibilidade de variáveis ​​comuns serem corrompidas pelo heap.
Erro de realocação do vinculador (XC8-1739) Um erro de realocação do vinculador pode ter sido emitido quando o código continha um rjmp ou rcall com um destino exatamente a 4k bytes de distância.
5.6. Versão 2.00
Nenhum.

Problemas conhecidos

A seguir estão as limitações na operação do compilador. Podem ser restrições gerais de codificação ou desvios das informações contidas no manual do usuário. O(s) rótulo(s) entre colchetes no título são a identificação do problema no banco de dados de rastreamento. Isso pode ser útil se você precisar entrar em contato com o suporte. Aqueles itens que não possuem rótulos são limitações que descrevem modi operandi e que provavelmente permanecerão em vigor permanentemente.
6.1. MPLABXIDE Integração
IDE MPLAB integração Se o compilador for usado a partir do MPLAB IDE, você deve instalar o MPLAB IDE antes de instalar o compilador.
6.2. Geração de código
Segfault com opção section-anchors (XC8-3045) O programa que definiu funções com listas de argumentos variáveis ​​e que usa a opção -fsection-anchors pode ter acionado um erro interno do compilador: Falha de segmentação.
Informações de depuração fora de sincronia (XC8-2948) Quando as otimizações de relaxamento do vinculador encolhem as instruções (por exemploample call to rcall instruções), linha de origem para mapeamentos de endereços podem não permanecer sincronizados quando há mais de uma operação de redução ocorrendo em uma seção.
No ex abaixoample, existem duas chamadas para foo que acabam relaxadas para chamadas relativas.
Falha de alocação de memória PA (XC8-2881) Ao usar os otimizadores de abstração processual, o vinculador pode relatar erros de alocação de memória quando o tamanho do código estiver próximo da quantidade de memória de programa disponível no dispositivo, mesmo que o programa deva ser capaz de caber no espaço disponível.
Não tão inteligente Smart-I0 (XC8-2872) O recurso smart-io do compilador gerará um código válido, mas abaixo do ideal, para a função snprint f se o recurso const-data-in-progmem tiver sido desabilitado ou se o dispositivo tiver todo o seu flash mapeado na memória de dados.
Ainda menos inteligente Smart-I0 (XC8-2869) O recurso smart-io do compilador gerará um código válido, mas abaixo do ideal, quando as opções -flto e -fno-builtin forem usadas.
Posicionamento de dados somente leitura abaixo do ideal (XC8-2849) O vinculador atualmente não está ciente das seções de memória APPCODE e APPDATA, nem das divisões [No-Read-While-Write no mapa de memória. Como resultado, há uma pequena chance de que o vinculador aloque dados somente leitura em uma área inadequada da memória. A chance de dados extraviados aumenta se o recurso const-data-in-progmem estiver ativado, especialmente se o recurso const-data-in-config-mapped-progmem também estiver ativado. Esses recursos podem ser desativados, se necessário.
Objeto file ordem de processamento (XC8-2863) A ordem em que os objetos files serão processados ​​pelo vinculador podem diferir com base no uso de otimizações de abstração processual (opção -mpa). Isso afetaria apenas o código que define funções fracas em vários módulos.
Erro do vinculador com absoluto (XC8-2777) Quando um objeto foi tornado absoluto em um endereço no início da RAM e objetos não inicializados também foram definidos, um erro de vinculador pode ser acionado.
IDs curtos de ativação (XC8-2775) Para dispositivos ATA5700/2, os registradores PHIDO/1 são definidos apenas como tendo 16 bits de largura, em vez de 32 bits de largura.
Falha do vinculador ao chamar o símbolo (XC8-2758) O vinculador pode travar se a opção de driver -mrelax for usada quando o código-fonte chamar um símbolo que foi definido usando a opção de vinculador simbólico -cc., –de f.
Inicialização incorreta (XC8-2679) é uma discrepância entre onde os valores iniciais para alguns objetos globais/estáticos de tamanho de bytes são colocados na memória de dados e onde as variáveis ​​serão acessadas no tempo de execução.
Chamadas de função indireta incorretas (XC8-2628) Em alguns casos, as chamadas de função feitas por meio de um ponteiro de função armazenado como parte de uma estrutura podem falhar.
strtof retorna zero para floats hexadecimais (XC8-2626) As funções de biblioteca strtof et al e scanf ( ) et al sempre converterão um número de ponto flutuante hexadecimal que não especifica um expoente para zero. por exampem:
strtof (“Oxl”, &endptr);
retornará o valor 0, não I.
Mensagens imprecisas do consultor de pilha (XC8-2542, XC8-2541) Em alguns casos, o aviso do consultor de pilha sobre recursão ou pilha indeterminada usada (possivelmente pelo uso de alloca()) não é emitido.
Falha com código de interrupção duplicado (XC8-2421) Onde mais de uma função de interrupção tiver o mesmo corpo, o compilador pode ter a saída para uma chamada de função de interrupção para a outra. Isso resultará no salvamento desnecessário de todos os registros bloqueados por chamada e as interrupções serão habilitadas mesmo antes da execução do epílogo do manipulador de interrupção atual, o que pode levar à falha do código.
Saída inválida com caminho DFP inválido (XC8-2376) Se o compilador for invocado com um caminho DFP inválido e uma 'especificação' file existe para o dispositivo selecionado, o compilador não está relatando o pacote de família de dispositivos ausente e, em vez disso, selecionando a 'especificação' file, o que pode levar a uma saída inválida. A 'especificação' files podem não estar atualizados com os DFPs distribuídos e devem ser usados ​​apenas com teste de compilador interno.
Sobreposição de memória não detectada (XC8-1966) O compilador não está detectando a sobreposição de memória de objetos tornados absolutos em um endereço (via _at ( )) e outros objetos usando o especificador section ( ) e que estão vinculados ao mesmo endereço.
Falha com funções de biblioteca e _memx (XC8-1763) As funções flutuantes libgcc chamadas com um argumento no espaço de endereço memx podem falhar. Observe que as rotinas da biblioteca são chamadas de alguns operadores C, portanto, por exemploample, o seguinte código é afetado:
return regFloatVar > memxFloatVar;
Implementação libgcc limitada (AVRTC-731) Para os produtos ATTiny4/5/9/10/20/40, a implementação da biblioteca C/Math padrão em libgcc é muito limitada ou não está presente.
Limitações de memória do programa (AVRTC-732) Imagens de memória de programa além de 128 kb são suportadas pela cadeia de ferramentas; no entanto, há ocorrências conhecidas de interrupções do vinculador sem relaxamento e sem uma mensagem de erro útil em vez de gerar os stubs de função necessários quando a opção -mre lax é usada.
Limitações de espaço de nomes (AVRTC-733) Os espaços de endereço nomeados são suportados pela cadeia de ferramentas, sujeitos às limitações mencionadas na seção do guia do usuário Qualificadores de tipo especial.
Fusos horários O funções de biblioteca assumem GMT e não suportam fusos horários locais, portanto localtime ( ) retornará a mesma hora que gmtime ( ) , por exemploampeu.

file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm

Documentos / Recursos

Software de desenvolvimento do compilador MICROCHIP MPLAB XC8 C [pdf] Manual do Proprietário
MPLAB XC8 C, MPLAB XC8 C Software de desenvolvimento de compilador, Software de desenvolvimento de compilador, Software de desenvolvimento, Software

Referências

Deixe um comentário

Seu endereço de e-mail não será publicado. Os campos obrigatórios estão marcados *