O que acontece quando você compila

Você não precisa saber disto para compilar: Compilar e implantar a aplicação mostra como fazer. Esta página explica o caminho do projeto até a aplicação que roda no controlador. Com ela fica mais fácil entender por que a compilação pede um firmware, por que uma biblioteca pode deixar de servir e por que alguns erros só aparecem ao compilar, e não enquanto você digita.

Do projeto à aplicação

O controlador não executa o texto ST que você escreve. Ele executa código de máquina do processador dele, carregado ao lado do firmware. Compilar é transformar o projeto nesse código, e o OnStudio faz isso em etapas:

  1. Salvar e conferir o projeto. As alterações pendentes são salvas, e o OnStudio confere se o projeto está completo: recurso, equipamento, tarefas, firmware e bibliotecas. Um equipamento sem firmware ou uma biblioteca não instalada param a compilação aqui.

  2. Montar o código do recurso. A configuração do recurso (variáveis globais, tarefas, hardware, mapeamento de dados) vira código, junto com as POUs. As diretivas de compilação ({IFDEF}, {ERROR}…) são avaliadas nesta etapa, com as variáveis de ambiente do equipamento.

  3. Compilar o ST. O compilador lê cada POU, confere a sintaxe e os tipos e traduz o programa para a linguagem C. A maior parte dos erros que você encontra está aqui: variável não declarada, tipos incompatíveis, ; esquecido.

  4. Gerar o código de máquina. O código C é compilado para o processador da família do equipamento (NEON, RION…). As bibliotecas já vêm compiladas para cada família, por isso uma biblioteca precisa ter sido gerada para a família do seu equipamento.

  5. Ligar com o firmware. A aplicação é encaixada no espaço que o firmware reserva para ela. É nesta etapa que o OnStudio descobre se a aplicação cabe na memória do equipamento e se as funções usadas existem nesse firmware (por exemplo, o sistema de arquivos não existe em todos os equipamentos).

  6. Empacotar. O resultado é o arquivo de aplicação (.wca), cujo nome traz o equipamento e a versão do firmware, por exemplo app1000_neon_1_f3390.wca. É esse arquivo que a implantação envia ao controlador. A compilação também grava um relatório com as versões, o firmware e os problemas encontrados, usado pelo pacote de suporte.

Se uma etapa encontra erros, as seguintes não são executadas, e os problemas vão para a aba PROBLEMAS (ver Painel de Problemas).

Por que a compilação depende do firmware

Na etapa 5 a aplicação é ligada a um firmware específico: ela usa as funções que esse firmware oferece, nos endereços em que ele as oferece, e ocupa a memória que ele deixa livre. Por isso:

  • uma aplicação compilada para um RION não roda num NEON, e vice-versa;

  • depois de atualizar o firmware do equipamento, compile e implante a aplicação de novo, para que ela seja ligada ao firmware novo;

  • compilar para o firmware errado é acusado já na compilação (problema ST5040), e não só ao implantar.

É por isso que a atividade Compilar / Implantar pergunta para qual firmware compilar (ver Escolher o firmware da compilação).

Por que uma biblioteca pode deixar de servir

Bibliotecas são distribuídas já compiladas (arquivos .wcl), uma versão para cada família de equipamento, gerada por uma versão do OnStudio. Quando o formato desse código muda entre versões do OnStudio, as bibliotecas geradas pela versão anterior precisam ser geradas de novo. O OnStudio avisa ao iniciar e acusa o problema ST5030 somente nos projetos que usam a biblioteca. Veja Bibliotecas para atualizar.

Verificação enquanto você digita e compilação

O editor ST confere o código enquanto você digita, com o mesmo compilador. Para responder logo, porém, ele analisa só a POU aberta e não gera o código de máquina nem o liga com o firmware (etapas 4 a 6). Por isso:

  • erros de sintaxe, de tipos e de declaração aparecem enquanto você digita;

  • problemas que só a ligação com o firmware revela, como memória insuficiente ou função que o firmware não oferece, só aparecem ao compilar.

Compile antes de implantar, mesmo que o editor não mostre nenhum erro.