Una vista alternativa: los microcontroladores no se quedan sin memoria.
Al menos, no cuando está programado 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 asegurar esto. Búsquelos y apréndalos, al menos cómo leer los scripts y advertencias del vinculador.
Sin embargo, como dicen Majenko y otros, un microcontrolador mal programado puede quedarse sin memoria, y luego hacer cualquier cosa, incluyendo un bucle infinito (que al menos le da al temporizador de vigilancia la posibilidad de reiniciarlo. Habilitaste el temporizador de vigilancia, no lo hiciste t usted?)
Las reglas de programación comunes para los microcontroladores evitan esto: por ejemplo, toda la memoria se asigna en la pila o se asigna de forma estática (global); "Nuevo" o "Malloc" están prohibidos. Lo mismo ocurre con la recursión, de modo que la profundidad máxima de anidamiento de subrutinas pueda analizarse y mostrar que se ajusta a la pila disponible.
Por lo tanto, el almacenamiento máximo requerido se puede calcular cuando el programa se compila o 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 es posible que el microcontrolador no se quede sin memoria, pero es posible que su programa. 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 apunta a pequeños controladores como AVR, MSP430 y ARM Cortex razonablemente bien, y proporciona inherentemente 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 está haciendo el programa.
Ahora, las herramientas SPARK analizarán el programa, incluidas esas anotaciones, y demostrarán sus propiedades (o informarán de posibles errores). No tiene que perder tiempo o espacio de código para tratar con accesos de memoria erróneos o desbordamientos de enteros porque se ha comprobado que nunca ocurren.
Aunque SPARK tiene más trabajo por adelantado, 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