Arduino IDE: por que os esboços não são compilados (e como evitar isso)
Como estou desenvolvendo intensamente o IDE do Arduino, essa pergunta realmente me preocupou. Por que um esboço escrito em uma versão do ambiente de desenvolvimento se recusa a compilar em versões vizinhas? Os usuários do Arduino Mega Server me surpreenderam com a mesma pergunta . Por que o AMC compila no 1.6.5 e se recusa a compilar no 1.6.4, 1.6.7 e 1.6.8?E, recentemente, no processo de portar o Arduino Mega Server para o novo controlador Genuino 101, pude resolver esse grande mistério. E neste artigo, compartilharei esse conhecimento sagrado com você e seus esboços, depois disso sempre serão compilados com sucesso. Então ...Lógica das coisas
Logicamente, o código que é compilado com êxito em uma versão do ambiente de desenvolvimento, por exemplo, 1.6.5, deve ser compilado nas versões vizinhas do IDE, porque essas versões diferem apenas no terceiro caractere e são quase as mesmas, com pequenas modificações . Mas isso não acontece. PorqueCozinha doméstica
Para entender isso, é necessário entender como as versões dos ambientes de desenvolvimento do Arduino IDE são formadas e como os usuários trabalham com esses ambientes de desenvolvimento.Vamos começar com os usuários. A maioria deles compila projetos primitivos, figurativamente falando, em 20 linhas e não há problemas com esses projetos. Esses projetos são compilados com êxito em qualquer versão do IDE, porque eles usam apenas chamadas de função de biblioteca padrão e não modificam as bibliotecas.Mas um projeto um pouco desenvolvido no Arduino não se encaixa mais nas "20 linhas" e inevitavelmente usa funções menos comuns das bibliotecas (que são mais propensas a modificações de versão para versão) e inevitavelmente chega à necessidade de modificar as próprias bibliotecas de acordo com suas necessidades específicas do projeto.E depois de modificar a biblioteca do sistema, você se torna um refém e é forçado a "arrastá-la" de uma versão para outra.Agora vamos ver como as versões do IDE do Arduino são formadas. E eles são formados arbitrariamente (suspeito que no final, um programador específico, algum Mario) da equipe emissora. E qual versão de uma biblioteca específica será incluída no kit de distribuição e de que forma (com quais modificações) permanece na consciência desse "Mario".E agora atenção, isso é muito importante! A equipe emissora tem apenas um objetivo - que a distribuição de uma versão seja mutuamente acordada e consistente em si mesma. Sua tarefa é garantir que todos os exemplos padrão funcionem corretamente. E isso é tudo! A tarefa de compatibilidade entre versões não é apresentada.E como 99% dos usuários compilam projetos em "20 linhas", essa abordagem funciona perfeitamente na prática. E o fato de quaisquer projetos sérios não serem compilados é o problema desses projetos. Graças a Deus, o mecanismo para a ocorrência do problema agora está claro, e agora ficou claro como lidar com isso.Exemplo concreto
Lembremos a portabilidade do AMS para o Genuino 101 (funciona a partir da versão 1.6.7 e superior). Aqui, a equipe do Arduino fez outra brincadeira para nós (pessoal bem feito, eles não nos deixam relaxar).Uma tentativa de compilar o projeto para o novo controlador levou a muitos erros do compilador. A análise das mensagens mostrou que o compilador não gosta muito da nossa biblioteca Ethernet. Por que ela não agradou o compilador?Começamos a entender.Nossa biblioteca: version = 1.0.4 (não gosta do compilador)Library from IDE 1.6.7: version = 1.0.4 (like the compiler)Entretanto.Nossa biblioteca: 31 arquivos (não gosta do compilador)Biblioteca do arquivo IDE 1.6.7: 31 (como o compilador)No entanto.Nossa biblioteca: 123 KB (não gosto do compilador)Biblioteca do IDE 1.6.7: 123 KB (como o compilador)No entanto.Em outras palavras, Mario “travou” uma biblioteca Ethernet IDE 1.6.7 com o mesmo número de versão do IDE 1.6.5, o mesmo número de arquivos e o mesmo tamanho, mas com um DIFERENTE CONTEÚDO e esqueceu nos avise sobre isso. E esse é o "conteúdo diferente", como uma aranha segurando seu IDE e outras bibliotecas de nível inferior (também modificadas na 1.6.7).Bravo, Mario! Com essa abordagem, nada será compilado, exceto por exemplos padrão e esboços de 20 linhas.Solução prática (quebra-cabeças do Arduino)
Agora, o mecanismo de por que os projetos não são compilados em diferentes versões do Arduino IDE tornou-se claro e, portanto, a maneira de resolver esse problema ficou clara. Nesse caso específico, a solução consiste em três partes.- Parte I Localizando uma biblioteca de trabalho. Lembre-se, a tarefa da equipe emissora de criar uma versão consistente do IDE? Então, em algum lugar deve haver uma versão funcional da biblioteca que precisamos.
- Parte Dois Transferindo uma biblioteca Ethernet em funcionamento do pequeno Mario travesso para seu lugar no projeto Arduino Mega Server. Não há nada complicado aqui - basta copiá-lo para o local da nossa biblioteca que não funciona no IDE 1.6.7 Ethernet.
- Parte três. Modificação para o projeto Arduino Mega Server de uma biblioteca portada e obviamente funcionando na IDE 1.6.7 Ethernet.
O mesmo precisa ser feito com todas as bibliotecas não compiladas do projeto (ou seja, localize uma versão funcional da biblioteca a partir do IDE e transfira-a para seu lugar no projeto e modifique-a, se necessário). Mas, nesse caso, tivemos sorte, todas as outras bibliotecas funcionaram bem (porque Mario não conseguiu modificá-las silenciosamente, embora ele pudesse e definitivamente faça isso em novas versões do IDE, mas já sabemos como lidar com isso).Conclusão
Esse é o segredo de trabalhar com sucesso no IDE do Arduino com projetos complexos. Agora você pode se sentir totalmente armado e não será difícil fazer o seu projeto funcionar em qualquer versão do IDE do Arduino.Source: https://habr.com/ru/post/pt392931/
All Articles