Software Compilador MICROCHIP 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
Introdução
Esta versão do compilador Microchip MPLAB® XC8 C contém vários novos recursos, correções de bugs e suporte a novos dispositivos.
Data de construção
A data oficial de construção desta versão do compilador é 3 de julho de 2022.
Versão anterior
A versão anterior do compilador MPLAB XC8 C era 2.39, um compilador de segurança funcional, construído em 27 de janeiro de 2022. O compilador padrão anterior era a versão 2.36, construída em 27 de janeiro de 2022.
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.
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 file nomeado localizou o subdiretório de seu diretório de instalação. Uma discussão geral dos princípios subjacentes à GPL pode ser encontrada aqui. Código de suporte fornecido para o cabeçalho files, scripts de linker e bibliotecas de tempo de execução são códigos proprietários e não sã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.
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 mac OS foram assinados por código e autenticados.
Se você estiver executando um servidor de licença de rede, apenas computadores com sistemas operacionais suportados pelos compiladores podem ser usados para hospedar o servidor de licença. A partir do xclm versão 2.0, o servidor de licença de rede pode ser instalado em uma plataforma Microsoft Windows Server, mas o servidor de licença não precisa ser executado em uma versão de servidor do sistema operacional.
dispositivos suportados
Este compilador suporta todos os dispositivos AVR MCU de 8 bits conhecidos no momento do lançamento. Consulte (no diretório doc do compilador) para obter uma lista de todos os dispositivos suportados. Esses files também listam as definições de bit de configuração para cada dispositivo.
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.
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 (Windows), .run (Linux) ou app (macOS), por exemplo, XC8-1.00.11403-windows.exe e siga as instruções na tela.
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.
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 no file, selecione Propriedades, guia Segurança, selecione usuário, edite.)
- Defina as permissões da pasta temporária como “Full Control!
Para determinar a localização da pasta temporária, digite %temp% no comando Executar (tecla do logotipo do Windows + R). Isso abrirá um file caixa de diálogo do explorer mostrando esse diretório e permitirá que você determine o caminho dessa pasta.
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.
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:
- Aviso de direitos autorais da MUSL
- Instalando e Licenciando Compiladores MPLAB XC C (revisão M)
- MPLAB XC8 User!s Guide for Embedded Engineers – AVR MCUs (revisão A)
- Guia do usuário do compilador MPLAB XC8 C para AVR MCU (revisão F)
- Guia de Referência da Microchip Unified Standard Library (revisão B)
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 Hamate foi incluído no diretório docs nesta versão. Este guia destina-se àqueles que executam o Hamate 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.
Versão 2.40
Suporte a 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 processual aprimorada A ferramenta de otimização de abstração processual (PA) foi aprimorada para que o código contendo uma instrução de chamada de função (rechamada de chamada) possa ser delineado. Isso só ocorrerá 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 desativado usando a opção monk-pa-outline-calls ou a abstração processual pode ser totalmente desativada para um objeto file ou função usando o -monk-pa-on-file e -mo.-pa-on-function respectivamente, ou usando o atributo nipa ( especificador nipa) seletivamente com funções
Macro de cobertura de código O compilador agora define a macro __CODECOV se uma opção mcodecov válida for especificada.
Opção de reserva de memória O driver xc8-cc agora aceitará a opção -mreserve=space@start: end ao construir para alvos AVR. Essa opção reserva o intervalo de memória especificado nos dados ou no espaço de memória do programa, impedindo que o vinculador preencha o código ou os objetos nessa área.
E/S inteligente mais inteligente 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 rotinas pop vararg sob demanda, usando tipos de dados mais curtos sempre que possível para lidar com 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.
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 oferece suporte à licença de servidor de rede.
Versão 2.36
Nenhum.
Versão 2.35
Suporte a novos dispositivos O suporte está disponível para as seguintes peças AVR: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 e AVR64DD32.
Mudança 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 itch 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 têm 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-proem pode ser usada para que o vinculador coloque todos os dados qualificados contras em uma seção de 32k e inicialize automaticamente o registro SFR relevante para garantir que esses dados sejam mapeados no espaço de memória de dados , onde será acessado de forma mais eficaz.
Bibliotecas Padrão Unificadas da Microchip 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 MPLAB® XC8 C/ou AVR® 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. (Ver Biblioteca):'. Funcionalidade…)
E/S Inteligente Como parte das novas bibliotecas unificadas, as funções IO nas famílias de impressão e digitalização 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 IO inteligente Ao analisar chamadas para funções smart IO (como printf () ou scanf () ), o compilador nem sempre pode determinar a partir da string de formato ou inferir dos argumentos os especificadores de conversão exigidos pela chamada. Anteriormente, o compilador sempre não fazia suposições e assegurava que as funções IO 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 por funções smart IO cujo uso é ambíguo, evitando que rotinas IO excessivamente longas sejam vinculadas. (Consulte a opção smart-io-format para obter mais detalhes.)
Colocando seções personalizadas Anteriormente, a opção -Wl, –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 essencialmente 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 -Wl, -Tsection=add, conforme descrito no guia do usuário.
Versão 2.32
Orientação da 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 chamada 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 Suporte está disponível para as seguintes peças AVR: ATTINY 427, ATTINY 424, ATTINY 426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 e AVR32DB48.
Suporte para dispositivo retraído Suporte não está mais disponível para as seguintes peças AVR: AVR16DA28, AVR16DA32 e AVR16DA48.
Versão 2.31
Nenhum.
Versão 2.30
Nova opção para impedir a inicialização de dados Uma nova opção de driver -mno-data-ini t impede a inicialização de dados e a limpeza de seções bss. Funciona suprimindo a saída dos símbolos do_ copy_ data e d o_ clear_ bss no assembly 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 âncoras de seção -f, que permitem o acesso de objetos estáticos a serem executados em relação a um símbolo; -mpai derations=n, que permite que o número de iterações de abstração processual seja alterado do padrão de 2; e, -mpa- call cost- 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 a 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 AVR128DB64.
Suporte para dispositivo retraído O suporte não está mais disponível para as seguintes partes do AVR: ATA5272, ATA5790, ATA5790N,ATA5791,ATA5795,ATA6285,ATA6286,ATA6612C,ATA6613C,ATA6614Q, ATA6616C, ATA6617C e ATA664251.
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 _buil tin _avrnop () e _buil tin_ avr delay_ cycles (). Alguns integrados podem não ser compatíveis com MISRA; estes podem ser omitidos adicionando o define _Xe_ STRICT_ MISRA à linha de comando do compilador. Os integrados e suas declarações foram atualizados para usar tipos de largura fixa.
Versão 2.20
Suporte a novos dispositivos O suporte está disponível para as seguintes partes do 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 processual aprimorada As otimizações de abstração processual 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 Montador AVR O AVR Assembler não está mais incluído nesta distribuição.
Versão 2.19 (versão de segurança funcional)
Nenhum.
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 mcodecov 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 atributo ( (mcodecov) ) 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 todos os pares de configuração/valor de bit de configuração permitidos 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. Estes são executados por um aplicativo separado, que é invocado automaticamente pelo compilador ao selecionar otimizações de nível 2, 3 ou. 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 _attribute_ ( (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 a bits 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 as informações do chip avr. html file (mencionado acima) para os pares de configuração/valor a serem usados com este pragma.
Suporte a novos dispositivos O suporte está disponível para as seguintes peças: AVR28DA128, AVR64DA128,AVR32DA128 e AVR48DA128.
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 const 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 de graça As versões 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 assembly manuscritas.
Suporte a novos dispositivos O suporte está disponível para as seguintes peças: ATMEGA1608, ATMEGA1609, ATMEGA808 e ATMEGA809.
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.
Interface C Comum Este compilador agora pode estar em conformidade com a Interface C Comum do MPLAB, 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 avr-ar. 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.
Versão 2.40
Nenhum.
Versão 2.39 (versão de segurança funcional)
Nenhum.
Versão 2.36
Nenhum.
Versão 2.35
Manipulação de string-to bases (XCS-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ão 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 lprintf_flt (opção -print _flt) para ativar o suporte de E/S formatado para especificadores de formato flutuante. Os recursos inteligentes de E/S da Microchip Unified Standard Library tornam essa 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ários. As rotinas C padrão (por exemplo, strcpy ()) funcionarão corretamente com esses dados quando o recurso const-data-in-program-memory estiver ativado.
Versão 2.32
Nenhum.
Versão 2.31
Nenhum.
Versão 2.30
Nenhum.
Versão 2.29 (versão de segurança funcional)
Nenhum.
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.
Versão 2.19 (versão de segurança funcional)
Nenhum.
Versão 2.10
Nenhum
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 descrito aqui). Isso afetará o tamanho e a velocidade de execução do seu projeto, mas deve reduzir o uso de RAM. Esse recurso pode ser desabilitado, se necessário, usando a opção -mnoconst-da ta-in-progmem.
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 valor de configuração para especificar o estado do fusível, por exemplo
#pragma configuração WDT0N =SET
#pragma configuração B0DLEVEL = B0DLEVEL_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 _at (endereço), por exemploample: #include int foobar at(Ox800100); char at(Ox250) get ID(int offset) { … } 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 de interrupção CCI (num) para indicar que as funções C são manipuladores de interrupção. O especificador recebe um número de interrupção, por exemploample: #include void interrupção(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 do 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.
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 (XCS-2875) O recurso mappedprogmem cost-data-in-config depende da ativação do recurso cost-data-in-proem. Se o recurso cost-data-ipconfig-mapped-proem foi ativado explicitamente usando a opção e o recurso cost-data-inprogmem foi desativado, a etapa de link falhou, apesar de uma mensagem de aviso informando que o cons data-in-config-mapped- o recurso proem foi desativado automaticamente, o que não estava totalmente correto. O recurso const-data-in-config-mapped-proem agora está totalmente desabilitado nesta situação.
Alterações do DFP para acessar corretamente o NVMCTRL (XCS-2848) O código de inicialização de tempo de execução usado pelos dispositivos AVR64EA não levou em conta que o registro NVMCTRL estava sob proteção de alteração de configuração (CCP) e não foi capaz de definir o IO SFR para a página usada pelo compilador const-data-in configmapped-proem recurso. 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 para evitar o mapeamento flash (XCS-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 (DS80000882). O recurso do compilador const-data-in-config-mapped-proem não será aplicado por padrão aos dispositivos afetados e essa alteração aparecerá no AVR-Ex_DFP versão 2.2.160.
Erro de compilação com sinhf ou coshf (XCS-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 (XCS-2833) Usar o atributo nopa com uma função que teve seu nome de montador especificado usando como () acionou mensagens de erro do montador. Esta combinação não é possível.
Falha de função variável com argumentos de ponteiro (XCS-2755, XCS-2731) As funções com um número variável de argumentos esperam que ponteiros de 24 bits (tipo _memo) sejam passados na lista de argumentos variáveis quando o recurso cost-data-in-proem 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 cons data-in-proem está ativado, todos os argumentos de ponteiros de 16 bits agora são convertidos em ponteiros de 24 bits. Falha nas funções da biblioteca strtoxxx (XCS-2620) Quando o recurso const-data-in-proem foi ativado, o parâmetro de entrada 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 (XCS-2612) O compilador agora emitirá um erro se o recurso cost-in-proem 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, (uint8 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.
Posicionamento de objetos const não inicializados (XCS-2408) 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.
Versão 2.39 (versão de segurança funcional)
Nenhum.
Versão 2.36
Erro ao atrasar (XCS-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 incorporadas de atraso, resultando em serem tratadas como não contatos e acionando o erro: _buil tin avr delay_ cycles waits ac ompile constante de tempo inteiro.
Versão 2.35
Alocação contígua usando _at (XCS-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 example: constchararrl [ ] em tri butte ((seção em(“.misses”))) em (Ox50 0 ) = {Oxo , Ox CD} ; cost char arr2[ ] at tri butte ((section(“.my s eke”))) = {Bois, Boi FE }; deveria ter colocado arr2 imediatamente após aril.
Especificando endereços de início de seção (XCS-2650) A opção -Wal, –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 -Wl, -T.
O vinculador trava ao relaxar (XCS-2647) Quando a otimização -relax foi ativada e havia seções de código ou dados que não cabiam na memória disponível, o vinculador travou. Agora, em tal circunstância, mensagens de erro são emitidas.
Acesso ruim à EEPROM (XCS-2629) A rotina do bloco leproma _read_ não funcionou corretamente em dispositivos Mega quando a opção -monist-data-in-proem foi habilitada (que é o estado padrão), resultando na memória EEPROM não sendo lida corretamente.
Alocação de memória inválida (XCS-2593, XCS-2651) Quando a opção de linker -Text ou -Tata (por exemploample passado usando uma opção de driver -Wl) 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.
Código de interrupção ATtiny inválido (XCS-2465) Ao construir para dispositivos Tatin 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 (XCS-2452) Ao usar a opção -Wl com várias opções de vinculador separadas por vírgula, nem todas as opções de vinculador estavam sendo passadas para o vinculador.
Erro ao ler indiretamente a memória do programa (XCS-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
Versão 2.32
Falha no segundo acesso à biblioteca (XCS-2381) Chamando a versão do Windows do arquivo xc8-ar. exe arquivador de biblioteca uma segunda vez para acessar um arquivo de biblioteca existente pode ter falhado com uma mensagem de erro incapaz de renomear.
Versão 2.31
Falhas inexplicáveis do compilador (XCS-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.
Versão 2.30
Rótulos globais mal colocados após o contorno (XCS-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 (XCS-2287) O uso da opção -merlad pode ter causado o travamento 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 (XCS-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 (XCS-2271) Os protótipos para start () e outras funções de não especifica mais o qualificador de custo não padrão nos ponteiros de string retornados quando o recurso -monist-data inprogmem está desativado. Observe que, com dispositivos avrxmega3 e avertin, esse recurso está ativado permanentemente.
Inicializadores perdidos (XCS-2269) Quando mais de uma variável em uma unidade de tradução foi colocada em uma seção (usando seção ou atributo ((seção))), e a primeira dessas variáveis foi inicializada com zero ou não teve um inicializador, inicializadores para outras variáveis na mesma unidade de tradução que foram colocados na mesma seção foram perdidos.
Versão 2.29 (versão de segurança funcional)
Nenhum.
Versão 2.20
Erro com comandos longos (XCS-1983) Ao usar um destino 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 (XCS-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
Versão 2.19 (versão de segurança funcional)
Nenhum.
Versão 2.10
Falhas de realocação (XCS-1891) O alocador de melhor ajuste estava deixando 'buracos' de memória entre as seções após o relaxamento do linker. 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 (XCS-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 (XCSE-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_ xcs _MODE_, _xcs VERSION, _xc e xcs não foram definidas automaticamente pelo compilador. Estes já estão disponíveis.
Versão 2.05
Erro interno do compilador (XCS-1822) Ao compilar no Windows, um erro interno do compilador pode ter sido produzido ao otimizar o código.
Estouro de RAM não detectado (XCS-1800, XCS-1796) Os programas que excediam essa RAM disponível não eram detectados pelo compilador em algumas situações, resultando em uma falha de código de tempo de execução.
Memória flash omitida (XCS-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 (XCS-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ções de memória incorretas (XCS-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 (XCS-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 (XCS-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 (0x80015 0) cp; Um aviso agora é emitido se esse código for encontrado.
Falha ao executar principal (XCS-1780, XCS-1767, XCS-1754) O uso de variáveis EEPROM ou a definição de fusíveis usando o pragma de configuração pode ter causado a 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 (XCS-1778, XCS-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.
Falha de segmentação (XCS-1777) Uma falha de segmentação intermitente foi corrigida.
Falha do montador (XCS-1761) O montador avr-as pode ter travado quando o compilador foi executado no Ubuntu 18.
Objetos não limpos (XCS-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 (XCS-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 (XCS-1748) 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 (XCS-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.
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 o modo operandi e que provavelmente permanecerão em vigor permanentemente.
Integração MPLAB X IDE
Integração MPLAB IDE Se o compilador for usado a partir do MPLAB IDE, você deve instalar o MPLAB IDE antes de instalar o compilador.
Geração de código
Falha de alocação de memória PA (XCS-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.
Smart-IO não tão inteligente (XCS-2872) O recurso smart-io do compilador gerará um código válido, mas abaixo do ideal, para a função sprint se o recurso coast-data-in-proem tiver sido desativado ou se o dispositivo tiver todo o seu flash mapeado na memória de dados.
Smart-IO ainda menos inteligente (XCS-2869) O recurso smart-io do compilador gerará código válido, mas abaixo do ideal, quando as opções -floe e -fno-buil tin forem usadas.
Posicionamento de dados somente leitura abaixo do ideal (XCS-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 coast-data-in-pragma estiver ativado, especialmente se o recurso coast-data-in-config-mapped-proem também estiver ativado. Esses recursos podem ser desativados, se necessário.
Objeto file ordem de processamento (XCS-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 (XCS-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 de ativação curtos (XCS-2775) Para dispositivos ATA5700/2, os registros PHID0/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 (XCS-2758) O vinculador pode travar se a opção do driver -merlad for usada quando o código-fonte chamar um símbolo que foi definido usando a opção do vinculador -Wl, –defsym.
Inicialização incorreta (XCS-2679) Há uma discrepância entre onde os valores iniciais para alguns objetos globais/estáticos de tamanho de byte são colocados na memória de dados e onde as variáveis serão acessadas em tempo de execução.
iniciado incorretamente conjuntos vazios (XCS-2652) Nos casos em que uma string de assunto para conversão por declarado () contém o que parece ser um número de ponto flutuante em formato exponencial e há um caractere inesperado após um caractere e, o endereço vazio, se fornecido, apontará para o caractere após o e e não o e em si. por example: declarado(“hooey”, vazio); resultará em um apontamento vazio para o caractere x.
Chamadas de função indireta inválidas (XCS-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 (XCS-2626) As funções da 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 example: stator("Coruja", &vazio); retornará o valor 0, não 1.
Mensagens imprecisas do consultor de pilha (XCS-2542, XCS-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 (XCS-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.
Objetos Const não estão na memória do programa (XCS-2408) Para projetos avrxmega3 e avertins, objetos const não idealizados são colocados na memória de dados, mesmo que um aviso sugira que eles foram colocados na memória do programa. Isso não afetará dispositivos que não possuem memória de programa mapeada no espaço de memória de dados, nem afetará qualquer objeto que seja inicializado.
Saída inválida com caminho DFP inválido (XCS-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 (XCS-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 _meme (XCS-1763) As funções float límbicas chamadas com um argumento no espaço de endereço _memo 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 límbica limitada (AVRTC-731) Para os produtos ATTiny4/5/9/10/20/40, a implementação padrão da biblioteca C/Math no limbic é muito limitada ou ausente.
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 -relax é 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 as funções da biblioteca assumem GMT e não suportam fusos horários locais, portanto, a hora local () retornará a mesma hora que gummite (), por exemploampeu.
SUPORTE AO CLIENTE
file:///Aplicativos/microehip/xc8/v 2 .40/docs/Leia-me_X C 8_ para A VR. htm
Documentos / Recursos
![]() |
Software Compilador MICROCHIP MPLAB XC8 C [pdf] Manual do Proprietário MPLAB XC8 C, Software compilador MPLAB XC8 C, Software compilador, Software |