TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: manex_1987 en 19 de Marzo de 2007, 08:24:58

Título: Funciones y punteros... esto no funciona con variables!
Publicado por: manex_1987 en 19 de Marzo de 2007, 08:24:58
Hola!

Código: [Seleccionar]
void glcd_pixelA(int8 x, int8 y, int1 color)

#ifdef FAST_GLCD
{
   int8 *p;
   int16 temp;
   temp =  y/8;
   temp *= 64;
   temp += x;

   if(x > 63)
   {
      p = displayData.right + temp - 64;
   }
   else
   {
      p = displayData.left + temp;
   }

   if(color)
   {
      bit_set(*p, y%8);
   }
   else
   {
      bit_clear(*p, y%8);
   }
}

Bueno, os comento, es una rutina de GLCD. La cuestion es, que funciona bien cuando pongo  glcd_pixelA(20,20,1) , y si hago x=20 e y=20, y luego pongo glcd_pixelA(x,y,1)  tambien funciona.

Pero si pongo un bucle FOR cambiando los valores de x e y, e invocando la funcion cada vez, no funciona.

Código: [Seleccionar]
x=20;
for(y=1;y<=20;y++)
{
glcd_pixel(x,y,1);
}

Cuestion de punteros? No tengo ni idea. Espero que podais ayudar. Un saludo!
Título: Re: Funciones y punteros... esto no funciona con variables!
Publicado por: maunix en 19 de Marzo de 2007, 10:29:10
Cuestion de punteros? No tengo ni idea. Espero que podais ayudar. Un saludo!

Si te funciona enviando los datos por separado y no en un bucle, yo sospecharía de que hay algún "timing" que respetar o algo por el estilo.

Los punteros en cuestión son declarados dentro de la función y si con los extremos de la declaración funciona bien no me parece que esté ahí el problema.

Título: Re: Funciones y punteros... esto no funciona con variables!
Publicado por: manex_1987 en 19 de Marzo de 2007, 11:23:22
No es problema de timing, pues puedo poner tres glcd_pixelA seguidos, con numeros en vez de variables, y va a la perfeccion.

Ademas, me he fijado en lo siguiente:

si pongo a=20 y b=10,  e invoco  glcd_pixelA(a,b,ON) funciona. Pero si pongo  glcd_pixelA(a+1,b+1,ON) ya no va. En cambio, si pongo glcd_pixelA(a*2,b*2,ON) si que funciona.

Bug del compilador? Me tienen harto los de ccs. Cada vez me veo mas cerca de C18, lo juro.



PD: Mas risas.

Código: [Seleccionar]
a=20;
b=10;
do
{
glcd_pixel(a,b,ON);
b++;
}while(b<=30);
No muestra ninguna linea en el LCD.
Código: [Seleccionar]
a=20;
b=10;
do
{
b++;
glcd_pixel(a,b,ON);
}while(b<=30);
Este codigo en cambio si. Se me esta riendo el compilador???