Freedom III e compilazioni fallite

  • Black
  • Autore della discussione
  • Nuovo Utente
  • Nuovo Utente
Di più
1 Giorno 5 Ore fa #1 da Black
Freedom III e compilazioni fallite è stato creato da Black
Buonasera a tutti,
recentemente ho deciso di rispolverare, dopo qualche anno, lo studio del IDE Mplab X. Essendomi procurato già da tempo la scheda Freedom III ho scaricato i sorgenti di Mauro (Freedom III Test Suite) e la 4a edizione di XC8 step by step.
Sul pc attuale avevo già una vecchia versione di MPlab (v2.26) e del XC8 (v1.34). Per quanto riguarda le librerie LTlib ho utilizzato quelle inserite nel pacchetto Freedom_III_Test_Suite (ovvero LTlib v4.0.3).
Ho tentato quindi la compilazione con i software sopra indicati ma ho ottenuto una serie piuttosto lunga di errori senza riuscire mai ad ottenere il file .hex.
Ho pensato, quindi, che forse le nuove modifiche avrebbero potuto risolvere qualcuno di questi problemi.
Mi sono quindi procurato due versioni più recenti di MPlab (v5.50 e v6.20), due differenti versioni di XC8 (v2.40 e v3.00) e due diverse versioni delle LTlib (v5.1.2 e v5.2.0).
Ho quindi provato a modificare le impostazioni del progetto provando le varie combinazioni di IDE, compilatore XC8 e LTlib. Tuttavia ogni compilazione non è mai andata a buon fine, dando ogni volta errori (spesso incomprensibili, almeno per me) sempre diversi: ad ogni combinazione corrispondono più o meno errori ma come denominatore comune c'è sempre il fallimento della compilazione.

Ho provato quindi ad utilizzare un file di esempio presente nella libreria LTlib v5.2.0 (in particolare il progetto "Hello World" per il dispositivo LCD_44780_I2C). In questo caso il file .hex è stato generato (non l'ho provato), ma nel contempo sono state riportate moltissime warning.

Nei vari tentativi ho sempre scelto uno degli IDE a mia disposizione selezionando la versione del compilatore XC8 ed inserito nel percorso delle impostazioni dell'IDE le 4 cartelle (3 per la versione 4.0.3) delle librerie LTlib.

Sto forse dimenticando qualche altra impostazione necessaria?

Grazie a tutti.
   Marco
 

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
1 Giorno 4 Ore fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Freedom III e compilazioni fallite
Salve Marco,

puoi postare messaggi di errore?

La parte iniziale è quella che contiene maggiori informazioni.

L'errore tipico è che devi impostare propriamente i percorsi del progetti.

La compilazione dei progetti di esempio funziona perché è contenuta nelle cartelle di libreria. Quindi dove la metti la metti, i percorsi relative interni non cambiano.

Compilando un progetto esterno devi invece impostare i percorsi a seconda di dove sono...progetto e libreria.

Dalla tua descrizione i percorsi sembrano essere il problema.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Black
  • Autore della discussione
  • Nuovo Utente
  • Nuovo Utente
Di più
1 Giorno 3 Ore fa #3 da Black
Risposta da Black al topic Freedom III e compilazioni fallite
Ciao Mauro,
Ti posto 2 errori (spero di non esagerare con la lunghezza del post).
Il primo l'ho eseguito su due differenti macchine. I percorsi dei progetti nelle due macchine sono i medesimi (uso una cartella di google drive in modo da avere ogni progetto sincronizzato continuamente qualunque sia la macchina dalla quale apporto le modifiche).
Ti posto quello di un solo, perchè i messaggi di errore sono i medesimi:

Il software utilizzato è il medesimo: IDE (v6.2); XC8 (v2.40); PIC18F-K_DFP (1.4.87); LTlib (V5.1.2)

CLEAN SUCCESSFUL (total time: 5ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make  -f nbproject/Makefile-default.mk dist/default/debug/Freedom_III_Test_Suite.X.debug.elf
make[2]: *** No rule to make target 'C:/Program Files (x86)/Microchip/xc8/v1.21/lib/pic18-plib-c18-18f46k22.lpp', needed by 'dist/default/debug/Freedom_III_Test_Suite.X.debug.elf'.  Stop.
make[2]: *** Waiting for unfinished jobs....
make[2]: Entering directory 'C:/Users/marco/Google_Drive/Interscambio/Progetti/MPLABXProjects/Freedom_III_Test_Suite.X'
"C:\Program Files\Microchip\xc8\v2.40\bin\xc8-cc.exe"  -mcpu=18F46K22 -c  -D__DEBUG=1  -mdebugger=none   -mdfp="C:/Users/marco/.mchp_packs/Microchip/PIC18F-K_DFP/1.4.87/xc8"  -fno-short-double -fno-short-float -memi=wordwrite -maddrqual=ignore -xassembler-with-cpp -I"../LTlib_v_5.1.2_Maker/conf" -I"../LTlib_v_5.1.2_Maker/inc" -I"../LTlib_v_5.1.2_Maker/src" -I"../LTlib_v_5.1.2_Maker/src/modules_PIC_8_bits" -mwarn=0 -mext=cci -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,-mem,-hex,-file  -ginhx32 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits   -std=c90 -gdwarf-3 -mstack=compiled:auto:auto:auto     -o build/default/debug/main.p1 main.c
../LTlib_v_5.1.2_Maker/inc\LTlib_types.h:48:32: warning: (1516) compiler does not support 64-bit integers on the target architecture
../LTlib_v_5.1.2_Maker/inc\LTlib_types.h:53:30: warning: (1516) compiler does not support 64-bit integers on the target architecture
EEPROM_test.c:47:1: warning: (361) function declared implicit int
EEPROM_test.c:53:1: warning: (361) function declared implicit int
make[2]: Leaving directory 'C:/Users/marco/Google_Drive/Interscambio/Progetti/MPLABXProjects/Freedom_III_Test_Suite.X'
make[1]: *** [nbproject/Makefile-default.mk:85: .build-conf] Error 2
make: *** [nbproject/Makefile-impl.mk:39: .build-impl] Error 2

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

____________________________________________________________________________________

Nel secondo esempio ho cambiato la versione del compilatore e delle librerie: IDE (v6.2); XC8 (v3.00); PIC18F-K_DFP (1.4.87); LTlib (V5.2.0)

CLEAN SUCCESSFUL (total time: 1ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make  -f nbproject/Makefile-default.mk dist/default/debug/Freedom_III_Test_Suite.X.debug.elf
make[2]: *** No rule to make target 'C:/Program Files (x86)/Microchip/xc8/v1.21/lib/pic18-plib-c18-18f46k22.lpp', needed by 'dist/default/debug/Freedom_III_Test_Suite.X.debug.elf'.  Stop.
make[2]: *** Waiting for unfinished jobs....
make[2]: Entering directory 'C:/Users/marco/Documents/MC/Freedom_III_Test_Suite.X'
"C:\Program Files\Microchip\xc8\v3.00\bin\xc8-cc.exe"  -mcpu=18F46K22 -c  -D__DEBUG=1  -mdebugger=none   -mdfp="C:/Users/marco/.mchp_packs/Microchip/PIC18F-K_DFP/1.4.87/xc8"  -fno-short-double -fno-short-float -memi=wordwrite -maddrqual=ignore -xassembler-with-cpp -I"../LTlib_v_5.2.0/conf" -I"../LTlib_v_5.2.0/inc" -I"../LTlib_v_5.2.0/src" -I"../LTlib_v_5.2.0/src/modules_PIC_8_bits" -mwarn=0 -mext=cci -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,-mem,-hex,-file  -ginhx32 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto:auto     -o build/default/debug/main.p1 main.c
In file included from main.c:47:
In file included from ../LTlib_v_5.2.0/src/module_UART.c:45:
../LTlib_v_5.2.0/src/modules_PIC_8_bits/PIC_8_bits_module_UART.c:174:14: error: call to undeclared function 'UART2_TX_busy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
  174 |       while (UART2_TX_busy( ));
      |              ^
../LTlib_v_5.2.0/src/modules_PIC_8_bits/PIC_8_bits_module_UART.c:195:19: error: call to undeclared function 'UART2_TX_busy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
  195 |             while(UART2_TX_busy());
      |                   ^
make[2]: *** [nbproject/Makefile-default.mk:95: build/default/debug/main.p1] Error 1
../LTlib_v_5.2.0/src/modules_PIC_8_bits/PIC_8_bits_module_UART.c:218:19: error: call to undeclared function 'UART2_TX_busy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
  218 |             while(UART2_TX_busy());
      |                   ^
In file included from main.c:53:
In file included from ../LTlib_v_5.2.0/src/module_ADC.c:45:
../LTlib_v_5.2.0/src/modules_PIC_8_bits/PIC_8_bits_module_ADC.c:205:27: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
  205 | uint8_t ADC_is_converting (){
      |                           ^
      |                            void
In file included from main.c:65:
../LTlib_v_5.2.0/src/LCD_44780_I2C.c:243:27: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
  243 |     preliminary_buffer |= 0b00000100;
      |                           ^
In file included from main.c:67:
../LTlib_v_5.2.0/inc/I2C_EEPROM.h:185:7: warning: no newline at end of file [-Wnewline-eof]
  185 | #endif
      |       ^
In file included from main.c:74:
./led_string_test.c:40:29: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
   40 |     IO_write_port(IO_PORTD, 0b00000000);
      |                             ^
./led_string_test.c:42:29: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
   42 |     IO_write_port(IO_PORTD, 0b00000001);
      |                             ^
./led_string_test.c:44:29: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
   44 |     IO_write_port(IO_PORTD, 0b00000011);
      |                             ^
./led_string_test.c:46:26: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
   46 |         IO_write_port(IO_PORTD, 0b00000111);
      |                                 ^
./led_string_test.c:48:26: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
   48 |         IO_write_port(IO_PORTD, 0b00001111);
      |                                 ^
./led_string_test.c:50:29: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
   50 |     IO_write_port(IO_PORTD, 0b00011111);
      |                             ^
./led_string_test.c:52:26: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
   52 |         IO_write_port(IO_PORTD, 0b00111111);
      |                                 ^
./led_string_test.c:54:26: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
   54 |         IO_write_port(IO_PORTD, 0b01111111);
      |                                 ^
./led_string_test.c:56:26: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
   56 |         IO_write_port(IO_PORTD, 0b11111111);
      |                                 ^
In file included from main.c:80:
./EEPROM_test.c:47:2: error: call to undeclared function 'I2C_EEPROM_write'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
   47 |         I2C_EEPROM_write (0xA0, 0, write_data);
      |         ^
./EEPROM_test.c:47:2: note: did you mean 'I2C_EEPROM_write_byte'?
../LTlib_v_5.2.0/src/I2C_EEPROM.c:66:8: note: 'I2C_EEPROM_write_byte' declared here
   66 | int8_t I2C_EEPROM_write_byte (uint8_t control, uint16_t address, uint8_t data ){
      |        ^
In file included from main.c:80:
./EEPROM_test.c:53:2: error: call to undeclared function 'I2C_EEPROM_read'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
   53 |         I2C_EEPROM_read (0xA0, 0, &read_data);
      |         ^
In file included from main.c:85:
./analog_test.h:79:7: warning: no newline at end of file [-Wnewline-eof]
   79 | #endif
      |       ^
In file included from main.c:86:
./analog_test.c:61:32: warning: implicit conversion changes signedness: 'unsigned int' to 'int' [-Wsign-conversion]
   61 |                 delta_read = reference_value - read;
      |                            ~ ~~~~~~~~~~~~~~~~^~~~~~
./analog_test.c:97:32: warning: implicit conversion changes signedness: 'unsigned int' to 'int' [-Wsign-conversion]
   97 |                 delta_read = reference_value - read;
      |                            ~ ~~~~~~~~~~~~~~~~^~~~~~
./analog_test.c:148:20: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wimplicit-int-conversion]
  148 |         reference_value = sum;
      |                         ~ ^~~
./analog_test.c:164:22: warning: implicit conversion loses integer precision: 'unsigned long' to '__s_int16' (aka 'int') [-Wimplicit-int-conversion]
  164 |                 LCD_write_integer (sum,2, LCD_ZERO_CLEANING_ON);
      |                 ~~~~~~~~~~~~~~~~~  ^~~
./analog_test.c:169:14: warning: implicit conversion changes signedness: 'int' to 'unsigned long' [-Wsign-conversion]
  169 |                 if ((sum - reference_value) > 1) {
      |                          ~ ^~~~~~~~~~~~~~~
In file included from main.c:89:
./UART_test.c:63:13: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
   63 |     TRISD = 0b11000000;
      |             ^
main.c:103:37: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
  103 |     IO_set_port_direction(IO_PORTC, IO_BIT0_OUT);
      |                                     ^
../LTlib_v_5.2.0/inc/module_IO.h:117:25: note: expanded from macro 'IO_BIT0_OUT'
  117 |     #define IO_BIT0_OUT 0b11111110
      |                         ^
20 warnings and 5 errors generated.
make[2]: Leaving directory 'C:/Users/marco/Documents/MC/Freedom_III_Test_Suite.X'
make[1]: *** [nbproject/Makefile-default.mk:85: .build-conf] Error 2
make: *** [nbproject/Makefile-impl.mk:39: .build-impl] Error 2

BUILD FAILED (exit value 2, total time: 724ms)
____________________________________________________________________________________

Ho abbastanza difficoltà ad interpretare i messaggi di errore; tuttavia sono convinto anch'io che qualche percorso sia inserito male: Per esempio, nel primo errore che ho riportato leggo:

make[2]: *** No rule to make target 'C:/Program Files (x86)/Microchip/xc8/v1.21/lib/pic18-plib-c18-18f46k22.lpp'......

dove il compilatore fa riferimento ad una versione di xc8 v1.21. Versione che non ho in nessuna delle due macchine.

 

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Black
  • Autore della discussione
  • Nuovo Utente
  • Nuovo Utente
Di più
5 Ore 37 Minuti fa - 5 Ore 35 Minuti fa #4 da Black
Risposta da Black al topic Freedom III e compilazioni fallite
Un piccolo aggiornamento.
Ho notato che i file sorgenti (file.c) non sono presenti nell'albero del progetto (finestra in alto a sinistra dell'IDE). Nella cartella "Source files" è presente solo il file main.c. Diversamente per quanto riguarda gli header, che invece compaiono tutti nella cartella "Header files" (ricordo che il progetto non è stato compilato; non so se questo incida sul fatto che i file sorgenti non siano inglobati).

Sempre nell'albero del progetto, nella cartella "Libreries" compare il percorso "C:/Program Files (X86)/Microchip/xc8/v1.21/lib/pic12-plib-c18-18f46k22.lpp". Non capisco da dove venga questo link, in quanto la versione che sto usando ora di XC8 è la v3.00 ed il suo percorso non è in "C:/Program Files (X86)/....." ma eventualmente in "C:/Program files/...." (uso windows 10). Inoltre la libreria 1.21 non esiste sul mio pc (esiste la versione v1.34 nella cartella Program file (X86)).

Infine il primo errore del compilatore riporta:

In file included from ../LTlib_v_5.2.0/src/module_UART.c:45:
../LTlib_v_5.2.0/src/modules_PIC_8_bits/PIC_8_bits_module_UART.c:174:14: error: call to undeclared function 'UART2_TX_busy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
  174 |       while (UART2_TX_busy( ));

In effetti il file module_UART.c contiene le righe:

    #ifdef COMPILER_XC8     
        #include "PIC_8_bits_module_UART.c"
    #endif 

All'interno della libreria PIC_8_bits_module_UART.c compare la riga:

 while (UART2_TX_busy( ));

che fa riferimento alla funzione (che in realtà è un alias) UART2_TX_busy( )

La definizione (l'alias) si dovrebbe trovare nel file header "module_UART.c". Tuttavia, aprendo il file si nota che c'è riportato quanto segue:

    #ifdef COMPILER_XC8
        #define UART2_is_busy( ) (!TXSTA2bits.TRMT)
    #endif

    #ifdef COMPILER_XC16
        #define UART2_TX_busy( ) (!U2STAbits.TRMT)
    #endif

    #ifdef COMPILER_XC32
        #define UART2_TX_busy( ) (!U2STAbits.TRMT)
    #endif

Ovvero, se il compilatore utilizzato è quello per i pic a 16 o a 32 bit, l'alias è corretto (UART2_TX_busy( ) )
Se il compilatore utilizzato, viceversa, è l'XC8, l'alias è UART2_is_busy( ) e non UART2_TX_busy( )  come richiesto.

L'analogo per la seriale 1 invece è corretto "#define UART1_TX_busy( ) (!TXSTAbits.TRMT)"

Ho provato ad aggiungere un ulteriore alias:

#define UART2_is_busy() UART2_TX_busy()

Qusto tipo di errore è sparito, ma il problema generale è rimasto (non riesco ad arrivare correttamente al termine della compilazione.


 
Ultima Modifica 5 Ore 35 Minuti fa da Black. Motivo: Indicazione di una cartella errata

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi