¿Y si ya ha aprendido a programar microcontroladores?

Hola Khabrovchanin,



En este artículo quiero especular sobre cómo desarrollar un programador de microcontroladores. Este artículo es un pequeño material de lectura para aquellos que, como yo una vez, no sabían dónde desarrollarse más en su profesión. Quizás puedas encontrar algo interesante aquí.



En este momento llevo 3 años trabajando como programador y hasta hace poco no veía qué hacer a continuación. Sin embargo, luego conocí a una persona con más de 20 años de experiencia en programación de sistemas embebidos, y comunicándome con él, identifiqué algunos aspectos en los que puedes desarrollarte. Aquí quiero compartirlos, así como mi experiencia personal. En ningún caso quiero enseñarle a nadie, solo compartiré mis mejores prácticas y usted mismo podrá decidir si estos consejos son útiles o no.



Cada mes hay otro artículo para principiantes con un LED parpadeante. A su vez, simplemente no hay artículos para programadores intermedios. Aquí quiero mostrar que programar microcontroladores correctamente no es una tarea trivial. Esto no se puede aprender en un par de años. En 2020, no es muy diferente de la tarea de programar sistemas convencionales, ya que los MC se están volviendo cada vez más poderosos. Por supuesto, estoy hablando de proyectos de un millón de líneas o más.



Parece que la presentación se retrasó un poco, así que me pondré manos a la obra. En este artículo, solo se considerará el aspecto de la programación, no toco los circuitos. Traté de priorizar los elementos, pero la diferencia entre el primero y el último es pequeña, todos los elementos son importantes.



1. Aprenda el lenguaje C ++.

Este es un consejo trivial, sin embargo, me pareció oportuno destacarlo. El hecho es que casi todos los que conozco continúan programando en C puro incluso ahora. ¿Por qué es tan malo? Según diversas fuentes, un proyecto con más de 100.000 líneas (que no es una gran cantidad) se vuelve prácticamente sin apoyo en C. En 2020, los compiladores de MK alcanzaron tal nivel de compilación de código fuente que el escape de C y C ++ no será diferente. Pero la legibilidad del código será completamente diferente. Clases, POO, funciones virtuales, punteros inteligentes, etc. - todos estos son poderosos asistentes del programador. Lamentablemente, no es posible destacar y recomendar un solo libro, ya que hay demasiados.



2. Estudiar patrones de diseño.

No es ningún secreto que escribir un buen programa en C ++ sigue siendo un desafío. Este lenguaje es demasiado vasto, abunda en demasiadas herramientas. ¿Qué es un patrón de diseño? Esta es una especie de guía para resolver tareas frecuentemente repetitivas. Aquí puedo recomendar un clásico, a saber, el trabajo de la banda de cuatro "Patrones de diseño orientado a objetos Gamma Erich, Helm Richard". Es difícil encontrar un programador ordinario de C ++ que no haya leído esto, ¿por qué somos peores?



3. Descubra el maravilloso mundo de STL

Creo que esta biblioteca no necesita presentación. Para aquellos que aún no saben qué es, esta es la biblioteca de plantillas estándar. Le permite hacer su código más corto y más fácil de entender a través de la programación genérica. Esta herramienta ya está integrada en C ++. Sin embargo, por alguna razón desconocida, es muy difícil encontrar un proyecto para MK, donde se utilice. Aunque los compiladores modernos (el mismo IAR) lo admiten.



4. Agregue pruebas unitarias a sus proyectos.

Aquí no tengo nada especial que escribir. Se han escrito innumerables trabajos sobre qué es y por qué. El efecto de las pruebas unitarias y el desarrollo a través de las pruebas es significativo. Estas pruebas le permiten detectar muchos errores incluso antes de que las correcciones se envíen a OT. Además, hay un gran libro sobre el tema: Jeff Langr - Modern C ++ Programming with Test-Driven Development (2013).



5. Explore el Kernel

Aunque programamos diferentes microcontroladores, la mayoría tiene núcleos de la serie CortexM. Los núcleos tienen muchas características diferentes, como máscaras de bits o temporizadores de depuración. Todo esto puede resultar útil. También es útil saber cómo se guardan los RON cuando se interrumpen, por ejemplo. Aquí puedo recomendar “ARM Cortex-M3 core. La guía completa de Joseph Yu ".



6. Aprender ensamblador

Puede parecer ridículo, pero creo que conocer el ensamblador para depurar aplicaciones es fundamental. Además, es muy divertido escribir sobre él. Con la ayuda de Assembler, puede comprender claramente lo que está sucediendo en este punto de interrupción en particular. El libro del párrafo anterior también es adecuado aquí.



7. Algunas palabras sobre IDE

Recientemente cambié al paquete VS + VGDB. Este paquete tiene un montón de ventajas, y juntas superan la única ventaja de IAR, el tamaño del binario. En gcc, puede establecer banderas para advertencias extendidas, así como una bandera de que la advertencia debe considerarse un error (por cierto, IAR también tiene esto). Con este enfoque, su propio IDE le ayuda a codificar limpiamente. Hay un buen artículo sobre esto .sobre habr. Por cierto, me he encontrado con empresas que para una tarea de prueba (durante una entrevista) obligan a escribir código con estas banderas.



Probablemente eso es todo. Con suerte, si siguió el enlace, encontró lo que estaba buscando. Comparta en los comentarios qué otras rutas de desarrollo pueden tener los programadores integrados.



PD En este artículo hay cosas que no se mencionan, por ejemplo, programar periféricos complejos mediante registros o RTOS. Se supone que el lector ya posee estas habilidades, o al menos conoce su existencia.



All Articles