10 votos

¿Cómo descubrir errores de desbordamiento de memoria en el código de Arduino C?

Varias veces he tenido algunos sospechosos salidas en el Monitor Serial después de cargar el código en el Arduino: como eterno salida de espacios en blanco o de repente corte de cadenas o revueltos cadenas.

Porque no había ningún error de compilación o de advertencia en el Arduino IDE pensé que el Arduino se había roto, pero después de algunas pruebas me enteré de que no todos los tipos de errores que son capturados por el compilador de Arduino IDE - especialmente cuando la asignación de variables en un bucle de una matriz de estructuras. Parece que este choque de la placa Arduino en un corto período de tiempo.

¿Cómo puedo descubrir errores no se muestran por el Arduino IDE?

7voto

g-man Puntos 31

La causa más común para la memoria RAM de agotamiento es el uso de la Cadena de objeto o el uso de un montón de la constante de matrices de caracteres (estilo c de la cadena).

Forutantly IDE 1.0.4 incluye una solución a malloc que ha afectado a la Cadena de objeto por un tiempo muy largo.

Para reducir la RAM desperdiciada por la constante de cadenas de caracteres como:

Serial.print("Hello World");  // This consumes RAM!

Usted puede utilizar el F() de la macro. Esta macro será la fuerza de la matriz de caracteres para permanecer en el PROGMEM. Cuando la matriz se utiliza, sólo un byte de la memoria se consume.

Serial.print(F("Hello World"));  // Keeps the character-array in PROGMEM

Tenga en cuenta que las cadenas almacenadas en PROGMEM no puede ser alterado durante la ejecución.

Tan lejos como descubrimiento va, sin un depurador o controlador de memoria, tienes que usar la vieja usanza detective técnicas para encontrar donde los problemas que ocurren.

3voto

Eric Puntos 152

Parece que estamos hablando de los errores de tiempo de ejecución(de la pérdida de memoria/violación de segmento tipo) aquí.

No hay alguna forma para descubrir errores (a menos que usted peine muy cuidadosamente a través del código) en el código ya escrito. Sin embargo, es bastante fácil de evitar que estas pasando, mientras que la escritura del código. Sólo ten cuidado al escribir bucles o llamadas recursivas; pregúntese "¿qué?". Si parece que estas posibilidades para que "salgan de la mano", a continuación, escribir el código para proteger en contra de eso.

Acerca de segfaults -- sólo tienes que comprobar los valores límite de los índices de matriz y usted debe estar bien. Si usted está usando punteros, por favor, tenga cuidado con la aritmética de punteros.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X