TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: manex_1987 en 19 de Marzo de 2007, 08:24:58
-
Hola!
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.
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!
-
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.
-
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.
a=20;
b=10;
do
{
glcd_pixel(a,b,ON);
b++;
}while(b<=30);
No muestra ninguna linea en el LCD.
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???