Go Down

Topic: "Machacar" la memoria al declarar mal las variables?¿?¿? (Read 1 time) previous topic - next topic

Sergegsx

Aug 28, 2011, 09:53 pm Last Edit: Aug 28, 2011, 09:55 pm by Sergegsx Reason: 1
Hola, a raiz de este post que sigo investigando pero que parece que igual ya he visto la luz...
http://arduino.cc/forum/index.php/topic,70532.0.html

Me gustaria entender mejor como trabaja internamente el Arduino en estos casos y no se como se denomina este problema como para buscarlo por la red especificamente para Arduino.

Si declaras una variable tipo INT y despues durante tu programa le intentas meter un valor mayor por ejemplo un float?

he visto que en ocasiones funciona el programa (cuando este es sencillo), pero en programas mas extensos al final acaba bloqueandose.

como responde Arduino a este tipo de conflictos?
cosas como
Declaras una variable INT (2bytes) y le intentas guardar un float (4 bytes)
Declaras una variable LONG (4bytes) y le intentas guardar un float (4 bytes) pero con decimales y un rango distinto.
Declaras una variable byte (1bytes) y le intentas guardar un float (4 bytes) o lo que sea
etc etc.
ah y tambien, si declaras un char varible[4]; y luego le quieres meter mas bytes de los que has declarado

Igual entendiendo como responde Arduino a esto, consigo terminar de depurar mi programa.
Muchas gracias !!
* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

josemanu

No los he probado pero a veces, por error, he caido en alguna de las situaciones que comentas.

En algunos casos da error de compilación.

Si quieres estar seguro te recomiendo que hagas pequeños skeches de prueba y fuerces el error a ver que pasa.

Sergegsx

no si el error ya lo he vivido. El problema es que si no declaras algo asi
int varible = 123.45;
sino que es dentro del programa y durante su ejecución que se llega a esa situación, el compilador no se entera y te deja subir el programa. Y no es hasta que ocurre la asociación que el arduino empieza a hacer cosas raras.

Es por ello que me interesa saber que ocurre dentro del Arduino en estos casos.
Gracias.
* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

Igor R

#3
Aug 29, 2011, 10:40 am Last Edit: Aug 29, 2011, 10:43 am by Igor R Reason: 1
Yo diria, que como en todos los lenguajes de programacion, hace un "cast". Para "machacar", con punteros si que es facil....

Yo suelo usar "casting" en mis programas,asi estoy seguro. En las operaciones que quieres resultados en float y usas por ejemplo int o long,he tenido experiencias de resultados erroneos. De esta forma, controlas mas lo que deberia pasar.

Un ejemplo de usar cast:
long myvalue1;
long myvalue2;
float myresult;

myresult=(float)myvalue1/(float)myvalue2;


Salu2


Igor R.



Nota.- Ni acentos ni enyes (ordenador ingles)

Sergegsx

entiendo Igor, y que ocurre si intentas algo asi:
int myvalue1;
float myvalue2 = 1234.56;
long myvalue3 = 123456;

myvalue1 = (int)myvalue2;
myvalue1 = (int)myvalue3;
porque en este caso estas metiendo 4 bytes en 2, esto produciría un error supongo.

ah y ya que estamos, en la información de float http://arduino.cc/es/Reference/Float
dice que hay que poner un ".0" si realizas una división. esto para que es, para que lo considere un float ??
en caso de multiplicaciones tambien? no verdad?
* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

Go Up