Una vista alternativa: los microcontroladores no se quedan sin memoria.
Al menos, no cuando se programa correctamente. Programar un microcontrolador no es exactamente como la programación de propósito general, para hacerlo correctamente debe tener en cuenta sus limitaciones y programar en consecuencia. Hay herramientas para ayudar a garantizar esto. Búscalos y aprende - al menos cómo leer guiones y advertencias de enlazadores.
Sin embargo, como dicen Majenko y otros, un microcontrolador mal programado puede quedarse sin memoria, y luego hacer cualquier cosa, incluido el bucle infinito (que al menos le da al temporizador de vigilancia la oportunidad de restablecerlo. Habilitó el temporizador de vigilancia, ¿no? )
Las reglas de programación comunes para los microcontroladores evitan esto: por ejemplo, toda la memoria está asignada en la pila o está estática (globalmente) asignada; "nuevo" o "malloc" están prohibidos. También lo es la recursión, de modo que la profundidad máxima de anidamiento de subrutinas se pueda analizar y demostrar que se ajusta a la pila disponible.
Por lo tanto, el almacenamiento máximo requerido se puede calcular cuando el programa se compila o se vincula, y se compara con el tamaño de la memoria (a menudo codificada en el script del vinculador) para el procesador específico al que se dirige.
Entonces el microcontrolador puede no quedarse sin memoria, pero su programa sí. Y en ese caso, llegas a
- reescribirlo, más pequeño o
- elija un procesador más grande (a menudo están disponibles con diferentes tamaños de memoria).
Un conjunto común de reglas para la programación de microcontroladores es MISRA-C , adoptado por la industria del motor.
En mi opinión, la mejor práctica es utilizar el subconjunto SPARK-2014 de Ada. Ada en realidad se dirige a pequeños controladores como AVR, MSP430 y ARM Cortex razonablemente bien, e inherentemente proporciona un mejor modelo para la programación de microcontroladores que C. Pero SPARK agrega anotaciones al programa, en forma de comentarios, que describen lo que el programa está haciendo.
Ahora las herramientas SPARK analizarán el programa, incluidas esas anotaciones, y probarán propiedades al respecto (o informarán posibles errores). No tiene que perder tiempo ni espacio de código lidiando con accesos de memoria erróneos o desbordamientos de enteros porque se ha demostrado que nunca suceden.
Aunque hay más trabajo inicial relacionado con SPARK, la experiencia demuestra que puede llegar a un producto más rápido y más barato porque no pasa tiempo persiguiendo reinicios misteriosos y otros comportamientos extraños.
Una comparación de MISRA-C y SPARK