Oi Khabrovchanin,
Neste artigo eu quero especular sobre como desenvolver um programador de microcontrolador. Este artigo é uma pequena leitura para quem, como eu antes, não sabia onde se desenvolver em sua profissão. Talvez você possa aprender algo interessante aqui.
No momento, trabalho como programador há 3 anos e, até recentemente, não sabia o que fazer a seguir. Porém, então conheci uma pessoa com mais de 20 anos de experiência em programação de sistemas embarcados e, ao me comunicar com ela, identifiquei alguns aspectos nos quais você pode se desenvolver. Quero aqui compartilhá-los, bem como minha experiência pessoal. Em nenhum caso quero ensinar ninguém, vou apenas compartilhar minhas melhores práticas, e você pode decidir por si mesmo se essas dicas são úteis ou não.
Todo mês há um outro artigo para iniciantes com um LED piscando. Por sua vez, simplesmente não há artigos para programadores intermediários. Quero mostrar aqui que programar microcontroladores corretamente não é uma tarefa trivial. Isso não pode ser aprendido em alguns anos. Em 2020, não é muito diferente da tarefa de programar sistemas convencionais, pois os MCs estão se tornando cada vez mais poderosos. Claro, estou falando de projetos de um milhão de linhas ou mais.
Parece que a introdução demorou um pouco, então vou direto ao assunto. Neste artigo, apenas o aspecto da programação será considerado, não tocarei nos circuitos. Tentei priorizar os itens, mas a diferença entre o primeiro e o último é pequena, todos os itens são importantes.
1. Aprenda a linguagem C ++.
Este é um conselho trivial, entretanto, achei apropriado destacá-lo. O fato é que quase todo mundo que conheço continua programando em C puro mesmo agora. Por que isso é ruim? De acordo com várias fontes, um projeto com mais de 100.000 linhas (o que não é um grande número) torna-se praticamente sem suporte em C. Em 2020, os compiladores para MK atingiram um nível de compilação de código-fonte que a exaustão de C e C ++ não será diferente. Mas a legibilidade do código será completamente diferente. Aulas, OOP, funções virtuais, ponteiros inteligentes, etc. - todos esses são assistentes poderosos para o programador. Infelizmente, não é possível destacar e recomendar um único livro, visto que são muitos.
2. Estude padrões de projeto.
Não é nenhum segredo que escrever um bom programa C ++ ainda é um desafio. Esta linguagem é muito vasta, ela contém muitas ferramentas. O que é um padrão de design? Este é algum tipo de guia para resolver tarefas frequentemente repetitivas. Aqui posso recomendar um clássico, ou seja, o trabalho da gangue dos quatro "Padrões de design orientado a objetos Gamma Erich, Helm Richard". É difícil encontrar um programador C ++ comum que não tenha lido isso, por que somos piores?
3. Descubra o maravilhoso mundo de STL
Acho que esta biblioteca dispensa apresentações. Para quem ainda não sabe o que é, esta é a biblioteca de modelos padrão. Ele permite que você torne seu código mais curto e fácil de entender por meio de programação genérica. Essa ferramenta já está integrada ao C ++. Porém, por algum motivo desconhecido, é muito difícil encontrar um projeto para o MK, onde ele é usado. Embora os compiladores modernos (o mesmo IAR) o suportem.
4. Adicione testes de unidade aos seus projetos.
Aqui não tenho nada de especial para escrever. Inúmeras obras foram escritas sobre o que é e por quê. O efeito dos testes de unidade e do desenvolvimento por meio de testes é significativo. Esses testes permitem detectar muitos bugs antes mesmo que as correções sejam enviadas para o OT. Além disso, há um ótimo livro sobre o assunto: Jeff Langr - Modern C ++ Programming with Test-Driven Development (2013).
5. Explorar o kernel
Embora programemos microcontroladores diferentes, a maioria possui kernels da série CortexM. Kernels têm muitos recursos diferentes, como bitmasks ou cronômetros de depuração. Tudo isso pode ser útil. Também é útil saber como os RONs são salvos quando interrompidos, por exemplo. Aqui posso recomendar “núcleo ARM Cortex-M3. O Guia Completo de Joseph Yu. "
6. Aprenda Assembler
Pode parecer ridículo, mas acho que conhecer o montador para depurar aplicativos é essencial. Além disso, é muito divertido escrever sobre. Com a ajuda do Assembler, você pode entender claramente o que está acontecendo neste ponto de interrupção específico. O livro do parágrafo anterior também é adequado aqui.
7. Algumas palavras sobre IDE
Recentemente, mudei para o pacote VS + VGDB. Este pacote tem vários prós e, juntos, eles superam a única vantagem do IAR, o tamanho do binário. No gcc, você pode definir sinalizadores para avisos estendidos, bem como um sinalizador de que o aviso deve ser considerado um erro (o IAR também tem isso, a propósito). Com essa abordagem, seu próprio IDE ajuda a codificar de forma limpa. Existe um bom artigo sobre isso
.em habr. A propósito, conheci empresas que, para uma tarefa de teste (durante uma entrevista), obrigam a escrever código com essas bandeiras.
Provavelmente é tudo. Esperançosamente, se você seguiu o link, encontrou o que estava procurando. Compartilhe nos comentários que outros caminhos de desenvolvimento os programadores incorporados podem ter.
PS Neste artigo há coisas que não são mencionadas, por exemplo, programar periféricos complexos por meio de registradores ou RTOS. Supõe-se que o leitor já possua essas habilidades, ou pelo menos saiba de sua existência.