O software incorporado é muito diferente.
Em um aplicativo de desktop, abstrações e bibliotecas economizam muito tempo de desenvolvimento. Você tem o luxo de jogar outros megabytes ou gigabytes de RAM ou alguns núcleos de CPU de 2 + GHz e 64 bits em um problema, e outra pessoa (usuários) está pagando por esse hardware. Talvez você não saiba em quais sistemas o aplicativo será executado.
Em um projeto incorporado, os recursos geralmente são muito limitados. Em um projeto em que trabalhei (processadores da série PIC 17X), o hardware tinha 2Kwords de memória de programa, 8 níveis de pilha (no hardware) e 192 bytes (<0,2kB) de RAM. Diferentes pinos de E / S tinham recursos diferentes e você configurou o hardware conforme necessário, gravando nos registros de hardware. A depuração envolve um osciloscópio e analisador lógico.
No incorporado, as abstrações geralmente atrapalham e gerenciam (e custam) recursos que você não possui. Por exemplo, a maioria dos sistemas embarcados não possui sistema de arquivos. Os fornos de microondas são sistemas embarcados. Controladores de motor de carro. Algumas escovas de dente elétricas. Alguns fones de ouvido com cancelamento de ruído.
Um fator muito importante para mim no desenvolvimento de sistemas embarcados é conhecer e controlar o que o código traduz em termos de instruções, recursos, memória e tempo de execução. Frequentemente, a sequência exata de instruções controla, por exemplo, o tempo para as formas de onda da interface de hardware.
Abstrações e 'mágica' nos bastidores (por exemplo, um coletor de lixo) são ótimas para aplicativos de desktop. Os coletores de lixo economizam muito tempo procurando vazamentos de memória, quando a memória é / pode ser alocada dinamicamente.
No entanto, no mundo incorporado em tempo real, precisamos saber e controlar quanto tempo as coisas demoram, às vezes até nanossegundos, e não podemos jogar mais alguns meg de RAM ou uma CPU mais rápida em um problema. Um exemplo simples: ao fazer o escurecimento dos LEDs por software, controlando o ciclo de trabalho (a CPU tinha apenas o controle liga / desliga dos LEDs), NÃO está OK o processador desligar e fazer, por exemplo, coleta de lixo por 100ms, pois a tela seria visivelmente visível. piscar brilhante ou sair.
Um exemplo mais hipotético é um controlador de motor que aciona diretamente velas de ignição. Se essa CPU desligar e coletar lixo por 50ms, o motor será interrompido por um momento ou disparará na posição errada do virabrequim, potencialmente paralisando o motor (ao passar?) Ou danificando-o mecanicamente. Você pode matar alguém.