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 un fondo de desarrollo de software, principalmente programación en C ++ para juegos y ahora juegos y aplicaciones para iOS, pero mi último trabajo fue un trabajo semiprofesional de EE que comenzó con hacer un montón de programación de firmware para un ARM Cortex M3, y luego terminé aprendiendo a hacer algunos diseños básicos de circuitos y diseños de tableros y diseñé un par de tableros 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 idioma que necesitas saber. Es fácil para las personas que programan en C ++ y en realidad 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 recopilado características, y la forma en que los programadores de C ++ convencionales utilizan esas funciones, realmente es algo muy diferente trabajar en una aplicación de C razonablemente grande en lugar de una aplicación de C ++. Su SDK de firmware será un conjunto de bibliotecas de C, cualquier otra cosa que se ajuste a una MCU será una biblioteca de 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 de MCU por ahí terminan usando GCC como compilador, es casi seguro que tendrás un compilador de C ++ disponible si estás usando una familia de MCU decente. Pero debe tener mucho cuidado con las características que usa, especialmente las cosas de la biblioteca estándar, ya que es muy fácil terminar con un binario que es demasiado grande para que quepa en su dispositivo. Creo que hay un buen caso para usar C ++ en dispositivos integrados, C ++ tiene algunas características agradables que tienen basura o ningún tamaño o velocidad de penalización, solo tienes que saber qué estás haciendo y escribir el código. más adelante en el extremo del espectro de estilo C que el extremo STL del espectro en términos de uso de características inteligentes.
No le prestes demasiada atención a las personas que dicen que puedes usar Lua o Python en una MCU con el intérprete incorporado correcto bla, bla. Es cierto, lo he hecho y es divertido, pero en este 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 se mantuvieron con C y C ++ más tiempo. más 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 nivel superior o en un lenguaje de alto nivel de manera absoluta. Aun así, pasarán algunos años antes de que las empresas contraten a 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 incrustada que es un ensamblaje "bueno saberlo", a menudo repetido por personas que en realidad no trabajan en esos campos. Pero en realidad es muy poco probable que escriba algún ensamblaje, y si lo hace, probablemente solo sean unas pocas líneas para la optimización o algo con el hardware para el que no tiene una API (pero lo hará). después de escribir uno que envuelve unas pocas líneas de montaje). He trabajado en varios juegos y ese proyecto de diseño de placa / firmware y el número total de líneas de ensamblaje que he escrito para proyectos comerciales es probablemente en los adolescentes bajos. No es productivo, no es portátil y no se puede leer, por lo que solo se usa como la última opción posible.