Resetear Arduino cuando la memoria RAM llega a niveles peligrosos.

Antes que nada hola a todos! Y gracias por la ayuda que me puedan brindar.

Tengo un Arduino UNO, el cual controla diversos shields (a como ser, un modulo SIM900, y un Convertidor analógico Digital, por ejemplo). Sobre dicha placa he corrido varios programas diferentes.

A medida que veo que un programa cualquiera “corre”, tengo una funcion que se va repitiendo una y otra vez, la cual a través de la librería <MemoryFree.h>", me imprime en pantalla la cantidad de memoria que me queda disponible.

Observo que la memoria nunca es constante, si bien tengo declarada todas las variables como variables globales y estáticas. Y me ha pasado de que el programa se detiene, o funciona mal, pero siempre ocurrre cuando la memoria se encuentra MUY utilizada, y cuando ha transcurrido un tiempo importante (dias).

Pero más allá de eso, siempre tuve las siguientes dudas, y surgen como una posible solución a la necesidad de tener una plataforma lo más estable posible:

¿Es posible hacer un reset por software? (Pensando que al igual que el reset via hardware, la memoria es liberada y todo comienza de cero)

¿Es posible condicionar dicho reset a que la memoria sea menor que algún valor? (por ejemplo 100 bytes)

Disculpen que no pueda subir algun programa, en estos momentos no tengo el código conmigo!

Desde ya muchas gracias!! Cualquier respuesta sirve.

PD: Sé de entrada que el problema soy YO y no el programa, ya que seguramente estoy administrando mal la memoria, pero eso deberia ser otro topic diferente, y agradeceria a nivel didactico y curioso que me puedan responder las preguntas si es posible.

Saludos :slight_smile:

Hola:

Puedes borrar la memoria RAM desde casi 0. Hay datos que no podrás porque lo usa en tiempo real, pero si puedes indicar que zona de la RAM puedes dejar a cero.

Saludos.

Puedes llamar a esta función.
Reinicializa el programa, pero no los periféricos ni registros

void soft_reset() {

asm volatile (" jmp 0");

}

Que buena noticia! Y sin necesidad de apagar el arduino. Estoy haciendo pruebas y comento resultados, muchas gracias a los dos.

Y ya por completar información te queda la opción del watchdog, y por supuesto, la de intentar tapar la sangría de memoria. :wink: