Vamos pensar no processador em sua área de trabalho. Tudo o que faz é executar as instruções da máquina e, por si só, não está realmente preocupado com "sistemas operacionais" ou "programas".
Você liga o computador, o processador aponta para a primeira instrução e ela começa a ser executada.
Na área de trabalho, ele inicia a execução do "sistema operacional". Mas não há razão para que você não possa ter o processador executando qualquer conjunto de instruções escolhido. (Isso pode não ser muito útil, pois você ainda deseja gerar resultados para a tela e essa funcionalidade reside no sistema operacional.) Ao mesmo tempo, se as instruções da sua máquina consistirem nos códigos de operação corretos, para que o processador produza a sequência correta de sinais para pintar uma imagem no monitor, tanto melhor. Nenhum sistema operacional é necessário.
Os desktops fazem tantas coisas que geralmente exigimos a abstração de um sistema operacional. Mas, no essencial, tudo o que o processador faz é executar instruções.
O mesmo para o processador em máquinas de coca-cola e máquinas de café. Tudo o que faz é executar instruções.
Bem, escrever instruções da máquina pouco a pouco é entediante. Portanto, assim como nos desktops, normalmente escrevemos código em C, que é compilado no código da máquina. Esse código de máquina é carregado no processador incorporado e é executado.
Os sistemas embarcados fazem tão pouco que não precisam de sistemas operacionais completos. Um microcontrolador pode ter 8 ou 16 pinos no chip - em comparação com a pontuação de pinos no soquete normal da CPU.
Portanto, o fluxo de trabalho é escrever algum código (digamos, em C), compilá-lo na sua máquina desktop. Esse compilador gera código de máquina para o chip incorporado. Em seguida, esse código é carregado no microprocessador (e você precisa de um hardware especial para fazer isso.) Em seguida, você liga o chip e ele começa a executar as instruções. Simples!