TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: MLO__ en 14 de Mayo de 2009, 12:40:05

Título: Variables en RAM con #separate
Publicado por: MLO__ en 14 de Mayo de 2009, 12:40:05
Hola Amigos.

Recurro a uds que son los maestros de la programacion para que me aclaren algo que he visto en el Proteus.

Estoy cacharreandole a la GLCD y estoy usando la directiva #define FAST_GLCD, y veo que me consume mucha RAM, no se si se deba a eso lo que muestro a continuacion o si es porque no se organizar la memoria de datos.

He definido lo siguiente:

(http://img139.imageshack.us/img139/9206/ram1.png)

Donde se ve claramente que se respeta la direccion donde se pone la variable en RAM -o al menos eso es lo que creo-, pero eso es al iniciar al programa, ya que al seguir con el programa -que solo es recibir datos y guardarlos- se modifican los valores:

(http://img139.imageshack.us/img139/1175/ram2.png)

Ahi, solo he usado la funcion de copiar strings strcpy(); para luego pasarlo a la GLCD. La direcion de la variable DataBufer[] es 0x044E, que esta en otro espacio de la RAM ....

A la hora de correr el programa funciona muy normal, es decir, se respetan los valores que guardo en el bufer SetPoint[] que declare, pero no se si esto vaya a influir a la hora de implementarlo.

Es normal que suceda esto?

Saludos
Título: Re: Variables en RAM con #separate
Publicado por: PalitroqueZ en 15 de Mayo de 2009, 18:49:59
MLO y ¿estas seguro que no se modifica setpoint{3} en otro sitio?

intenta ponerle un breakpoint a ese índice en el proteus, cargalo desde la ventana watch y clica sobre la variable y busca una opción que te permita detener el programa cuando se intente escribir sobre setpoint{3}

 
Título: Re: Variables en RAM con #separate
Publicado por: MLO__ en 15 de Mayo de 2009, 21:55:34
Hola.

Super seguro Pali.

Esa parte del codigo que puse es inmediatamente despues del while(true), pero lo extraño es que las variables si se estan guardando, ya que despues si hago uso de SetPoint y el valor si se guarda ... pero el proteus no lo sigue.

Pense que era por el uso de RAM, pero no .... no se si eso vaya a afectar en el montaje ...

Una pregunta si quiero que esa seccion de memoria donde esta SetPoint[] no se toque y solo se use cuando use la variable, que mas hay que colocar ademas de #locate ???

Saludos
Título: Re: Variables en RAM con #separate
Publicado por: PalitroqueZ en 15 de Mayo de 2009, 22:46:29
Hay otra directiva llamada #reserve. En la ayuda del ccs te explica mejor su funcionamiento



Título: Re: Variables en RAM con #separate
Publicado por: MLO__ en 16 de Mayo de 2009, 14:51:50
Hola.

Hice otra prueba: Cargo directamente los valores a las variables, y para mi sorpresa, el proteus solo muestra el cambio en las variables del primer arreglo, en las otras no carga nada.

(http://img269.imageshack.us/img269/1107/ram3.png)

Sin embargo, al sacar la variable para mostrarla por la GLCD, si respeta el valor que se ha ingresado con anterioridad, aunque no correponde al valor visualizado por el ISIS.

(http://img269.imageshack.us/img269/1713/ram4.png)

No se que esta pasando ... a alguien le ha sucedido antes?

Esta declaracion si es valida verdad?

Código: C#
  1. struct BytesSetPoint
  2. {
  3.         int16 Temperatura;
  4.         int8  PendienteRampa;
  5.         int8  Horas;
  6.         int8  Minutos;
  7. }SetPoint[9];

Saludos