TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: elnina en 30 de Abril de 2009, 07:41:10

Título: errores de compilacion raro raro
Publicado por: elnina en 30 de Abril de 2009, 07:41:10
Buenasss,

Estoy haciendo mi proyecto fin de carrera y me esta siendo de gran utilidad el foro.  :mrgreen:
Lo que ocurre que no tengo experiencia en PICS, pero si en microcontroladores. El software nuevo, HW tb nuevo, bueno ya me entendeis...

Al grano, estoy intentando compilar mi programa.c, que claro me da errores, pero lo mas curioso es que me da errores en la libreria del lcd.c, libreria que no he tocado y es la que viene con el programa. Uso la version CCS 4.016.

Os los muestro:

*** Error 91 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(6,7): Expression must be a constant or simple variable
*** Error 48 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(12,27): Expecting a (
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(28,29): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(29,30): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(31,32): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(33,34): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(34,38): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(39,40): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(41,42): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(50,51): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(51,53): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(54,55): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(55,56): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(56,57): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(58,61): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(61,62): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(63,64): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(64,65): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(66,67): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(67,68): Expecting a declaration
*** Error 43 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 64(68,69): Expecting a declaration
*** Error 12 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 79(29,30): Undefined identifier   set_tris_d
*** Error 12 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 91(30,31): Undefined identifier   set_tris_d
*** Error 12 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 121(28,29): Undefined identifier   set_tris_d
*** Error 12 "C:\Archivos de programa\PICC\drivers\LCD.C" Line 132(24,39): Undefined identifier   LCD_INIT_STRING

Gracias chicos  8)
Título: Re: errores de compilacion raro raro
Publicado por: AKENAFAB en 30 de Abril de 2009, 10:02:20
Hola

Asi esta dificil ayudarte!

Sube tu programa para ver que puede andar el error.

Tengo entendi que a mucho les ha dado problemas la libreria que trae por default.

Por lo meno seso han comentado algunos.

Un saludo!
Título: Re: errores de compilacion raro raro
Publicado por: migsantiago en 30 de Abril de 2009, 12:14:19
Parece que estás usando un pic que no tiene puerto d.

Intenta con esto:

#define use_portb_lcd TRUE
#include <lcd.c> //libreria manejo de la lcd
Título: Re: errores de compilacion raro raro
Publicado por: elnina en 01 de Mayo de 2009, 20:27:44
Pues no resulta, mi programa no tiene nada que ver, me dan errores de la libreria del LCD
estas son las lineas de la libreria que me dan errores:

BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};   //Linea 64

BYTE lcd_read_byte() {
      BYTE low,high;
      set_tris_lcd(LCD_READ); //Linea 79

      set_tris_lcd(LCD_WRITE); //Linea 91

    for(i=0;i<=3;++i)
       lcd_send_byte(0,LCD_INIT_STRING); //Linea 132

Gracias  :)
Título: Re: errores de compilacion raro raro
Publicado por: AKENAFAB en 01 de Mayo de 2009, 21:33:50

Bueno , si ya sabes que tu programa no es ta vez te interese otra libreria.

La subo.

Se llama Flex_LCD.

Título: Re: errores de compilacion raro raro
Publicado por: elnina en 05 de Mayo de 2009, 14:08:55
ok, solucionado
Título: Re: errores de compilacion raro raro
Publicado por: AKENAFAB en 05 de Mayo de 2009, 20:02:33

Ok que bueno , muy bien , etc...

Podrias compartir como fue que lo solucionaste o si era otro error??



Un saludo!

ay ayy!
Título: Re: errores de compilacion raro raro
Publicado por: cocobongo en 31 de Julio de 2009, 23:37:30
Hola!!

Este es mi primer comentario, debo decir que en estos foros eh resuelto muchas dudas sobre el mundo de la programacion de PIC's.

Bueno al grano, yo tube un problema parecido y debo decir que migsantiago tiene razon, el problema por lo que aparecen esos errores en el driver <LCD.C> es por que el PIC que se desea utilizar es un PIC que no tiene puerto d, en mi caso yo use el PIC16F876. Se puede observar esto al inicio del driver en el cual se declaran los set_tris_d de READ y WRITE del LCD, al buscarlos en el dispositivo y no encontrarlos marca un error de operación.

No eh probado la FLEX_LCD pero con colocar el #define use_portb_lcd TRUE antes de mandar a llamar el driver de lcd.c funcionará.

Saludos desde el IPN México!!!
Título: Re: errores de compilacion raro raro
Publicado por: FAEC en 03 de Junio de 2010, 06:31:43
Hola a todos. La verdad soy nuevo en esto de dejar mensajes en un foro. Me gustaría mucho si ustedes me pudieran ayudar a saber el error que me produce mi programa en PICC al compilarlo. Estoy intentando hacer una matriz de leds 3x3x3 con un 16F873a pero al compilarlo me sale este error: ***Error 58"main.c" Line 64(30,33):Expecting a close paren. Aquí esta el código:

Citar
#include <16f873a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NOBROWNOUT
#use delay(clock=4000000)
#byte PORTA=0x05
#byte PORTB=0x06
#byte PORTC=0x07
#byte TRISA=0x85
#byte TRISB=0x86
#byte TRISC=0x87

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)

#define LED PIN_A4 //led de estado

// Mascaras para seleccion de capa
#define LAYER1 0x01
#define LAYER2 0x02
#define LAYER3 0x04
#define LAYERS 0x07 // todas las capas prendidas
#define LAYERS_R 0xf8 // todas las capas apagadas
#define LAYER_PORT PORTA //puerto de control de capa

// puertos de malla
#define GRID1 PORTB
#define GRID2 PORTC

void ioinit (void); // inicializacion de IO
void bootmsg (void); // mensaje de reset

volatile unsigned char cube[3][3];   // buffer del cubo
volatile unsigned char tmpcube[3][3];   // buffer auxiliar
volatile unsigned char current_layer;   // capa q se esta mostrando actualmente

#include "draw.c"   // primitivas de dibujo
#include "effect.c"   // animaciones

void main()
{
   int i,j,k;
   ioinit();
   bootmsg();

   current_layer=0x00;   // comenzamos a dibujando la capa 0
   enable_interrupts(GLOBAL);   //comenzamos a dibujar el buffer en el cubo
   
   fill(0x00);
   while(TRUE)
   {
      effect_rain(10,300,500,200);   <------ Aca es donde me aparece el error :S
      random_2();
      random_filler (2, 27, 50);
      loadbar(100);
      flyplanes(10, 100);
      for(i=0;i<3;i++);
         for(j=0;j<3;j++);
             for(k=0;k<3;k++);
            {
               negpixel(i,j,k);
               delay_ms(30);
            }
   }
}


// Rutina de dibujo del cubo
#INT_TIMER0
void timer0_isr()
{

   // apagamos todas las capas para q no se vea la actualizacion
   LAYER_PORT &= LAYERS_R;

   // dibujamos la imagen correspondiente a la capa actual
   GRID1 = (0x07 & cube[current_layer][0]) | (0x38 & (cube[current_layer][1] << 3));
   GRID2 = (0x07 & cube[current_layer][2]);
   
   // activamos la capa correspondiente
   LAYER_PORT |= (0x01 << current_layer);

   // si llegamos a la ultima capa, volvemos a empezar
   if (current_layer++ == 2)
      current_layer = 0;
}

void ioinit(void)

   //puertos A, B, y C como salida
   TRISA = 0x00;   // seleccion de capa y luces de control
   TRISB = 0x00;   // malla1
   TRISC = 0x00;   // malla2
   //todos los puertos apagados
   PORTA = 0x00;
   PORTB = 0x00;
   PORTC = 0x00;

   // inicializamos el timer
   setup_counters(rtcc_internal , rtcc_div_8);
   enable_interrupts(INT_TIMER0);
   disable_interrupts(GLOBAL);
}

// el led de estado parpadea un par de veces para indicar q se inicio el programa
void bootmsg(void)
{
   int i=3;
   while(i--)
   {
      output_bit(LED, 1);
      delay_ms(100);
      output_bit(LED, 0);
      delay_ms(100);
   }
}

Por favor, agradeceria mucho si me colaboran con esto lo antes posible!! La verdad he intentado de todo y no se me quita ese error. Muchas gracias de antemano.
Título: Re: errores de compilacion raro raro
Publicado por: AngelGris en 03 de Junio de 2010, 09:31:02
Hola Faec, creo que deberías haber creado un nuevo tema con tu consulta como para mantener todo más ordenado. Ya me dirán si estoy equivocado o no.

Pasando a tu consulta, parecería ser que el compilador está esperando ")" y se encuentra con otra cosa. ¿Por casualidad no le estarás pasando más parámetros a la función de los que realmente necesita?
Título: Re: errores de compilacion raro raro
Publicado por: FAEC en 03 de Junio de 2010, 13:33:55
Hola AngelGris. Yo se que debí haber creado un nuevo tema, pero la verdad es que cuando lo fuí a crear me decía que no tenía la experiencia o algo asi, para crear un tema XD .. bueno con respecto al código ... parece que si le meti mas parámetros de lo que pensé, porque al compilarlo, al quitarle  un valor en esa línea me lo hace normal y es que necesito de 4 valores para las caras del cubo, para que se vea el efecto ... sin embargo me gustaría si alguien tiene el PICC lo compilase tambien para ver si depronto es mi compilador el que falla. Gracias por la ayuda!!
Título: Re: errores de compilacion raro raro
Publicado por: AngelGris en 03 de Junio de 2010, 15:21:30
El tema me parece que pasa por ver como está definida la función effect_rain.

El error parecería indicar que la función podría estar definida, por ejemplo,  void effec_rain(int, int, int); Es decir, con 3 valores como parámetros. Por tal motivo, cuando vos le querés pasar 4 valores te indica que estaba esperando un ")".
Título: Re: errores de compilacion raro raro
Publicado por: FAEC en 07 de Junio de 2010, 15:35:01
Bueno AngelGris, ya la compilación me dá, en definitiva si estaba usando un parametro de mas   c(:    monte el circuito pero al energizarlo no me funciona. Al principio crei que era el PIC el que se habia dañado, asi que lo cambie por un 16F877 y tampoco, luego hice algunas pruebas sencillas como prender y apagar leds para ver si era error al quemar el PIC pero los dos PICs estan funcionando bn .. XD .. la verdad no se donde esta el error, sin embargo aca les adjunto la simulacion en proteus con su respectivo codigo y librerias para ver si me pueden ayudar con este problemilla .. gracias!!!
Título: Re: errores de compilacion raro raro
Publicado por: AngelGris en 07 de Junio de 2010, 21:24:17
Todavía no miré el código pero puedo ver en el proteus que te faltan resistencias limitadoras para los leds. Yo haría más grande las resistencias de base de los transistores las podés llevar tranquilamente a 4K7 (ya que la base de los transistores casi no consumen corriente) y tendrías que poner una resistencia entre cada puerto de salida y el ánodo de cada led (ahí sí iria de 220 ohm) porque sino ponés resistencia limitadora corrés el riesgo de quemar el PIC. Los puertos manejan aproximadamente 25mA (consulta el datasheet para una mejor información)
Título: Re: errores de compilacion raro raro
Publicado por: oxanderv en 21 de Agosto de 2010, 12:14:57
Hola a todos primero que nada quiero felicitarlos por estos foros que son de gran ayuda para personas como yo que estamos iniciando en esto de la programacion.
Acudo a ustedes pues me encuentro a aprendiendo a programar y en estos momentos paso al manejo de LCD, desarroye el programa pero al momento de compilarlo genera el error 43 expecting a declaration; descargue el fichero FLEX_LCD pero me genero mas errores asi que decidi seguir trabajando con el fichero LCD.C y hacer lo que publico cocobongo puesto a que es muy similar el problema que tengo con el caso que el plantea.
 
La cantidad de errores disminuye considerablemente pero aun me sigue generando (expecting a declaration); anexo el programa para que le den un vistazo.
De antemano agradezco la atencion prestada, cualquier comentario sera bien recibido pues es la primera vez que hago una publicacion y no se si este bien hecha. 

"Bueno al grano, yo tube un problema parecido y debo decir que migsantiago tiene razon, el problema por lo que aparecen esos errores en el driver <LCD.C> es por que el PIC que se desea utilizar es un PIC que no tiene puerto d, en mi caso yo use el PIC16F876. Se puede observar esto al inicio del driver en el cual se declaran los set_tris_d de READ y WRITE del LCD, al buscarlos en el dispositivo y no encontrarlos marca un error de operación.

No eh probado la FLEX_LCD pero con colocar el #define use_portb_lcd TRUE antes de mandar a llamar el driver de lcd.c funcionará."

#include <16f876.h>
#fuses XT, NOWDT
#use delay ( clock = 4000000)
#define use_portb_lcd TRUE
#include <lcd.c>
#use standard_io(B)
#use standard_io(A)

   enum funciones {med,cal,ini};      //Asigna un valor a cada elemento
                                      //med=0, cal=1, e ini=2

void medir (void){                     //funcion de medir
                                       //algoritmo correspondiente
output_toggle(pin_B0);
}
void calibrar(void){                   //funcion de calibrar
                                       //algoritmo correspondiente
output_toggle(pin_B1);
}
void inicializar (void){              //funcion de inicializar
                                      //algoritmo correspondiente
output_toggle(pin_B2);
}
void run_func(int numfunc){            //asignacion de la funcion a realizar
                                       //viene dada por la variable "item"
        switch(numfunc) {
           case med:
             medir();
             break;
           case cal:
             calibrar();
             break;
           case ini:
             inicializar();
             break;
        }
}

void main() {
     char item;                     //variables de funciones

     char n_menus = 3;               //numero de funciones
                                    // bit_set(TRISA,0);
     lcd_init();

 while (1)  {
    if (input(PIN_A0) == 1 ) {     //detecta el boton de seleccion
       item++;                     //si pulsa aumenta la variable
       delay_ms(300);               //para evitar rebotes
       lcd_putc('\f');      }

    if (item > (n_menus=3))  {      //si la variable supera el numero de
        item=0 ;}                   //funciones la inicializa

   switch (item)  {

         case 0:
            lcd_gotoxy(1,1);
            printf(lcd_putc, "MEDRIR");
            lcd_gotoxy(1,1);
            break;

         case 1:
            printf(lcd_putc, "CALIBRAR");
            lcd_gotoxy(1,1);
            break;

         case 2:
            printf(lcd_putc, "INICIALIZAR");
            lcd_gotoxy(1,1);
            break;
   }
 if (input(PIN_A1) == 1)            //Si se pulsa el boton seleccion....
     {delay_ms(200);
     run_func(item);}               //Se llama la funcion correspondiente
 }
}

[/quote]
Título: Re: errores de compilacion raro raro
Publicado por: bmb en 21 de Agosto de 2010, 14:22:23
Hola oxanderv, bienvenido al foro. Te pregunto:  Que compilador estás usando?; lo acabo de compilar con CCS V4.106 y compila sin errores.  Lo que si me da es un warning en esta línea:
 if (item > (n_menus=3))
 en donde estás asignando un valor dentro de una expresión relacional. Tal vez deberia ser asi:
 if (item > (n_menus==3))

P.D. sería mejor si abrieras el tema en un nuevo hilo; así más gente podría ayudarte...

Saludos!
Título: Re: errores de compilacion raro raro
Publicado por: oxanderv en 23 de Agosto de 2010, 21:45:01
Saludos bmb, el compilador que tengo es el (CCS C Compiler V4.014).
Me pondre a la tarea de crear un nuevo hilo, no he encontrado la opcion  :oops:.
Gracias por la atencion.