Autor Tema: Uso de extern en CCS  (Leído 1966 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado MTU

  • PIC10
  • *
  • Mensajes: 9
Uso de extern en CCS
« en: 04 de Junio de 2009, 14:21:24 »
Saludos a todos, hace tiempo que estoy registrado, y aunque a veces he seguido algunos hilos creo que esta es la primera vez que publico un tema en esta gran comunidad.

Llevo unos dias tratando de poner en pie un programa en el que necesito hacer lo siguiente: desde una libreria situada al principio del programa necesito leer un array de constantes que esta situado al final. Para ello he intentado usar la palabra clave EXTERN la cual permite que las funciones de la libreria que se refieren al array puedan tener visibilidad del mismo, pero aunque el programa compila sin problemas, no parece estar realmente llegando a acceder al array. Lo unico que leen desde el array son ceros... He hecho la prueba incluso accediendo a un array normal en memoria, y curiosamente tambien devuelve siempre ceros... No se si esque no entiendo el uso de extern o si en CCS hay alguna diferencia que no pillo. Uso CCS desde MPLAB.

Aqui pongo un ejemplo del codigo de pruebas para ver si consigo acceso tanto a un array en memoria como un array const:

Código: [Seleccionar]
void funcion1 (void){

int8 i,n;
extern char data[]; // """SI PONGO EXTERN CHAR CONST DATA[] SE PRODUCE UN ERROR..."""

for (n=0;n<4;n++) i=data[n];

}

...
char const data[]={0x10,0x20,0x30,0x40}; // si QUITO LA PALABRA CONST tampoco consigo nada

Monitorizando el valor de i, este siempre se pone a cero. Y si comento la definicion char const data[]=... genera un error, por lo que parece que el compilador realmente toma como que la declaracion dentro de la funcion se refiere a este array.
¿Que puede estar llendo mal?


Gracias. Saludos.

Desconectado MTU

  • PIC10
  • *
  • Mensajes: 9
Re: Uso de extern en CCS
« Respuesta #1 en: 05 de Junio de 2009, 18:28:20 »
Nadie tiene ni idea???  :(

La cosa esque no encuentro informacion sobre ningun caso parecido. Al parecer el uso de extern no tiene mayor complicacion. Nadie ha tenido un problema similar al que comento con CCS??¿

Saludos.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Uso de extern en CCS
« Respuesta #2 en: 05 de Junio de 2009, 20:46:43 »
Hola, nunca lo he usado pero se me ocurre que debas poner el tamaño del array...

Código: [Seleccionar]
int8 i,n;
extern char data[4]; // """SI PONGO EXTERN CHAR CONST DATA[] SE PRODUCE UN ERROR..."""

Desconectado MTU

  • PIC10
  • *
  • Mensajes: 9
Re: Uso de extern en CCS
« Respuesta #3 en: 06 de Junio de 2009, 08:47:25 »
Gracias migsantiago, con lo que me dices he conseguido tener acceso a un array en memoria, ya es un avance. Pero al hacerlo con un array de constantes aun no me devuelve mas que ceros... La cosa es que se supone que deberia poder declarar el array dentro de la funcion como constante, sin embargo el CCS me devuelve un error si lo pongo como constante,, aunque lo ponga como extern parece que me invita a poner los valores del array pues en el error me dice "...expecting an =".

Entonces yo le sigo el juego al compilador y hago lo siguiente:
Código: [Seleccionar]
void funcion1 (void) {

 extern const char data[4]={0x45};
 int8 n;

 n=data[0]; //n toma el valor 0x45
 n=data[1]; //n toma el valor 0... a partir de aqui ya no hay otra cosa

}

char const data[4]={0x10,0x20,0x30,0x40};

Y lo curioso es que aunque parece que lo unico que vale para la funcion, lo unico que es capaz de leer, es el array constante definido dentro, si elimino la definicion que esta debajo de la funcion me devuelve un error porque "obviamente he declarado como extern un simbolo que no existe...". Todo tiene coherencia si no fuera porque no lee el array externo.. :(
Empiezo a pensar que quizas el CCS no pueda hacer esto por alguna razon.

Saludos.
« Última modificación: 06 de Junio de 2009, 09:17:37 por MTU »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Uso de extern en CCS
« Respuesta #4 en: 06 de Junio de 2009, 10:32:00 »
¿Y si lo declaras antes y afuera? No debes volver a declararlo porque data dentro de funcion1 sería una variable completamente nueva y que existiría mientras la funcion1 exista.

Código: [Seleccionar]
extern const char data[]={0x10,0x20,0x30,0x40};

void funcion1 (void) {
 int8 n;

 n=data[0]; //n toma el valor 0x45
 n=data[1]; //n toma el valor 0... a partir de aqui ya no hay otra cosa

}


Desconectado MTU

  • PIC10
  • *
  • Mensajes: 9
Re: Uso de extern en CCS
« Respuesta #5 en: 07 de Junio de 2009, 08:19:27 »
Si lo declaro arriba de la funcion ya no tengo porque poner Extern. Gracias de todas maneras Migsantiago, pero necesito ponerlo al final del programa y conseguir visibilidad, aunque creo que no voy a poder..

Saludos


 

anything