TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: raulval82 en 31 de Mayo de 2011, 08:46:57

Título: Enviar un array de dos valores a una función
Publicado por: raulval82 en 31 de Mayo de 2011, 08:46:57
Buenas a todos, tengo funcionando un pequeño programita en CCS para un 18F4550 que dependiendo del valor que le llega por RS232 muestra una pantalla u otra por el GLCD (fast_glcd encendido). Lo tengo funcionando con las pantallas definidas en global y una función para cada una. Así llamo a la función de la imagen que quiero mostrar y punto. Ahora quiero dejarlo algo más "aseado" y lo que quiero hacer es una única función a la que se le envía la imagen a mostrar... no se en que me estoy equivocando, a ver si alguien me puede ilustrar...

Código: [Seleccionar]

void glcd_imagen(const int8 imagenx[64][16]) //el error me lo da en esta línea: expecting an identifier y unos cuantos errores más
{
 
   char i,j;
   signed char k;
  
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
  
   for( i = 0 ; i < 64 ; i ++ )
   {  
      for( j = 0 ; j < 16 ; j ++)
      {    
         for(k=7;k>-1;k--)
         {      
            if( bit_test(imagenx[i][j] ,7-k ))
               glcd_pixel( j*8+k,i, ON );
            
              
         }  
      }
   }
}

void main()
{

char pantalla[3];
int numpant;

const int8 imagen_1[64][16] = {
/*
OMITO ESTE CODIGO YA QUE SIMPLEMENTE SON LAS IMAGENES...
*/

glcd_init(ON);   // INICIAMOS EL LCD
glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
    
while(TRUE){

            get_string(pantalla,3);   //LEEMOS LA PANTALLA QUE NOS ENVÍA EL PLC.
            numpant = atoi(pantalla);  //PASAMOS EL STRING A UN ENTERO.
            delay_ms(100);

            switch(numpant)            //DEPENDIENDO DEL NUMERO DE PANTALLA RECIVIDO, MOSTRAREMOS UNA IMAGEN U OTRA.
                     {
                     case 1:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_1);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 2:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_2);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 3:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_3);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 4:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_4);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 5:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_5);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 6:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_6);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 7:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_7);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 8:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_8);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 9:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_9);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 10:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_10);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 11:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_11);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 12:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_12);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 13:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_13);
                     glcd_update();
                     delay_ms(100);
                     break;
                    
                     case 14:
                     glcd_fillScreen(0); //LIMPIAMOS LA PANTALLA
                     glcd_imagen(imagen_14);
                     glcd_update();
                     delay_ms(100);
                     break;                    
                    
                     default:
                     break;
                     }
          }
}



Si creeis que hay más cosas a mejorar se aceptan sugerencias xD.

Un saludo y muchas gracias.
Título: Re: Enviar un array de dos valores a una función
Publicado por: pablomanieri en 31 de Mayo de 2011, 09:05:56
El CCS no admite punteros a constantes.
Busca en el foro, ya se habló del tema

http://www.todopic.com.ar/foros/index.php?topic=16226.0 (http://www.todopic.com.ar/foros/index.php?topic=16226.0)
http://www.todopic.com.ar/foros/index.php?topic=12356.0 (http://www.todopic.com.ar/foros/index.php?topic=12356.0)
Título: Re: Enviar un array de dos valores a una función
Publicado por: raulval82 en 31 de Mayo de 2011, 11:52:45
Hola, disculpa las molestias, te aseguró que he buscado por el foro, el problema es que lo que falla no es lo que yo creía, de ahí que no lo haya encontrado.

Gracias y un saludo.
Título: Re: Enviar un array de dos valores a una función
Publicado por: pablomanieri en 31 de Mayo de 2011, 12:06:24
No hay nada que disculpar, lo que quise decir es que busques en el foro el tema de punteros a constantes en CCS.  :).
Supongo que por ahí debe venir el problema.

Saludos
Título: Re: Enviar un array de dos valores a una función
Publicado por: raulval82 en 02 de Junio de 2011, 12:55:50
Al final, después de mucho mirar, no he encontrado solución, me ha tocado dejarlo como lo tenía, ya que se supone que en las nuevas versiones de CCS está arreglado pero no es así...

Saludos.