Autor Tema: Invalid option: +EXPORT con CCS y mplab  (Leído 10676 veces)

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

Desconectado carafaelet

  • PIC12
  • **
  • Mensajes: 61
Invalid option: +EXPORT con CCS y mplab
« en: 02 de Mayo de 2008, 08:58:54 »
Compañeros me sale un error un tanto extraño al compilar: "Invalid option: +EXPORT" cuando intento compilar el codigo que expongo mas abajo (o quiza sea un problema de lcd2.c?), como podeis ver es uno de los ejemplos de PichScool de la firma Ingeniería de Microsistemas programados. Creo que esto de +EXPORT esta relacionado con las "Inherit golbal settings" que se encuentra en el menu: project --> Build options --> nombredelprograma.c. Alguien sabe a que se puede deber este error del compilador CCS?

//                        EJEMPLO 16
//                  Autor: Mikel Etxebarria
//         (c) Ingeniería de Microsistemas Programados S.L.
//                  www.microcontroladores.com
//                        Bilbao 2006
//
//El manejo de la pantalla LCD
//
//Este ejemplo pretende introducirnos en el manejo de la pantalla LCD, para la visualización
//de diferentes mensajes (p.e. Hola).

#include <16f876A.h>   

//Ajusta los valores de la palabra de configuración durante el ensamblaje:
//Protección de código y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT

#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT

// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la puerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.

#use fast_io (A)
#use fast_io (B)
#use delay(clock=4000000)
#include <lcd2.c>   //Incluir funciones de manejo del LCD

main()

   SETUP_ADC_PORTS(NO_ANALOGS);   //Puerta A Digital
   set_tris_a(0x3F);            //RA0-RA5 entradas
   set_tris_b(0x00);            //RB0-RB7 salidas      

   while(1)
   {
    lcd_init();   // Comandos de inicialización del LCD.

    lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK); // Envía comando al LCD
    lcd_putc('H');  // Envía caracter al LCD.
    lcd_putc('o');
    lcd_putc('l');
    lcd_putc('a');
    lcd_putc(' ');
    sleep();
  }
}   

Gracias.
En esta vida hay 10 clases de personas, las que saben binario y las que no.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #1 en: 03 de Mayo de 2008, 23:56:12 »
Hola.

El codigo parece estar bien (no se como sea el codigo de la libreria para la LCD).
Por que no revisas en la opcion Proyect/Build Options y miras si en la casilla "Inherit global setting" si esta la configuracion "+DF +LN +T -A +M -Z +Y=9 +EA" ?

Chao
El papel lo aguanta todo

Desconectado carafaelet

  • PIC12
  • **
  • Mensajes: 61
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #2 en: 04 de Mayo de 2008, 11:33:06 »
Gracias MLO_, en "Inherit global setting" tengo casi el mismo código que me pones, excepto en la letra A que tiene signo positivo en vez de negativo, es decir, el codigo que tengo aqui puesto es: +DF +LN +T +A +M -Z +Y=9 +EA  Puede ser esto el causante del problema? Sinceramente, no se muy bien que es exactamente lo de inherit global settings y el sentido de cada una de las letras..  :?
En esta vida hay 10 clases de personas, las que saben binario y las que no.

Desconectado juanez

  • PIC12
  • **
  • Mensajes: 90
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #3 en: 04 de Mayo de 2008, 16:07:29 »
hola, yo compilo con ccs y no tengo esa libreria, por que no  pruebas a poner la lcd.c que es la que viene de normal con el ccs a ver si asi te funciona.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #4 en: 05 de Mayo de 2008, 00:10:56 »
Hola carafaelet, pues prueba a ver si es eso. El significado de las letricas esta en el manual del CCS .... de persistir el error, estoy de acuerdo con juanez en cambiar la libreria de la LCD..... uno nunca sabe no?

Chao
El papel lo aguanta todo

Desconectado carafaelet

  • PIC12
  • **
  • Mensajes: 61
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #5 en: 05 de Mayo de 2008, 06:55:43 »
  :( Nada, ya he probado ambas cosas y sigue saliendome el mismo error. He cambiado las iherit.. y he probado con la libreria LCD.C que viene con el compilador pero nada.. El motivo de estar hecho originalmente con una libreria lcd distinta es porque la otra esta adaptada a un lcd en concreto, a las características que vienen en el datasheet de dicho lcd, para asi poder probar y experimentar en la propia lcd y el pic. Se trata de una de estas pcb con multiples periféricos para el aprendizaje de programación de PICs.. 
En esta vida hay 10 clases de personas, las que saben binario y las que no.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #6 en: 05 de Mayo de 2008, 13:33:33 »
Hola.

Pues, estube revisando un poco lo de las opciones del CCS para la MCU (Multiple Compilation Unit), y ahi aparece la directiva de compilacion #EXPORT. Al colocar esta directiva junto con los respectivos criterios de la funcion, me corre bien, pero al colocar una criterio de funcion diferente a los permitidos me aparece un error raro.

Deduciendo de este fallo (que la verdad el fallo es mio por no poder usar bien el MCU), busca en el codigo a ver si esta esa directiva #EXPORT y, de estar por ahi, modifica los criterios de la funcion o comentalo y prueba de esa manera.

Revisaste la info en la ayuda del CCS para el significado de las letricas? Esta en Contenido\Overview\Invoking the Command Line Compiler

PD\\
Yo acostumbro a colocar el lcd_init() fuera del loop infinito (solo inicializo la LCD una vez).
Probe el codigo de tu programa y corre bien (con la libreria LCD.C)
El papel lo aguanta todo

Desconectado carafaelet

  • PIC12
  • **
  • Mensajes: 61
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #7 en: 06 de Mayo de 2008, 07:52:41 »
Estube viendo lo de las letricas y veo que es como una configuración del compilador que estamos usando (segun en la familia de pic que estes trabajando, PCB PCM PCH...) asi como los ficheros que quieres o que no que te genere.. En cuanto a la directiva #EXPORT no la he encontrado en el código, es más, poniendo la libreria LCD.C y la inicialización del lcd fuera del loop me sale el mismo error, por lo que me hace pensar si serà algo que esta mal en la onfiguración del compilador y en principio no de las librerias lcd, de todas formas os expongo el código modificado por si veis algo. A ver si es identico al que has probado tu MLO_

Saludos.

#include <16f876A.h>   

//Ajusta los valores de la palabra de configuración durante el ensamblaje:
//Protección de código y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT

#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT

// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la puerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.

#use fast_io (A)
#use fast_io (B)
#use delay(clock=4000000)
#include <LCD.C>   //Incluir funciones de manejo del LCD

main()

   SETUP_ADC_PORTS(NO_ANALOGS);   //Puerta A Digital
   set_tris_a(0x3F);            //RA0-RA5 entradas
   set_tris_b(0x00);            //RB0-RB7 salidas      
   lcd_init();   // Comandos de inicialización del LCD.

   while(1)
   {
   

    lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK); // Envía comando al LCD
    lcd_putc('H');  // Envía caracter al LCD.
    lcd_putc('o');
    lcd_putc('l');
    lcd_putc('a');
    lcd_putc(' ');
    sleep();
  }
}   
 
En esta vida hay 10 clases de personas, las que saben binario y las que no.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #8 en: 06 de Mayo de 2008, 11:47:03 »
Hola.

Pues si, ese es el mismo codigo que a mi si me corre!!!!! Sabes que va a tocar? reinstalar el compilador a ver que sucede.

Saludos
El papel lo aguanta todo

Desconectado carafaelet

  • PIC12
  • **
  • Mensajes: 61
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #9 en: 09 de Mayo de 2008, 12:41:53 »
Reinstalando el compilador seguia dandome el mismo error, por lo que he obtado por cambiar de versión. Y sorpresa, me salen 4 errores, 3 de los cuales son de tres instrucciones de su propia libreria de manejo del LCD..  :shock:  Los errores concretamente son:

*** Error 12 "C:\ARCHIV~1\PICC\drivers\LCD.C" Line 91(29,30): Undefined identifier  -- set_tris_d
*** Error 12 "C:\ARCHIV~1\PICC\drivers\LCD.C" Line 103(30,31): Undefined identifier  -- set_tris_d
*** Error 12 "C:\ARCHIV~1\PICC\drivers\LCD.C" Line 133(28,29): Undefined identifier  -- set_tris_d
*** Error 12 "D:\Els Meus Documents\Picschool\Ex 16\Ejem_16.c" Line 40(5,15): Undefined identifier  -- lcd_enviar

No se.. igual el error es de mi programa y no de la libreria, os ha pasado esto a alguien?  concretamente lo que no admite es: set_tris_lcd , es el mismo error en las lineas 91,103 y 133. Voy a continuar a ver si encuentro el error y el que me da también en mi codigo...
En esta vida hay 10 clases de personas, las que saben binario y las que no.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #10 en: 09 de Mayo de 2008, 13:24:37 »
Hola.

El error que ahi te sale (el de la LCD) es porque estas usando el PORTD para conectar la LCD y el pic que usas no tiene PORTD, prueba pasarlo al PORTB (en la libreria de la LCD esta esa opcion)  :-)

El ultimo error es porque no has colocado un #define lcd_putc lcd_enviar (cambias el nombre de la funcion lcd_putc a lcd_enviar )

Saludos
El papel lo aguanta todo

Desconectado carafaelet

  • PIC12
  • **
  • Mensajes: 61
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #11 en: 09 de Mayo de 2008, 15:41:05 »
MLO_ El error del PORTD lo solucione de forma más drástica.. cambiando el pic por un 16F877A ejjeje... que este si que lleva puerto D. Incluí tambien los defines que me has comentado y alguno mas, puesto que me aparecieron nuevos errores de este tipo, hasta que finalmente me he quedado con un error:

*** Error 51 "D:\Els Meus Documents\Picschool\Ex 16\Ejem_16.c" Line 44(27,28): A numeric expression must appear here
 
que concretamente se refiere a la linea:

lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK);

Creo que puede deberse a que la libreria LCD.C no usa ninguna de las funciones: LCD_COMANDO,LCD_CURSOR_BLINK. Por otra parte si que he conseguido que funcionase con la libreria lcd2.c que es la que usaba este programa en un principio, y una vez grabado en el PIC ha funcionado correctamente. Creo que voy a tratar de aprender a trabajar con la libreria LCD.C con los programitas que hay por aqui colgados, puesto que no me dará errores de ese tipo, además de que trae mucho menos codigo..  :-)
En esta vida hay 10 clases de personas, las que saben binario y las que no.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #12 en: 09 de Mayo de 2008, 17:03:34 »
Ok.

El error viene de que no estan definidos los comandos LCD_COMANDO,LCD_CURSOR_BLINK, que en si solo son numeros hexadecimales.
Hice una "modificacion" a una de las librerias de LCD, para que queden habilitados esos comandos (ademas de poder generar simbolos propios y guardarlos en la RAM de la LCD). La posteo para que pruebes con ella ok? Para utilizar los comandos se hace con la funcion LCD_COMMAND();. Hay que colocar los comandos de uno en uno.

Al fin el problema era entonces la version del compilador cierto?

Código: [Seleccionar]
// As defined in the following structure the pin connection is as follows:
//     D0  enable
//     D1  rs
//     D2  rw
//     D4  D4
//     D5  D5
//     D6  D6
//     D7  D7
#define LCD_OFF 0x08
#define CURSOR_ON 0x0E
#define CURSOR_OFF 0x0C
#define BLINK_ON 0x0D
#define BLINK_OFF 0x0C
#define SHIFT_LEFT 0x1C
#define SHIFT_RIGHT 0x18
#define CURSOR_RIGHT 0x14
#define CURSOR_LEFT 0x10
#define CGRAM 0x40


struct lcd_pin_map {                 // This structure is overlayed
           BOOLEAN enable;           // on to an I/O port to gain
           BOOLEAN rs;               // access to the LCD pins.
           BOOLEAN rw;               // The bits are allocated from
           BOOLEAN unused;           // low order up.  ENABLE will
           int     data : 4;         // be pin B0.
        } lcd;


#if defined use_portb_lcd
   #locate lcd = getenv("sfr:PORTB")    // This puts the entire structure over the port
   #define set_tris_lcd(x) set_tris_b(x)
#else
   #locate lcd = getenv("sfr:PORTD")    // This puts the entire structure over the port
   #define set_tris_lcd(x) set_tris_d(x)
#endif


#define lcd_type 2           // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40    // LCD RAM address for the second line


BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
                             // These bytes need to be sent to the LCD
                             // to start it up.


                             // The following are used for setting
                             // the I/O port direction register.

struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in



BYTE lcd_read_byte() {
      BYTE low,high;
      set_tris_lcd(LCD_READ);
      lcd.rw = 1;
      delay_cycles(1);
      lcd.enable = 1;
      delay_cycles(1);
      high = lcd.data;
      lcd.enable = 0;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(1);
      low = lcd.data;
      lcd.enable = 0;
      set_tris_lcd(LCD_WRITE);
      return( (high<<4) | low);
}


void lcd_send_nibble( BYTE n ) {
      lcd.data = n;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(2);
      lcd.enable = 0;
}


void lcd_send_byte( BYTE address, BYTE n ) {

      lcd.rs = 0;
      while ( bit_test(lcd_read_byte(),7) ) ;
      lcd.rs = address;
      delay_cycles(1);
      lcd.rw = 0;
      delay_cycles(1);
      lcd.enable = 0;
      lcd_send_nibble(n >> 4);
      lcd_send_nibble(n & 0xf);
}


void lcd_init() {
    BYTE i;
    set_tris_lcd(LCD_WRITE);
    lcd.rs = 0;
    lcd.rw = 0;
    lcd.enable = 0;
    delay_ms(15);
    for(i=1;i<=3;++i) {
       lcd_send_nibble(3);
       delay_ms(5);
    }
    lcd_send_nibble(2);
    for(i=0;i<=3;++i)
       lcd_send_byte(0,LCD_INIT_STRING[i]);
}


void lcd_gotoxy( BYTE x, BYTE y) {
   BYTE address;

   if(y!=1)
     address=lcd_line_two;
   else
     address=0;
   address+=x-1;
   lcd_send_byte(0,0x80|address);
}

void lcd_putc( char c) {
   switch (c) {
     case '\f'   : lcd_send_byte(0,1);
                   delay_ms(2);
                                           break;
     case '\n'   : lcd_gotoxy(1,2);        break;
     case '\b'   : lcd_send_byte(0,0x10);  break;
     default     : lcd_send_byte(1,c);     break;
   }
}

char lcd_getc( BYTE x, BYTE y) {
   char value;

    lcd_gotoxy(x,y);
    while ( bit_test(lcd_read_byte(),7) ); // wait until busy flag is low
    lcd.rs=1;
    value = lcd_read_byte();
    lcd.rs=0;
    return(value);
}

void lcd_command(byte cmd)
{
lcd_send_byte(0, cmd);
}


El papel lo aguanta todo

Desconectado carafaelet

  • PIC12
  • **
  • Mensajes: 61
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #13 en: 10 de Mayo de 2008, 05:35:18 »
Si, efectivamente, al cambiar la version del compilador desaparecio el problema +EXPORT. Cambie la LCD.C por la modificada con los nuevos comandos, pero sigo teniendo el mismo problema en la misma linea..  :? Lo que no entiendo es lo de usar los comandos de uno en uno, a que te refieres a que en el codigo del programa hay que poner primer uno y despues el otro?
En esta vida hay 10 clases de personas, las que saben binario y las que no.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Invalid option: +EXPORT con CCS y mplab
« Respuesta #14 en: 10 de Mayo de 2008, 17:55:51 »
No hay mejor manera de explicar que mediante un ejemplo, cierto???

Código: [Seleccionar]
#include<18F452.h>
#fuses XT
#use delay(clock=4M)

#include "LCD.C"

#define SYMBOL_1 0
#define SYMBOL_2 1
#define SYMBOL_3 2
#define S_RIGHT 3
#define S_LEFT 4
#define S_UP 5
#define S_DOWN 6

char data_symbol_1[7] = {0b11111, 0b10001, 0b1010, 0b100, 0b1110, 0b11111, 0b11111};
char data_symbol_2[7] = {0x0e, 0x07, 0x03, 0x01, 0x03, 0x07, 0x0e};
char data_symbol_3[7] = {0x00, 0x0f, 0x1f, 0x01, 0x1f, 0x0f, 0x00};
char data_symbol_right[7] = {0x08, 0x0c, 0x0e, 0x0f, 0x0e, 0x0c, 0x08};
char data_symbol_left[7] = {0x02, 0x06, 0x0e, 0x1e, 0x0e, 0x06, 0x02};
char data_symbol_up[7] = {0x00, 0x04, 0x04, 0x0e, 0x0e, 0x0e, 0x1f};
char data_symbol_down[7] = {0x1f, 0x0e, 0x0e, 0x0e, 0x04, 0x04, 0x00};

void simbolos (void)
{
int8 i;

lcd_init();
lcd_command(LCD_OFF);
lcd_putc(SYMBOL_1);
lcd_command(CGRAM);
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_1[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_2[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_3[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_right[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_left[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_up[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_down[i]); }
}

void main (void)
{
simbolos();
lcd_init();
 while(true)
 {
lcd_gotoxy(1,1);
lcd_putc("W/c");
lcd_putc(SYMBOL_1);
lcd_putc(SYMBOL_2);
lcd_putc(SYMBOL_3);
lcd_putc(S_RIGHT);
lcd_putc(S_LEFT);
lcd_putc(S_UP);
lcd_putc(S_DOWN);
 }
}


A lo de enviar los comandos de uno en uno, me refiero a que no se puede hacer lo siguiente: lcd_command(LCD_OFF    | CURSOR_ON );, si no que toca enviar primero lcd_command(LCD_OFF) y luego lcd_command(CURSOR_ON).
El papel lo aguanta todo


 

anything