Autor Tema: MPlab + CCS Compiler: Error de compilación  (Leído 2018 veces)

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

Desconectado joseluislo12

  • PIC10
  • *
  • Mensajes: 20
MPlab + CCS Compiler: Error de compilación
« en: 09 de Diciembre de 2016, 18:01:34 »
Buenos días

Instalé MPlab X V3.45 y descargué el plugin CCS Compiler V3.8 (tengo instalado en mi pc el CCS C Compiler V5.0115 registrador por KGG).

Creé un nuevo proyecto en el directorio por defecto que trae el programa y creé un nuevo Source File. Adicionalmente haciendo clic derecho en el nombre del proyecto y siguiendo la ruta Properties -> CCS C Compiler -> Compiler Options -> Include Directories agregué las carpetas DEVICES y DRIVERS de la carpeta raíz al instalar el PIC C en el pc.

El programa que estoy haciendoes el siguiente:

Código: [Seleccionar]
#include <16F1827.h>
#FUSES NOWDT, NOPUT, PROTECT, NOMCLR, NOCLKOUT, NOCPD, NOBROWNOUT, PLL, INTRC_IO,
#use delay(clock=4M)

#define EEPROM_SELECT      PIN_A0
#define EEPROM_CLK         PIN_B4
#define EEPROM_DI          PIN_B1
#define EEPROM_DO          PIN_B2

#define LCD_DB4            PIN_A7
#define LCD_DB5            PIN_B7
#define LCD_DB6            PIN_B6
#define LCD_DB7            PIN_B5
#define LCD_RS             PIN_A1
#define LCD_E              PIN_A6

#define SELECT             PIN_A4
#define LED                PIN_B3

#define PIN_TRANS          PIN_A3

#define RC5                1
#define SIRC               2

#include <eeprom25040.c>
#include <lcd_lib.c>

int freq, quanty = 0;
int ord_zero, zero_l1, zero_l2, zero_h1, zero_h2 = 0;
int ord_one, one_l1, one_l2, one_h1, one_h2 = 0;
int data[22][7] = {0};

int frequency_h, frequency_l;
int quant_total;
int16 t_zero_l, t_zero_h;
int16 t_one_l, t_one_h;
int16 t_start_l, t_start_h;

int pos, pos2;
int value, value_1, value_2;

int16 aux;
int16 address_H, address_L;
int16 comand, ncomand;
int toggle = 0;
int invert_zero, invert_one;

int FLAG_EXT=0;
#INT_EXT
void ext_int(){
   FLAG_EXT=1;
}

void protocol(int prot){
   switch(prot){
      case RC5:
         freq = 0;
         quanty = 4;
         
         ord_zero = 1;
         one_l1 = make8(889,0);
         one_l2 = make8(889,1);
         one_h1 = make8(889,0);
         one_h2 = make8(889,1);
         
         ord_one = 0;
         zero_l1 = make8(889,0);
         zero_l2 = make8(889,1);
         zero_h1 = make8(889,0);
         zero_h2 = make8(889,1);
         
         data[0][0] = 0;         // Ord
         data[0][1] = 0b0;         // Type
         data[0][2] = 2;         // quant
         
         data[1][0] = 1;
         data[1][1] = 0b010;
         data[1][2] = 1;
         
         data[2][0] = 1;
         data[2][1] = 0b011;
         data[2][2] = 5;
         
         data[3][0] = 1;
         data[3][1] = 0b100;
         data[3][2] = 6;
      break;
      case SIRC:
         freq = 1;
         quanty = 4;
         
         ord_zero = 1;
         one_l1 = make8(600,0);
         one_l2 = make8(600,1);
         one_h1 = make8(600,0);
         one_h2 = make8(600,1);
         
         ord_one = 1;
         zero_l1 = make8(600,0);
         zero_l2 = make8(600,1);
         zero_h1 = make8(1200,0);
         zero_h2 = make8(1200,1);
         
         data[0][0] = 0;            // Ord
         data[0][1] = 0b000;        // Type
         data[0][2] = 1;             // quant
         
         data[1][0] = 0;
         data[1][1] = 0b100;
         data[1][2] = 7;
         
         data[2][0] = 0;
         data[2][1] = 0b011;
         data[2][2] = 12;
         
         data[3][0] = 0;
         data[3][1] = 0b001;
         data[3][2] = 1;
      break;
   }
}

void write(){
   if(FLAG_EXT==1){
      FLAG_EXT=0;
      pos++;
      if(pos > 3){pos = 0;}
   }
   
   if(pos == 1){
      output_TOGGLE(LED);
      lcd_putc("\f");
      printf(lcd_putc, "Protocolo");
      lcd_gotoxy(1,2);
      printf(lcd_putc, "RC5");
     
      protocol(RC5);
     
      pos2 = 0;
     
      value = quanty << 2;
      value += freq;
      write_ext_eeprom(pos2,value);       // 0
      delay_ms(10);
     
      value = ord_one << 1;
      value += ord_zero;
      pos2++;
      write_ext_eeprom(pos2,value);       // 1
      delay_ms(10);
     
      pos2++;
      write_ext_eeprom(pos2,one_l1);       // 2
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,one_l2);       // 3
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,one_h1);       // 4
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,one_h2);       // 5
      delay_ms(10);
     
      pos2++;
      write_ext_eeprom(pos2,zero_l1);       // 6
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,zero_l2);       // 7
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,zero_h1);       // 8
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,zero_h2);       // 9
      delay_ms(10);
     
      value = data[0][2] - 1;       // quant - 1
      value = value << 4;
      value += (data[0][1] << 1);
      value += data[0][0];
      pos2++;
      write_ext_eeprom(pos2,value);       // 10
      delay_ms(10);
     
      value = data[1][2] - 1;       // quant - 1
      value = value << 4;
      value += (data[1][1] << 1);
      value += data[1][0];
      pos2++;
      write_ext_eeprom(pos2,value);       // 11
      delay_ms(10);
     
      value = data[2][2] - 1;       // quant - 1
      value = value << 4;
      value += (data[2][1] << 1);
      value += data[2][0];
      pos2++;
      write_ext_eeprom(pos2,value);       // 12
      delay_ms(10);
     
      value = data[3][2] - 1;       // quant - 1
      value = value << 4;
      value += (data[3][1] << 1);
      value += data[3][0];
      pos2++;
      write_ext_eeprom(pos2,value);       // 13
      delay_ms(10);
     
      pos++;
   }
   
   if(pos == 3){
      output_TOGGLE(LED);
      lcd_putc("\f");
      printf(lcd_putc, "Protocolo");
      lcd_gotoxy(1,2);
      printf(lcd_putc, "SIRC");
     
      protocol(SIRC);
     
      pos2 = 20;
     
      value = quanty << 2;
      value += freq;
      write_ext_eeprom(pos2,value);       // 20
      delay_ms(10);
     
      value = ord_one << 1;
      value += ord_zero;
      pos2++;
      write_ext_eeprom(pos2,value);       // 21
      delay_ms(10);
     
      pos2++;
      write_ext_eeprom(pos2,one_l1);       // 22
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,one_l2);       // 23
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,one_h1);       // 24
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,one_h2);       // 25
      delay_ms(10);
     
      pos2++;
      write_ext_eeprom(pos2,zero_l1);       // 26
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,zero_l2);       // 27
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,zero_h1);       // 28
      delay_ms(10);
      pos2++;
      write_ext_eeprom(pos2,zero_h2);       // 29
      delay_ms(10);
     
      value = data[0][2] - 1;       // quant - 1
      value = value << 4;
      value += (data[0][1] << 1);
      value += data[0][0];
      pos2++;
      write_ext_eeprom(pos2,value);       // 30
      delay_ms(10);
     
      value = data[1][2] - 1;       // quant - 1
      value = value << 4;
      value += (data[1][1] << 1);
      value += data[1][0];
      pos2++;
      write_ext_eeprom(pos2,value);       // 31
      delay_ms(10);
     
      value = data[2][2] - 1;       // quant - 1
      value = value << 4;
      value += (data[2][1] << 1);
      value += data[2][0];
      pos2++;
      write_ext_eeprom(pos2,value);       // 32
      delay_ms(10);
     
      value = data[3][2] - 1;       // quant - 1
      value = value << 4;
      value += (data[3][1] << 1);
      value += data[3][0];
      pos2++;
      write_ext_eeprom(pos2,value);       // 33
      delay_ms(10);
     
      pos++;
   }
}

void frequency(){
   if((frequency_h == 38) && (frequency_l == 38)){
      output_HIGH(PIN_TRANS);
      delay_cycles(38);
      output_LOW(PIN_TRANS);
      delay_cycles(38);
   }
   else if((frequency_h == 40) && (frequency_l == 40)){
      output_HIGH(PIN_TRANS);
      delay_cycles(40);
      output_LOW(PIN_TRANS);
      delay_cycles(40);
   }
   else if((frequency_h == 48) && (frequency_l == 98)){
      output_HIGH(PIN_TRANS);
      delay_cycles(48);
      output_LOW(PIN_TRANS);
      delay_cycles(98);
   }
}

void start(){
   for(aux=0;aux<300;aux++){frequency();}
   output_LOW(PIN_TRANS);
   delay_us(t_start_l);
}

void zero(){
   switch(invert_zero){
      case 0:
         output_LOW(PIN_TRANS);
         delay_us(t_zero_l);
         for(aux=0;aux<21;aux++){frequency();}
      break;
      case 1:
         for(aux=0;aux<21;aux++){frequency();}
         output_LOW(PIN_TRANS);
         delay_us(t_zero_l);
      break;
   }
}

void one(){
   switch(invert_one){
      case 0:
         output_LOW(PIN_TRANS);
         delay_us(t_one_l);
         for(aux=0;aux<21;aux++){frequency();}
      break;
      case 1:
         for(aux=0;aux<21;aux++){frequency();}
         output_LOW(PIN_TRANS);
         delay_us(t_one_l);
      break;
   }
}

void bytes_send(int16 byte_send, int quanty){
   pos = 0;
   do{
      if(bit_test(byte_send,pos) == 1){one();}
      else{zero();}
      pos++;
   }while(pos<=quanty);
}

void send_IR(int protocol){
   switch(protocol){
      case RC5:
         address_H = 0b01010;
         comand = 0b010101;
         
         start();
         if(toggle == 0){
            toggle = 1;
            goto send;
         }
         else if(toggle == 1){toggle = 0;}
send:
         bytes_send(toggle,1);
         bytes_send(address_H,5);
         bytes_send(comand,6);
      break;
   }
}

void read(){
   if(FLAG_EXT==1){
      FLAG_EXT=0;
      pos++;
      if(pos > 3){pos = 0;}
   }
   
   if(pos == 1){
      output_TOGGLE(LED);
      pos2 = 0;
     
      value = read_ext_eeprom(0);         // 0
      value_1 = bit_test(value,1);
      value_2 = bit_test(value,2);
      switch(value_1 + value_2){
         case 0:
            frequency_h = 38;
            frequency_l = 38;
         break;
         case 1:
            frequency_h = 40;
            frequency_l = 40;
         break;
         case 2:
            frequency_h = 48;
            frequency_l = 98;
         break;
      }
     
      quant_total = read_ext_eeprom(0) >> 2;         // 0
     
      value = read_ext_eeprom(1);           // 1
      invert_zero = bit_test(value,0);
      invert_one = bit_test(value,1);
     
      value_1 = read_ext_eeprom(2);         // 2
      value_2 = read_ext_eeprom(3);         // 3
      t_zero_l = make16(value_2,value_1);
      value_1 = read_ext_eeprom(4);         // 4
      value_2 = read_ext_eeprom(5);         // 5
      t_zero_h = make16(value_2,value_1);
     
      value_1 = read_ext_eeprom(6);         // 6
      value_2 = read_ext_eeprom(7);         // 7
      t_one_l = make16(value_2,value_1);
      value_1 = read_ext_eeprom(8);         // 8
      value_2 = read_ext_eeprom(9);         // 9
      t_one_h = make16(value_2,value_1);
     
      value_1 = read_ext_eeprom(10);         // 10
      value_2 = read_ext_eeprom(11);         // 11
      t_start_l = make16(value_2,value_1);
      value_1 = read_ext_eeprom(12);         // 12
      value_2 = read_ext_eeprom(13);         // 13
      t_start_h = make16(value_2,value_1);
     
      l
 
  cd_putc("\f");
      printf(lcd_putc, "Protocolo");
      lcd_gotoxy(1,2);
      printf(lcd_putc, "RC-5");
     
      send_IR(1);
     
      delay_ms(5000);
     
      pos++;
   }
}

void main(){
   enable_interrupts(int_ext);
   ext_int_edge(H_TO_L);
   enable_interrupts(GLOBAL);
   
   init_ext_eeprom();
   lcd_init();
   pos = 0;
   invert_zero = 1;
   invert_one = 1;
   
   output_LOW(LED);
   
   while(true){
      if(input(SELECT)){
         pos = 0;
         lcd_putc("\f");
         printf(lcd_putc, "WRITE");
         while(input(SELECT)){write();}
      }
      else if(!input(SELECT)){
         pos = 0;
         lcd_putc("\f");
         printf(lcd_putc, "READ");
         while(!input(SELECT)){read();}
      }
   }
}

Me genera errores en las siguientes instrucciones:

  • output_TOGGLE(LED);
  • output_HIGH(PIN_TRANS);
  • output_LOW(PIN_TRANS);
  • enable_interrupts(int_ext);
  • while(true){}

No entiendo por qué me genera errores en estas funciones, y el IDE no presenta ayudas o soluciones para estos errores. Al final al hacer un Clean and Build Project me sale este mensaje:

Citar
CLEAN SUCCESSFUL (total time: 203ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory \'C:/Users/l/MPLABXProjects/Memoria.X\'
make  -f nbproject/Makefile-default.mk dist/default/production/Memoria.X.production.hex
make[2]: Entering directory \'C:/Users/l/MPLABXProjects/Memoria.X\'
gnumkdir -p build/default/production
gnumkdir -p dist/default/production
&quot;C:\\PROGRA~2\\PICC\\CCSCON.exe&quot;  out=&quot;build/default/production&quot;  Memoria.c +FM +DF +CC +Y=9 +EA I+=&quot;C:\\Program Files (x86)\\PICC\\Devices&quot; I+=&quot;C:\\Program Files (x86)\\PICC\\Drivers&quot; +DF +LN +T +A +M +J +EA +Z -P #__16F1827=1
nbproject/Makefile-default.mk:105: recipe for target \'build/default/production/Memoria.o\' failed
make[2]: Leaving directory \'C:/Users/l/MPLABXProjects/Memoria.X\'
nbproject/Makefile-default.mk:84: recipe for target \'.build-conf\' failed
make[1]: Leaving directory \'C:/Users/l/MPLABXProjects/Memoria.X\'
nbproject/Makefile-impl.mk:39: recipe for target \'.build-impl\' failed
mv: no se puede efectuar `stat\' sobre �build/default/production/Memoria.cof�: No such file or directory
make[2]: *** [build/default/production/Memoria.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 4s)

Qusiera saber si me pueden ayudar a solucionar estos problemas.
Este mismo código en el IDE propio de PIC C funciona correctamente, pero deseo migrarlo a MPLab X para poder hacer uso del Pickit 3 como herramienta para el Debug. ...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:MPlab + CCS Compiler: Error de compilación
« Respuesta #1 en: 09 de Diciembre de 2016, 18:43:21 »
Citar
&quot;C:\\PROGRA~2\\PICC\\CCSCON.exe&quot;  out=&quot;build/default/production&quot;  Memoria.c +FM +DF +CC +Y=9 +EA I+=&quot;C:\\Program Files (x86)\\PICC\\Devices&quot; I+=&quot;C:\\Program Files (x86)\\PICC\\Drivers&quot; +DF +LN +T +A +M +J +EA +Z -P #__16F1827=1


Veo esos &quot, puntos y comas, doble barras, tal ves eso te esta dando problemas.

El IDE te va a acusar que esas funciones no existen, por que claramente no existen y son internas al compilador. Pero compilador te deberia dar bien. El error parece ser cuando intenta compilarlo.