Com sistemas embarcados baseados em microcontroladores de 8 e 16 bits, é mais fácil desenvolver software que possa se encaixar nos recursos limitados dessas limitações de armazenamento muito modestas (talvez alguns 100 bytes de RAM para microcontroladores de 8 bits low-end , com 2-8 KiB de ROM ou EPROM / Flash para armazenamento de código).
Nesses casos, linguagens pequenas como C ou assembly tendem a ser as linguagens de desenvolvimento mais usadas. Como uma comparação relativamente aproximada, um montador completo e um compilador C99 podem caber em um único disquete, enquanto você precisa de vários MiB para um sistema de desenvolvimento C ++ moderno (com STL, etc.).
Quando você olha para micros de ponta ( DSP de 16 bits e principalmente de 32 bits, com 64 bits bastante raros) e DSP em ambientes incorporados, as restrições enfraquecem e o desenvolvimento de software pode constituir a maior parte do desenvolvimento. esforço, portanto, faz sentido usar as ferramentas de desenvolvimento mais produtivas, incluindo linguagens mais avançadas com recursos como linguagens de programação orientada a objetos (OOP), como C ++, e linguagens mais recentes (Java, Perl, Ruby, Python).
É possível, na montagem e C, prever quanta memória está sendo usada, para que um projeto com restrição de espaço seja viável, mas recursos avançados, como modelos, manipulação de exceções e vinculação em tempo de execução, tornam impossível conhecer exatamente o espaço de memória necessário para um programa C ++ padrão antecipadamente. Não sei o suficiente sobre o MISRA C ++ , que é um subconjunto do C ++, para comentar.
Idiomas baseados em máquinas virtuais executando código de bytes (Java, Perl, Python) são menos maduros na experiência do desenvolvedor incorporado e, como esses idiomas são projetados para isolar o programador do hardware específico, também torna mais difícil ter consciência de limitações e restrições do sistema de hardware incorporado. Esse é um problema menor nos processadores rápidos de 32 bits (por exemplo, ARMv7) com MiB, se não com GiB de RAM.
Todas as implementações do BASIC que eu conheço são bastante simplistas nos recursos da linguagem, permanecendo amplamente fiéis ao legado do Dartmouth BASIC dos anos 1960. Isso significa que o idioma não possui bibliotecas de tempo de execução complexas ou manipulação de exceções, e um intérprete ou compilador é bastante simples de escrever e também é pequeno no tamanho do arquivo. A maioria dos microcontroladores tem pelo menos um compilador BASIC disponível para ele.
Espero que descreva de maneira geral os motivos pelos quais você encontrará C e montagem usados principalmente em sistemas embarcados menores ou mais antigos, e com as limitações dos novos sistemas embarcados de médio a alto nível diferem apenas ligeiramente dos computadores pessoais de mesa tradicionais.