Autor Tema: Problemas al compilar con C30 Macros como _FBS.........  (Leído 2943 veces)

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

Desconectado alexiel

  • PIC10
  • *
  • Mensajes: 31
Problemas al compilar con C30 Macros como _FBS.........
« en: 07 de Mayo de 2010, 19:40:08 »
Hola a todos los integrantes del foro.
Tengo un problema al compilar. resulta que tenía el MPLAB 8.36 y me actualizé al 8.50, todo iba de lujo y me compilaba bien. Cuando hice un proyecto nuevo y lo compilé empezó el problema. Me da un error que no sé que es lo que pasa si toda la programación que manejé en el proyecto es igual a la que venía manejando. Resolví desistalar el MPLAB 8.50 e instalar el 8.36, pero me llevo con la sorpresa que el problema continuó, cargué un proyecto que había manejado antes sin problemas y lo compilé y me salió el mismo error. Que es el siguiente:
Citar
----------------------------------------------------------------------
Debug build of project `D:\Tesis\DsPIC\Pruebas de vuelo\2Prueba vuelo\baliza\baliza.mcp' started.
Language tool versions: pic30-as.exe v3.12, pic30-gcc.exe v3.12, pic30-ld.exe v3.12, pic30-ar.exe v3.12
Preprocessor symbol `__DEBUG' is defined.
Fri May 07 17:04:39 2010
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "D:\Tesis\DsPIC\Pruebas de vuelo\2Prueba vuelo\baliza\baliza.mcs".
Clean: Done.
Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=33FJ64GP802 -x c -c   "prueba2.c" -o"prueba2.o" -D__DEBUG -g -Wall
In file included from prueba2.c:5:
D:\Tesis\DsPIC\Funciones ToF\Funciones general\funciones.h: In function 'comunicar':
D:\Tesis\DsPIC\Funciones ToF\Funciones general\funciones.h:696: warning: format '%s' expects type 'char *', but argument 2 has type 'int'
prueba2.c:8: error: section attribute cannot be specified for local variables
prueba2.c:9: error: section attribute cannot be specified for local variables
prueba2.c:10: error: section attribute cannot be specified for local variables
prueba2.c:11: error: section attribute cannot be specified for local variables
prueba2.c:12: error: section attribute cannot be specified for local variables
prueba2.c:13: error: section attribute cannot be specified for local variables
prueba2.c:14: error: section attribute cannot be specified for local variables
prueba2.c:15: error: section attribute cannot be specified for local variables
prueba2.c:243: warning: 'main' is normally a non-static function
prueba2.c:381: error: syntax error at end of input
prueba2.c:43: warning: unused variable 'resultado'
prueba2.c:41: warning: unused variable 'tiempo1'
prueba2.c:40: warning: unused variable 'inc'
prueba2.c:40: warning: unused variable 'toggle'
prueba2.c:15: warning: unused variable '_FICD'
prueba2.c:14: warning: unused variable '_FPOR'
prueba2.c:13: warning: unused variable '_FWDT'
prueba2.c:12: warning: unused variable '_FOSC'
prueba2.c:11: warning: unused variable '_FOSCSEL'
prueba2.c:10: warning: unused variable '_FGS'
prueba2.c:9: warning: unused variable '_FSS'
prueba2.c:8: warning: unused variable '_FBS'
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `D:\Tesis\DsPIC\Pruebas de vuelo\2Prueba vuelo\baliza\baliza.mcp' failed.
Language tool versions: pic30-as.exe v3.12, pic30-gcc.exe v3.12, pic30-ld.exe v3.12, pic30-ar.exe v3.12
Preprocessor symbol `__DEBUG' is defined.
Fri May 07 17:04:40 2010
----------------------------------------------------------------------
BUILD FAILED
Cuando doy doble clikc en prueba2.c:8: error: section attribute cannot be specified for local variables  me lleva a _FBS( BWRP_WRPROTECT_OFF & BSS_NO_FLASH & RBS_NO_RAM ), el problema son las macros pero no sé si son en la definición o que. También genera un error en main pero ni idea que es.
Utilizo este codigo el cual es el que me genera error:
Código: C
  1. #include <p33FJ64GP802.h>
  2. #include "D:\Tesis\DsPIC\Funciones ToF\Funciones general\funciones.h"
  3.  
  4.         //CONFIGURATION BITS
  5. _FBS( BWRP_WRPROTECT_OFF & BSS_NO_FLASH & RBS_NO_RAM )                   
  6. _FSS( RSS_NO_RAM & SSS_NO_FLASH & SWRP_WRPROTECT_OFF )
  7. _FGS( GSS_OFF & GCP_OFF & GWRP_OFF )
  8. _FOSCSEL(FNOSC_PRIPLL & IESO_ON)                                                                // Primary oscillator (XT, HS, EC) w/ PLL, Two-speed Oscillator Startup : Enabled
  9. _FOSC(FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_XT )   // Clock switching and clock monitor:Disabled & Single configuration for remappable I/O:Disabled & OSC2 is clock O/P & XT oscillator
  10. _FWDT( FWDTEN_OFF & WINDIS_OFF )
  11. _FPOR( ALTI2C_OFF & FPWRT_PWR128 )
  12. _FICD( JTAGEN_OFF & ICS_PGD1 )
  13. //_FICD( BKBUG_ON & COE_ON & JTAGEN_OFF & ICS_PGD1 )
  14.        
  15. //--------------------------------------DEFINICION DE CONSTANTES-------------------------------------------------------------------
  16. #define MUESTRAS 1000                                   //total de muestras que se recogen en un tiempo de 206,1855us, su frecuencia es de 4850.
  17. #define MUESTRAS_ZERO   64                              //Muestras que se toman para el nivel zero.
  18. //----------------------------------------------------------------------------------------------------------------------------------
  19.  
  20.  
  21. /*Listado de funciones para prueba en baliza*/
  22. extern void UART_inic(void);
  23. extern void audio_4850(int PULSOS);                                                             //El valor de pulsos indica los pulsos que van a conformar el tren de senales.
  24. extern void TIMER3_inic(void);                                                                  //Se utiliza el timer3 para conteo de tiempo utilizado para para el ADC.
  25. extern void ADC_FS_29k_inic(void);
  26. //unsigned int signal[6] __attribute__(( space(xmemory),aligned(32) ));
  27. //-------------------------------------------------------------------------------------------------------------------------------
  28. /*Espacio para las variables*/
  29. int accion = 1,zero, control = 1, picos=0;
  30. int toggle=0,inc=0;
  31. unsigned int tiempo1 =0;                                                //Para contabilizar el tiempo que dura el proceso.
  32. char Buf1[4];
  33. unsigned int max[3]={1,1,1}, posicion[3]={2,2,2}, pos_gen=64, valor_ant[2]={0,0},resultado, tiempo=0;
  34. unsigned int vector[MUESTRAS];
  35.  
  36. __extension__ typedef struct {
  37.  union {
  38.    struct {
  39.      unsigned    bit0:1;
  40.      unsigned    bit1:1;
  41.      unsigned    bit2:1;
  42.      unsigned    bit3:1;
  43.      unsigned    bit4:1;
  44.      unsigned    bit5:1;
  45.      unsigned    bit6:1;
  46.      unsigned    bit7:1;
  47.      unsigned    bit8:1;
  48.      unsigned    bit9:1;
  49.      unsigned    bit10:1;
  50.      unsigned    bit11:1;
  51.      unsigned    bit12:1;
  52.      unsigned    bit13:1;
  53.      unsigned    bit14:1;
  54.      unsigned    bit15:1;
  55.    };
  56.    struct {
  57.      unsigned char  byte0;
  58.      unsigned char  byte1;
  59.    };
  60.    struct {
  61.      unsigned int  word;
  62.    };
  63.  };
  64. } My_Word;
  65.  
  66. My_Word dato,contador;
  67.  
  68. //---------------------------------- Funciones de interupcion ---------------------------------------------------------------------------------------
  69. void __attribute__((__interrupt__, shadow, no_auto_psv)) _T3Interrupt( void )
  70. {
  71.         IFS0bits.T3IF = 0;
  72.         contador.word++;
  73. }
  74.  
  75. /* This is UART1 transmit ISR */
  76. void __attribute__((__interrupt__, no_auto_psv)) _U2TXInterrupt(void)
  77. {  
  78.         IFS1bits.U2TXIF = 0;
  79. }
  80.  
  81. /* This is UART1 receive ISR */
  82. void __attribute__((__interrupt__, no_auto_psv)) _U2RXInterrupt(void)
  83. {
  84.         IFS1bits.U2RXIF = 0;
  85. }
  86. //-------------------------------------ISR del DAC//////
  87. void __attribute__((interrupt, no_auto_psv)) _DAC1RInterrupt(void)
  88. {
  89. IFS4bits.DAC1RIF = 0;           // Clear Right Channel Interrupt Flag
  90. }
  91. //---------------------------------------------------------------------------------------------------------------------------------------------------
  92. //-------------------------Funciones locales---------------------------------------------------------------------------------------------------------
  93. int zero_RMS(unsigned int *ptr_Valor)                                           //Funcion para hallar la referencia de cero, el valor promedio de los valores positivos. En esta tabla el 0 es 492
  94. {                                                                                                       //Calculamos el valor promedio por encima y por debajo del ruido con los primeros 270 datos.
  95.         int i;                                                                                  //tamaño es de 16 bits
  96.         unsigned long zero=0;                                                   //Se crean de tipo sin signo para que el valor maximo llegue hasta 65535
  97.         for (i=0;i<=(MUESTRAS_ZERO-1);i++)                              //Hallamos referencia de cero.  8 cycles
  98.         {
  99.                 zero = (unsigned long)*ptr_Valor + zero;                //6 cycles 0.15us
  100.                 ptr_Valor++;                                                                    //4 cycles
  101.         }                                                                                                       //TOTAL incremento i en el for = 8+6+4 = 18 cycles 0.45us
  102.         return (zero>>6);                                                                       //Los desplazamos a la derecha 6 posiciones de los bits para dividirlo en 2^6 = 64   //6 cycles 0.15us
  103. }                                                                                                               //6 cycles 0.15us
  104.  
  105. int max_min(int zero,unsigned int *ptr_gen, unsigned int *ptr_Valor, unsigned int *last_value)
  106. {
  107.         unsigned int i,Datos[8],pos;
  108.         pos = *ptr_gen;
  109.         Datos[0] = *last_value;
  110.         last_value++;
  111.         Datos[1] = *last_value;
  112.         for(i=1;i<=6;i++)
  113.         {
  114.                 Datos[i+1] = *ptr_Valor;
  115.                 ptr_Valor++;
  116.         }
  117.         for(i=1;i <= 6;i++)
  118.         {
  119.                 if( ((Datos[i] > zero) && Datos[i] >= Datos[i-1]) && (Datos[i] > Datos[i+1]) )                                                  //(Datos[i] > zero)&&
  120.                 {
  121.                         if(picos == 0)
  122.                         {
  123.                                 max[picos] = Datos[i];
  124.                                 posicion[picos] = pos;
  125.                                 picos++;
  126.                         }
  127.                         else if(picos == 1)
  128.                         {
  129.                                 //resultado = ( max[picos-1] + (unsigned int)(0.15 * max[picos-1]) );
  130.                                 if( ((pos - posicion[picos-1]) == 5) || ((pos - posicion[picos-1]) == 6) )
  131.                                 {
  132.                                         //resultado = pos - posicion[picos-1];
  133.                                         if( Datos[i] > ( max[picos-1] + (unsigned int)(0.12 * max[picos-1]) ) )
  134.                                         {                                      
  135.                                                 max[picos] = Datos[i];
  136.                                                 posicion[picos] = pos;
  137.                                                 picos++;
  138.                                         }
  139.                                 }      
  140.                                 else
  141.                                 {
  142.                                         picos=0;
  143.                                         max[picos] = Datos[i];
  144.                                         posicion[picos] = pos;
  145.                                         picos++;
  146.                                 }
  147.                         }
  148.                         else if(picos == 2)
  149.                         {
  150.                                 //resultado = pos - posicion[picos-1];
  151.                                 if( ((pos - posicion[picos-1]) == 5) || ((pos - posicion[picos-1]) == 6) )
  152.                                 {
  153.                                         if(Datos[i] > max[picos-1])
  154.                                         {
  155.                                                 max[picos] = Datos[i];
  156.                                                 posicion[picos] = pos;
  157.                                                 return 0;
  158.                                         }
  159.                                         picos = 0;
  160.                                         max[picos] = Datos[i];
  161.                                         posicion[picos] = pos;
  162.                                         picos++;
  163.                                 }
  164.                                 else
  165.                                 {
  166.                                         picos = 0;
  167.                                         max[picos] = Datos[i];
  168.                                         posicion[picos] = pos;
  169.                                         picos++;
  170.                                 }
  171.                         }
  172.                 }      
  173.                 pos++;
  174.         }
  175.         *last_value = Datos[7];
  176.         last_value--;
  177.         *last_value = Datos[6];
  178.         *ptr_gen = pos;
  179.         return 1;      
  180. }
  181.  
  182. //---------------------------------------------------------------------------------------------------------------------------------------------------
  183. int main (void)
  184. {
  185.         int i,control_recibido = 0;
  186.         //unsigned int nivel=0;
  187.         char Buf[3];
  188.         contador.byte1 = 0x00;
  189.         contador.byte0 = 0x00;
  190.         TRISBbits.TRISB15 = 0;
  191.         // Oscillator Special Function Control Registers
  192.         // Configure Oscillator to operate the device at 40MIPS
  193.         // Fosc= Fin*M/(N1*N2), Fcy=Fosc/2 (XT=8MHz)
  194. PLLFBD = 38;                            // PLL Feedback Divisor bits (also denoted as "M", PLL multiplier) 38 = 40
  195. CLKDIVbits.PLLPRE = 0;          // PLL Phase Detector Input Divider bits (also denoted as "N1", PLL prescaler) 0 = 2
  196. CLKDIVbits.PLLPOST = 0;         // PLL VCO Output Divider Select bits (also denoted as "N2", PLL postscaler) 0 = 2
  197. //CLKDIVbits.FRCDIV = 0;        // Internal Fast RC Oscillator Postscaler bits
  198. CLKDIVbits.DOZEN = 0;           // DOZE Mode Enable bit 0 = Processor clock/peripheral clock ratio forced to 1:1
  199. //CLKDIVbits.DOZE = 0;          // Processor Clock Reduction Select bits = FCY/1
  200. CLKDIVbits.ROI = 0;                     // Recover on Interrupt bit 0 = Interrupts have no effect on the DOZEN bit
  201. //OSCTUNbits.TUN = 0;           // FRC Oscillator Tuning bits = Center frequency (7.37 MHz nominal)
  202. RCONbits.SWDTEN = 0;            // Disable watch dog timer
  203. //---------------------------------------------------------------------------------------------------------------------------------------------
  204. UART_inic();                                                                                    //83346 cycles 2.08365ms
  205. ADC_FS_29k_inic();                      //Hasta aqui 1.719475ms         //Inicializamos el ADC demora de la funcion 55 cycles
  206.  
  207. ADC_FS_29k(MUESTRAS_ZERO,&vector[0]);                                   //Recogemos las muestras del ambiente
  208. zero = zero_RMS((unsigned int *) vector);                               //1167 cycle 29.175us
  209.                                                                                
  210.         while(control)
  211.         {
  212.                 control = max_min(zero,&pos_gen,&vector[pos_gen],(unsigned int*)valor_ant);
  213.                 if(pos_gen >= 1450)
  214.                 {
  215.                         control =0;
  216.                 }
  217.         }
  218.  
  219.         while(accion)
  220.         {
  221.                 while(U2STAbits.URXDA)                                                  //Bit de control que le dice cuando hay un dato en el buffer de RX
  222.         {
  223.                         Buf[0] = ReadUART2();
  224.                         Buf[1] = '\0';                                                          //Este retorno de carro es para avisar que es el ultimo dato en el buffer
  225.                         control_recibido = 1;
  226.         }
  227.         if(control_recibido == 1)
  228.                 {
  229.                         if(Buf[0] == 'm')
  230.                         {
  231.                         //      TIMER3_inic();
  232.                                 accion = 0;
  233.                         }
  234.                         else
  235.                         {
  236.                                 printf("%s",Buf);
  237.                                 control_recibido = 0;
  238.                         }
  239.                 }
  240.         }
  241.  
  242.         for(i=0;i<MUESTRAS;i++)
  243.         {
  244. //              printf("%u\r",signal[i]);
  245.                 dato.word = vector[i];                                                                  //Para el envio de Matlab no se utiliza printf para enviar datos.
  246.                 Buf1[0] = dato.byte1;
  247.                 Buf1[1] = dato.byte0;
  248.                 Buf1[2] = '\0';
  249.                 U1STAbits.UTXEN = 1;                                    //Activar interupcion
  250.                 __delay_us(200);                                                //espero 1/Baudios
  251.                 putsUART2 ((unsigned int *)Buf1);               //Funcion de tranmision
  252.                 while(BusyUART1());                                             //esperar un tiempo para estabilizacion de transmision
  253.         }
  254.  
  255.         accion = 1;
  256.         control_recibido = 0;
  257.         while(accion)
  258.         {
  259.                 while(U2STAbits.URXDA)                                                  //Bit de control que le dice cuando hay un dato en el buffer de RX
  260.         {
  261.                         Buf[0] = ReadUART2();
  262.                         Buf[1] = '\0';                                                          //Este retorno de carro es para avisar que es el ultimo dato en el buffer
  263.                         control_recibido = 1;
  264.         }
  265.         if(control_recibido == 1)
  266.                 {
  267.                         if(Buf[0] == 'p')
  268.                         {
  269.                         //      TIMER3_inic();
  270.                                 accion = 0;
  271.                         }
  272.                         else
  273.                         {
  274.                                 printf("%s",Buf);
  275.                                 control_recibido = 0;
  276.                         }
  277.                 }
  278.         }
  279.  
  280.         tiempo = posicion[1];
  281.         //              printf("%u\r%u\r",max[i],posicion[i]);
  282.         dato.word = tiempo;                                                                     //Para el envio de Matlab no se utiliza printf para enviar datos.
  283.         Buf1[0] = dato.byte1;
  284.         Buf1[1] = dato.byte0;
  285.         Buf1[2] = '\0';
  286.         U1STAbits.UTXEN = 1;                                    //Activar interupcion
  287.         __delay_us(200);                                                //espero 1/Baudios
  288.         putsUART2 ((unsigned int *)Buf1);               //Funcion de tranmision
  289.         while(BusyUART1());                                             //esperar un tiempo para estabilizacion de transmision
  290.  
  291. //      DAC_FS_39k_inic();
  292. //      audio_4850(1);
  293. while(1){}
  294. }

Como el problema es en las macros, fuí a configurarlo por medio de bits y no estan definidos en el p33FJ64GP802.h. Busqué si alguien tenia el mismo problema y no encontré, por eso decidí abrir un nuevo tema, si la solución está en otro tema por favor les agradecería que me informaran, o si a alguien le ha ocurrido y ha encontrado la solución sería de mucha ayuda. De antemano gracias por las ayudas prestadas.

Desconectado alexiel

  • PIC10
  • *
  • Mensajes: 31
Re: Problemas al compilar con C30 Macros como _FBS.........
« Respuesta #1 en: 08 de Mayo de 2010, 12:45:13 »
señores del foro, ya solucioné el problema..... No me había fijado que al inicio donde dice los errores que tengo del proyecto, dice que tenía un problema en la función comunicar que esta en un archivo que yo incluyo.....Habiendo un problema de asociación de llaves {}} y por eso después de incluir el archivo en el código principal salía error. Revisé minuciosamente eso. Otra cosa para no tener otra vez ese tipo de problemas, he visto que se puede visualizar un menos(-) o un mas(+) asociado con las llaves que uno abra {{{, siendo esto la solución del problema descrito :oops:, como se ve en la imagen adjunta. Se habilita en EDIT\PROPERTIES\en la pestaña 'C' FILE TYPES, click en Enable code Folding.