Aprenda C y obtenga una placa de desarrollo de microcontrolador barata, como un MSP430 o ARM Cortex, y al menos escriba y cargue algunos programas en C.
Tengo un título en ciencias de la computación y experiencia en desarrollo de software, principalmente programación en C ++ para juegos y ahora juegos y aplicaciones para iOS, pero mi último trabajo fue un concierto de EE semi-profesional que comenzó con un montón de programación de firmware para un sistema ARM Cortex M3 , y luego terminé conmigo aprendiendo cómo hacer un diseño básico de circuito y diseño de placa y diseñando un par de placas simples. Así que básicamente tuve que enfrentar el problema de usar el mejor lenguaje de programación para unir el diseño de hardware / software como alguien responsable de ambos extremos.
C es absolutamente el lenguaje que necesitas saber. Es fácil para las personas que programan en C ++ y nunca tienen que limitarse al conjunto de funciones de C para decir "es lo mismo", pero no lo es. Especialmente la forma en que C ++ ha evolucionado y reunido características, y la forma en que los programadores principales de C ++ usan esas características, es realmente muy diferente trabajar en una aplicación C razonablemente grande en lugar de una aplicación C ++. Su SDK de firmware será un montón de bibliotecas C, cualquier otra cosa que se ajuste a una MCU será una biblioteca C, cualquier sistema operativo que tenga sentido en una MCU se escribirá en C, etc., etc.
Dicho esto, dado que muchas de las cadenas de herramientas MCU terminan usando GCC como su compilador, seguramente tendrá un compilador C ++ disponible si está utilizando una familia MCU decente. Pero debe tener mucho cuidado con las funciones que utiliza, especialmente las de la biblioteca estándar, ya que es muy fácil terminar con un binario que es demasiado grande para caber en su dispositivo. Creo que hay un buen caso para usar C ++ en dispositivos embebidos, C ++ tiene bastantes características agradables que tienen desperdicio o no hay penalización de tamaño o velocidad, solo tiene que saber lo que está haciendo y escribir código de esa manera más adelante en el extremo de estilo C del espectro que en el extremo STL del espectro en términos de uso inteligente de funciones.
No preste demasiada atención a las personas que dicen que puede usar Lua o Python en una MCU con el intérprete integrado adecuado, bla, bla. Es cierto, lo he hecho y es divertido, pero por el momento es más para proyectos de juguetes y cosas que aparecen en Hack a Day. Creo que veremos más de ese tipo de cosas, ya que la Ley de Moore se aplica implacablemente incluso a los procesadores más pequeños, esto es algo que sucedió con los juegos donde solía haber mucho ensamblaje, luego aguantaron con C y C ++ más tiempo que todos los demás, y ahora todo es tan rápido, y la productividad del desarrollador es tan importante que gran parte del desarrollo se realiza con lenguajes integrados de alto nivel o en un lenguaje de alto nivel directamente. Aun así, pasarán algunos años antes de que veas empresas contratando programadores de firmware con fondos de Python y Lua.
Tampoco pases demasiado tiempo en el montaje. No es malo estar familiarizado con los conceptos, pero es poco probable que te encuentres haciendo mucho, si es que hay alguna programación de ensamblaje. Es como esta sabiduría convencional con juegos e incrustados que es un ensamblaje "bueno saber", a menudo repetido por personas que realmente no trabajan en esos campos. Pero, en realidad, es muy poco probable que escriba algún ensamblaje, y si lo hace, probablemente solo habrá algunas líneas para la optimización o algo con el hardware para el que simplemente no tiene una API (pero lo hará después de escribir uno que envuelva algunas líneas de ensamblaje). He trabajado en varios juegos y en ese proyecto de diseño de placa / firmware y el número total de líneas de ensamblaje que he escrito para proyectos comerciales probablemente sea en la adolescencia. Eso'