Autor Tema: Asignacion de Rom a Array  (Leído 1953 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado LuNaTk

  • PIC10
  • *
  • Mensajes: 27
Asignacion de Rom a Array
« en: 02 de Junio de 2012, 12:58:02 »
Hola,

Estoy teniendo problemas con dos arreglos, tengo las siguientes estructuras de datos

Código: [Seleccionar]
#define NoProductos   3
typedef struct {char    Nombre[16];        // Estructura del Producto
                       long    CentiLitros;
                       float    Precio;
                       int       ImageIndex;}PD;

typedef struct{PD P[NoProductos];}PDT; // Array de Productos

PDT Productos;                                     // Variable de Productos

// Por otro lado manejo un array para un GLCD

struct{
   int Left[512];
   int Right[512];
}GLCDData;


Cuando mi programa inicia, cargo los datos para la variable Productos, esta parte funciona bien.
La segunda estructura es para pintar en el GLCD sin leer, es decir sin usar el pin RW, probada y funcionando bien.

El problema es que de alguna manera CCS esta borrando el contenido de la variable Productos, luego de haber trabajado con la estructura del GLCD.

Lo eh depurado y eh comprobado que el contenido de la variable Productos ha sido borrada, y en ninguna parte de mi programa se borra esta variable, sera que el compilador reutiliza es espacio reservado para la variable Productos?

He visto que se puede asignar espacio de memoria mediante linker files .lkr pero no se si se puedan usar en CCS.

Alguna idea?
Cuando mas dificil es.... Mas grande el triunfo!!!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Asignacion de Rom a Array
« Respuesta #1 en: 02 de Junio de 2012, 13:04:16 »
Puedes utilizar la directiva #RESERVE para reservar un trozo de RAM, y la directiva #LOCATE para meter allí tu variable.

Pero es raro lo que te ocurre; aunque no hagas la reserva, debería hacerla el propio compilador.
¿Tu variable está declarada como global o la declaras dentro de una función?

Desconectado LuNaTk

  • PIC10
  • *
  • Mensajes: 27
Re: Asignacion de Rom a Array
« Respuesta #2 en: 02 de Junio de 2012, 13:17:32 »
Hola Nocturno, gracias por tu respuesta,

La variable esta declarada Global. Utilize la directiva #locate y al parecer con esa simple modificacion, ya no me borra el contenido de la variable, si es muy raro habia trabajado antes con arrays pero bueno nunca con una de 1024 bytes para el GLCD.

gracias, saludos

Código: [Seleccionar]
#define NoProductos   3
typedef struct {char    Nombre[16];        // Estructura del Producto
                       long    CentiLitros;
                       float    Precio;
                       int       ImageIndex;}PD;

typedef struct{PD P[NoProductos];}PDT; // Array de Productos

PDT Productos;                                     // Variable de Productos
#locate Productos=0x5F0                      // Asigno direccion de variable

// Por otro lado manejo un array para un GLCD

struct{
   int Left[512];
   int Right[512];
}GLCDData;
#locate GLCDData=0x100                    // Asigno direccion de datos
Cuando mas dificil es.... Mas grande el triunfo!!!

Desconectado LuNaTk

  • PIC10
  • *
  • Mensajes: 27
Re: Asignacion de Rom a Array
« Respuesta #3 en: 02 de Junio de 2012, 13:27:14 »
lo que no me queda claro es si la direccion que se asigna a #locate comprende direcciones de RAM ó ROM?
Cuando mas dificil es.... Mas grande el triunfo!!!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Asignacion de Rom a Array
« Respuesta #4 en: 02 de Junio de 2012, 14:07:06 »
#locate es para RAM

#org es para ROM

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Asignacion de Rom a Array
« Respuesta #5 en: 02 de Junio de 2012, 15:44:54 »
No creo que CCS te coloque una variable dentro de su sector de memoria reservada  :undecided: Puede ser que de alguna forma tu código, mediante el uso de punteros, se vaya de rango y acceda a ese sector?
No contesto mensajes privados, las consultas en el foro

Desconectado LuNaTk

  • PIC10
  • *
  • Mensajes: 27
Re: Asignacion de Rom a Array
« Respuesta #6 en: 02 de Junio de 2012, 17:38:08 »
Hola Suky,

pues mira el unico lado donde uso los punteros para escribir es en estas dos funciones de manejo del LCD

Código: [Seleccionar]
void GLCDPixel(int x,int y,int1 Color){
  
      int *Ptr;
      int16 Temp;
      Temp=y/8;
      Temp*=64;
      Temp+=x;
      
      if(x>63){
         Ptr=&GLCDData.Right[0] + Temp - 64;
      }else{
         Ptr=&GLCDData.Left[0] + Temp;
      }
      
      if(Color){
         *Ptr|=(0x01)<<(y%8);
      }else{
         *Ptr&=~((0x01)<<(y%8));
      }
}

void GLCD_FillScreen(int1 Color){

   int Data;
   int *Ptr1, *Ptr2;
   int16 i;

   Ptr1=&GLCDData.Left[0];
   Ptr2=&GLCDData.Right[0];
   Data=0xFF*Color;

   for(i=0;i<512;i++){
      *Ptr1++=Data;
      *Ptr2++=Data;
   }
}

Crees que en alfuguna de estas funciones pueda esar el problema? que se vaya a un rango donde afecte a mi variable?

Gracias Nocturno por la aclaración :)
« Última modificación: 02 de Junio de 2012, 17:41:46 por LuNaTk »
Cuando mas dificil es.... Mas grande el triunfo!!!

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Asignacion de Rom a Array
« Respuesta #7 en: 02 de Junio de 2012, 18:01:58 »
como es en ccs pues no lo se bien, pero estas declarando un puntero int, en ccs esto se toma como 16 u 8bits?    int *Ptr1, *Ptr2;

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Asignacion de Rom a Array
« Respuesta #8 en: 02 de Junio de 2012, 19:30:30 »
como es en ccs pues no lo se bien, pero estas declarando un puntero int, en ccs esto se toma como 16 u 8bits?    int *Ptr1, *Ptr2;

Es de 8-bits.

Citar
pues mira el unico lado donde uso los punteros para escribir es en estas dos funciones de manejo del LCD

No, ahí no se ve que se fuera de rango  :undecided: En caso de que algo comience a fallar lo mejor va ser realizar un debug fino  :?


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Asignacion de Rom a Array
« Respuesta #9 en: 03 de Junio de 2012, 03:07:35 »
¿Has actualizado la versión de CCS?, ¿cuál usas?


 

anything