Autor Tema: Enviar un array de dos valores a una función  (Leído 2192 veces)

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

Desconectado raulval82

  • PIC10
  • *
  • Mensajes: 14
Enviar un array de dos valores a una función
« 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.
« Última modificación: 31 de Mayo de 2011, 08:54:06 por raulval82 »

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Enviar un array de dos valores a una función
« Respuesta #1 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=12356.0

Desconectado raulval82

  • PIC10
  • *
  • Mensajes: 14
Re: Enviar un array de dos valores a una función
« Respuesta #2 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.

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Enviar un array de dos valores a una función
« Respuesta #3 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

Desconectado raulval82

  • PIC10
  • *
  • Mensajes: 14
Re: Enviar un array de dos valores a una función
« Respuesta #4 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.