Arduino Uno SRAM

0

Después de innumerables horas tratando de depurar mi 'funcionaba bien con el código MEGA', he diagnosticado el problema a mi SRAM. Yo excepto que mi código (una combinación de NTPClient, EthernetClient & varias lecturas de sensores que cubren todos los pines disponibles), quizás sea demasiado trabajo para UNO & se cambiará a MEGA.

Sin embargo, durante la depuración usé la función free_ram () a continuación:

int free_ram()
{
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
} 

La salida, con solo la función en la fuente fue de alrededor de 1800 marca (casi correcto si el límite de UNO es 2k). Cuando utilicé esta función con el código completo, se leyó en -351. esperaba 0 (cero) o superior ...

(en caso de que el lector esté interesado, la salida de free_ram de MEGA fue 7463)

Mi pregunta es simple, ¿cuál es el límite más bajo de lectura de SRAM, usando la función detallada?

    
pregunta Simon.

1 respuesta

3

Un resultado negativo para esa función es de hecho posible. Indica que está intentando usar más memoria de la que tiene.

El valor devuelto es la diferencia entre el inicio del montón y la ubicación de la pila.

Si asigna demasiadas variables globales o estáticas, es posible que el inicio del montón esté muy cerca de donde está la parte superior de la pila y, a medida que se ejecuta su programa, se asignan las variables locales y la pila utilizada por las llamadas a funciones. , el puntero de pila puede terminar más bajo en memoria que el inicio del montón.

Entonces terminas con un valor negativo.

Más allá de eso, la pila se rompe en el montón, lo que provoca la corrupción de la memoria y le suceden cosas extrañas a su boceto.

    
respondido por el Majenko

Lea otras preguntas en las etiquetas