Respostas:
Normalmente, programação de nível baixo, como programação de driver, é uma mistura de linguagem assembly e C.
A linguagem assembly é usada para conversar com o hardware e C é usado para conversar com o kernel.
O Ada ainda é usado em sistemas de segurança / missão crítica, pois ainda oferece recursos de segurança relativamente incomparáveis.
Era obrigatório usar Ada até o final dos anos 90 no Departamento de Defesa e em algumas outras áreas, mas não é mais, portanto, não é tão usado como era antes. Mas ainda pode ser encontrado em usos altamente críticos, aviônicos, energia nuclear etc.
As versões modernas têm orientação a objetos e bom suporte para processamento paralelo, por isso é totalmente útil ainda.
Eu fiz algumas pesquisas para programação em 8 bits há pouco tempo (relacionadas a hobby; eu queria tentar construir alguns componentes eletrônicos básicos). Além de C e Assembly, os únicos idiomas que encontrei mencionados favoravelmente para essas tarefas foram Scheme e Forth.
Cython é um exemplo. Não para sistemas embarcados, mas para drivers e outras programações de baixo nível, é usado cada vez mais no mundo Python como um substituto do C. Você obtém um Python compilado, mas também acesso de baixo nível e dicas de tipo para acelerações.
Como fanático por Python, é isso que eu uso, embora seja muito raro e até agora não em nenhum contexto sério.
Bem, eu trabalhei em sistemas embarcados nos últimos anos usando C e Lua .
Confira o eLua também.
- EDIT: Aqui no Brasil nós temos uma "nova tecnologia" para TV Digital, chamada Ginga . É realmente um padrão, mas nesse padrão a linguagem Lua é usada como uma fonte de linguagem incorporada. O outro é Java.
Acho que podemos citar o Java também, para alguns sistemas especiais como o JavaCards . Se esses não são sistemas incorporados, então eu não sei o que significa incorporado ... :)