Uma visão alternativa: os microcontroladores não ficam sem memória.
Pelo menos, não quando programado corretamente. Programar um microcontrolador não é exatamente como a programação de uso geral; para fazê-lo corretamente, você deve estar ciente de suas restrições e programar adequadamente. Existem ferramentas para ajudar a garantir isso. Pesquise-os e aprenda-os - pelo menos como ler scripts e avisos do vinculador.
No entanto, como Majenko e outros dizem, um microcontrolador mal programado pode ficar sem memória e, em seguida, fazer qualquer coisa, incluindo loop infinito (que pelo menos dá ao cronômetro do watchdog uma chance de redefini-lo. Você ativou o timer do watchdog, não foi? )
Regras de programação comuns para microcontroladores evitam isso: por exemplo, toda a memória é alocada na pilha ou estaticamente (globalmente) alocada; "new" ou "malloc" são proibidos. O mesmo ocorre com a recursão, para que a profundidade máxima do aninhamento de sub-rotinas possa ser analisada e mostrada para caber na pilha disponível.
Portanto, o armazenamento máximo necessário pode ser calculado quando o programa é compilado ou vinculado e comparado com o tamanho da memória (geralmente codificada no script do vinculador) para o processador específico que você está direcionando.
Em seguida, o microcontrolador pode não ficar sem memória, mas o seu programa pode. E nesse caso, você começa a
- reescreva-o, menor ou
- escolha um processador maior (eles geralmente estão disponíveis com tamanhos de memória diferentes).
Um conjunto comum de regras para a programação de microcontroladores é o MISRA-C , adotado pela indústria automobilística.
A melhor prática, na minha opinião, é usar o subconjunto SPARK-2014 do Ada. Na verdade, o Ada tem como alvo pequenos controladores como AVR, MSP430 e ARM Cortex razoavelmente bem e, inerentemente, fornece um modelo melhor para a programação de microcontroladores do que o C. Mas o SPARK adiciona anotações ao programa, na forma de comentários, que descrevem o que o programa está fazendo.
Agora, as ferramentas SPARK analisarão o programa, incluindo essas anotações, e comprovarão suas propriedades (ou reportarão possíveis erros). Você não precisa perder tempo ou espaço de código lidando com acessos de memória incorretos ou estouros de números inteiros, porque comprovadamente nunca aconteceram.
Embora exista mais trabalho inicial envolvido com o SPARK, a experiência mostra que ele pode chegar a um produto mais rápido e mais barato, porque você não gasta tempo perseguindo reinicializações misteriosas e outros comportamentos estranhos.
Uma comparação de MISRA-C e SPARK