Aprenda C e obtenha uma placa de desenvolvimento de microcontrolador barata, como um MSP430 ou ARM Cortex, e pelo menos grave e carregue alguns programas em C.
Tenho um diploma em ciência da computação e um conhecimento em desenvolvimento de software, principalmente programação C ++ para jogos e agora jogos e aplicativos iOS, mas meu último trabalho foi um show semi-profissional de EE que começou com a programação de firmware de um sistema ARM Cortex M3 , e acabei aprendendo a fazer alguns projetos básicos de circuito e layout de placas, além de projetar algumas placas simples. Então, basicamente, tive que enfrentar o problema de usar a melhor linguagem de programação para conectar o design de hardware / software como alguém responsável por ambas as extremidades.
C é absolutamente o idioma que você precisa saber. É fácil para as pessoas que programam em C ++ e nunca precisam se restringir ao conjunto de recursos de C para dizer "é a mesma coisa", mas não é. Especialmente da maneira como o C ++ evoluiu e reuniu recursos, e da maneira como os programadores convencionais de C ++ usam esses recursos, é realmente muito diferente trabalhar em um aplicativo C razoavelmente grande em oposição a um aplicativo C ++. O SDK do firmware será um monte de bibliotecas C, qualquer outra coisa que caiba em uma MCU será uma biblioteca C, qualquer sistema operacional que faça sentido em uma MCU será gravado em C, etc. etc.
Dito isto, como muitas das cadeias de ferramentas do MCU por aí acabam usando o GCC como compilador, você quase certamente terá um compilador C ++ disponível se estiver usando uma família decente de MCU. Mas é preciso ter muito cuidado com os recursos que você usa, especialmente as da biblioteca padrão, pois é muito fácil acabar com um binário muito grande para caber no seu dispositivo. Eu acho que há um bom argumento a ser usado no uso do C ++ em dispositivos embarcados, o C ++ possui alguns recursos interessantes que não têm tamanho ou não têm penalidade de velocidade ou tamanho, você só precisa saber o que está fazendo e escrever um código que seja adequado mais adiante na extremidade C do estilo C do que na extremidade STL do espectro em termos de uso inteligente de recursos.
Não preste muita atenção nas pessoas que dizem que você pode usar Lua ou Python em um MCU com o intérprete incorporado certo blá, blá. É verdade, eu fiz e é divertido, mas no momento é mais para projetos de brinquedos e outras coisas que aparecem no Hack a Day. Acho que veremos mais coisas desse tipo, pois a Lei de Moore é aplicada incansavelmente até mesmo nos processadores menores, isso é algo que aconteceu com os jogos em que costumava haver muita montagem, e eles resistiram com C e C ++ por mais tempo. do que todos os outros, e agora tudo é tão rápido, e a produtividade do desenvolvedor é tão importante que muito desenvolvimento é feito com linguagens de alto nível incorporadas ou em uma linguagem de alto nível. Mesmo assim, levará alguns anos até que você veja empresas contratando programadores de firmware com experiência em Python e Lua.
Também não gaste muito tempo na montagem. Não é ruim estar familiarizado com os conceitos, mas é improvável que você se veja fazendo muito, se houver alguma programação de montagem. Existe uma sabedoria convencional com jogos incorporados que é "bom saber" montagem, muitas vezes repetida por pessoas que realmente não trabalham nessas áreas. Mas, na realidade, é muito improvável que você escreva qualquer assembly, e se o fizer, provavelmente haverá apenas algumas linhas para otimização ou algo com o hardware para o qual você não tem uma API (mas você depois de escrever um que envolva algumas linhas de montagem). Já trabalhei em vários jogos e esse projeto de design de placa / firmware e o número total de linhas de montagem que escrevi para projetos comerciais provavelmente estão na adolescência. Isto'