'Incorporado' é um termo meio carregado.
Em alguns aspectos, qualquer sistema dedicado à execução de um único aplicativo pode ser chamado de sistema incorporado, desde que haja algum hardware a ser controlado. É possível chamar um PPC604 de 400 MHz com 2 GB de RAM executando um aplicativo java no Linux como um sistema incorporado, se estiver controlando um processo por meio de módulos de E / S locais. Por outro lado, um arduino apenas executando algum tipo de aplicativo de rede mínimo não seria muito um sistema incorporado. Mas provavelmente "incorporado" faz com que a maioria das pessoas pense em controladores baseados em flash com apenas algumas centenas de bytes de RAM, sem sistema operacional para falar e uma infinidade de periféricos no chip.
Dito isto, provavelmente os dois maiores obstáculos que os programadores não incorporados geralmente enfrentam nos sistemas embarcados de aprendizado são os registros e interrupções de E / S.
As interrupções podem, na verdade, ser o mais fácil dos dois conceitos para os programadores não incorporados lidarem, uma vez que os principais problemas com esses programas, concorrência e programação orientada a eventos, são frequentemente encontrados em aplicativos comuns. O que torna as interrupções um problema é perceber a extrema sensibilidade de um sistema à qualidade de seu manuseio de interrupções e os meandros de lidar com o hardware para limpar a condição de interrupção e configurar o próximo. Com uma GUI, um impasse mata apenas o aplicativo. Com um manipulador de interrupções, um impasse faz com que todo o sistema seja bloqueado.
Os dispositivos de E / S parecem ser a área que causa mais dificuldade. Para os não iniciados, pode ser uma surpresa descobrir que a leitura desse registro aqui afeta esse registro ali . Escrevendo 1 para limpar bits. Bits de status que se limpam quando você lê um registro de dados, etc. Há tantas possibilidades com o hardware de E / S que não há regra geral para lidar com ele, exceto para aprender a encontrar e interpretar as folhas de dados do dispositivo. Escrever um driver de dispositivo para uma porta serial lhe ensinará muito sobre programação de E / S de baixo nível.
Realmente, não há substituto para aprender essas coisas do que arregaçar as mangas e programar alguma linguagem C e / ou assembly reta no metal puro. Mesmo o sistema embarcado baseado em java mencionado, eventualmente, precisa de um driver de dispositivo para a E / S, e isso significa, finalmente, lidar com alguns C. A experiência é o melhor professor. Escolha um microcontrolador, seja MSP430, TMS320, AVR, ARM, PIC, 68HC11, qualquer que seja, encontre um kit de avaliação e construa alguns sistemas.