Go Down

Topic: Aiuto per compilazione STK500boot.c (Read 7150 times) previous topic - next topic

Giorgio

Ciao a tutti,
ho bisogno di un grosso aiuto: mi servirebbe che qualcuno mi aiutasse a compilare (o che mi compilasse) il bootloader di Arduino Mega 2560 con alcune modifiche.
Sul mio mac non riesco a compilarlo, ho tutti i tool di sviluppo installati ma ho lo stesso molti errori.

Devo cambiare le righe del file STK500boot.c dalla 508 alla 527
Se qualcuno fosse così gentile da compilarmelo gliene sarei molto grato!Ho bisogno del file.hex
Grazie in anticipo!
giorgiofox@gmail.com

Code: [Select]
while (boot_state==0)
{
while ((!(Serial_Available())) && (boot_state == 0)) // wait for data
{
// _delay_ms(0.001);
// boot_timer++;
// if (boot_timer > boot_timeout)
// {
boot_state = 1; // (after ++ -> boot_state=2 bootloader timeout, jump to main 0x00000 )
// }
// #ifdef BLINK_LED_WHILE_WAITING
// if ((boot_timer % 7000) == 0)
// {
//* toggle the LED
// PROGLED_PORT ^= (1<<PROGLED_PIN); // turn LED ON
}
#endif
}
boot_state++; // ( if boot_state=1 bootloader received byte from UART, enter bootloader mode)
}

Giorgio

Nel frattempo spiego meglio perché ho bisogno di questa modifica:

Il bootloader di arduino,si blocca se durante la fase di boot riceve dei dati sulla seriale (perché si mette in attesa di un nuovo firmware).Siccome ho molti moduli custom hardware basati su arduino 2560 su una unica dorsale RS485,
qualora manchi alimentazione ad uno di questi moduli, il grande traffico modbus che c'e' sulla dorsale non gli permette più di far partire lo sketch.Ecco perché ho bisogno di ignorare questa funzione e forzare l'avvio dello sketch.
Purtroppo non posso più cambiare porta com di Arduino perché il pcb è fatto così..ci avessi pensato prima..





leo72

Ti sei dimenticato un paio di commenti. Quello giusto è:
Quote

   while (boot_state==0)
   {
      while ((!(Serial_Available())) && (boot_state == 0))      // wait for data
      {
         boot_state   =   1; // (after ++ -> boot_state=2 bootloader timeout, jump to main 0x00000 )
      }
      boot_state++; // ( if boot_state=1 bootloader received byte from UART, enter bootloader mode)
   }

Comunque ci sono anche altri warning non legati a questo file.

Giorgio

#3
May 23, 2012, 03:15 pm Last Edit: May 23, 2012, 03:33 pm by Giorgio Reason: 1
Grazie molto gentile. Potresti spiegarmi meglio a quali altri warning ti riferisci?

Io purtroppo non riesco a compilare.Ho installato tutti i tool developer, tutte le librerie e dipendenze ma ricevo una sfilza imbarazzante di errori..

L'ultimo dei quali,dopo averne risolti molti altri è:
Code: [Select]
Compiling: stk500boot.c
avr-gcc -c -mmcu=atmega2560 -I. -gdwarf-2 -DF_CPU=UL  -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -mno-tablejump  -Wall -Wstrict-prototypes -Wa,-adhlns=stk500boot.lst  -std=gnu99 -MD -MP -MF .dep/stk500boot.o.d stk500boot.c -o stk500boot.o
cc1: error: unrecognized command line option "-mno-tablejump"


Il tutto su OS 10.7.4 utilizzando il file preso da Arduino 1.01.
Ho provato molte versioni di avr-gcc, dalla 4.1 alla 4.7.  
;(

Allego il file modificato come gentilmente suggerito da Leo

PaoloP

Potresti aggirare il problema rimuovendo il bootloader e programmando direttamente lo sketch con la tecnica ISP tramite un'altra board.
Questo naturalmente come ultima ratio, ovvero quando ha definito il programma e non prevedi ulteriori modifiche al codice.
L'operazione è reversibile, ovvero puoi reinstallare il bootloader e caricare gli sketch normalmente.
Trovi tutto nella giuda del Prof. Menniti (ma non ricordo se tratti anche il 2560?) --> http://www.michelemenniti.it/VHD/Elettronica/GPAT_v3.pdf

Poi se ho detto una cavolata  :| gli "esperti" mi correggeranno.  :smiley-roll:

Giorgio

Grazie Paolo
non hai detto una cavolata, anzi funziona bene! ma purtroppo così mi perdo la possibilità di aggiornare il firmware dei miei moduli direttamente sul posto tramite usb.

leo72

In questo momento sono su Ubuntu 10.04, ho compilato il file prelevandolo dall'Arduino 0022 e con i tool di sistema.

Questo è ciò che ricevo in compilazione:

Code: [Select]
-------- begin --------
avr-gcc (GCC) 4.3.4
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling: stk500boot.c
avr-gcc -c -mmcu=atmega1280 -I. -gdwarf-2 -DF_CPU=16000000UL  -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -mno-tablejump  -Wall -Wstrict-prototypes -Wa,-adhlns=stk500boot.lst  -std=gnu99 -D_MEGA_BOARD_ -MD -MP -MF .dep/stk500boot.o.d stk500boot.c -o stk500boot.o
stk500boot.c: In function 'PrintFromPROGMEM':
stk500boot.c:1145: warning: cast from pointer to integer of different size
stk500boot.c: In function 'DumpHex':
stk500boot.c:1395: warning: cast to pointer from integer of different size
stk500boot.c: In function 'EEPROMtest':
stk500boot.c:1438: warning: cast from pointer to integer of different size
stk500boot.c:1459: warning: cast from pointer to integer of different size
In file included from stk500boot.c:1490:
avrinterruptnames.h: At top level:
avrinterruptnames.h:312: warning: ignoring #pragma mark __AVR_ATmega169__
avrinterruptnames.h:351: warning: ignoring #pragma mark __AVR_ATmega640__
stk500boot.c: In function 'VectorDisplay':
stk500boot.c:1599: warning: cast from pointer to integer of different size
stk500boot.c:1600: warning: cast to pointer from integer of different size

Linking: stk500boot.elf
avr-gcc -mmcu=atmega1280 -I. -gdwarf-2 -DF_CPU=16000000UL  -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -mno-tablejump  -Wall -Wstrict-prototypes -Wa,-adhlns=stk500boot.o  -std=gnu99 -D_MEGA_BOARD_ -MD -MP -MF .dep/stk500boot.elf.d stk500boot.o --output stk500boot.elf -Wl,-Map=stk500boot.map,--cref    -lm -Wl,--section-start=.text=1E000
/usr/lib/gcc/avr/4.3.4/../../../avr/bin/ld: address 0x20828 of stk500boot.elf section `.text' is not within region `text'
/usr/lib/gcc/avr/4.3.4/../../../avr/bin/ld: address 0x20828 of stk500boot.elf section `.text' is not within region `text'
make: *** [stk500boot.elf] Errore 1


La compilazione si blocca.

Michele Menniti

Paolo, la mia Guida è universale, nel senso che pur essendo basata su prove ed immagini con Arduino e l'ATmega328P, in realtà è utilizzabile anche con altri tipi di micro, quindi anche quelli montati sulle mega.

Però Giorgio NON ha problemi di bootloader ma ha necessità di apportare delle modifiche a quello originale, evidentemente il bootloader gli serve e gli serve con quelle modifiche. Se non gli servisse potrebbe tranquillamente caricare sul micro il solo sketch, ma temo non abbia questa necessità.

Ora ho letto l'intervento di Giorgio: questo non dovrebbe rappresentare un problema, visto che l'unico fastidio sarebbe quello di portarti appresso un Arduino per aggiornare via ISP.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Giorgio

#8
May 23, 2012, 03:39 pm Last Edit: May 23, 2012, 03:42 pm by Giorgio Reason: 1
Grazie Leo, in effetti vedo che va un po più avanti rispetto a me, ma alcuni errori li ho uguali anche io.
L'unica precisazione è quella di specificare correttamente il chip -mmcu=atmega1280 con -mmcu=atmega2560


Si Michele,riesco perfettamente a caricare nuovi bootloader,con un programmatore dedicato (AVRISP Mk2).
Il fatto è che i moduli hanno uno chassis ed un pannello frontale,andrebbero smontati ed aperti..insomma davvero un lavoraccio,considerando che sul pannello frontale ho la porta usb.
Tra parentesi,visto che mi sono arrivate le prime 100 unità, prometto che nei prossimi giorni presenterò ufficialmente il mio prodotto al forum.
grazie ancora a tutti!

leo72

Avviando la compilazione con "make mega2560" ottengo:

Code: [Select]
-------- begin --------
avr-gcc (GCC) 4.3.4
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Linking: stk500boot.elf
avr-gcc -mmcu=atmega2560 -I. -gdwarf-2 -DF_CPU=16000000UL  -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -mno-tablejump  -Wall -Wstrict-prototypes -Wa,-adhlns=stk500boot.o  -std=gnu99 -D_MEGA_BOARD_ -MD -MP -MF .dep/stk500boot.elf.d stk500boot.o --output stk500boot.elf -Wl,-Map=stk500boot.map,--cref    -lm -Wl,--section-start=.text=3E000
/usr/lib/gcc/avr/4.3.4/../../../avr/bin/ld: avr:51 architecture of input file `stk500boot.o' is incompatible with avr:6 output
stk500boot.o: In function `DumpHex':
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/arduino/bootloaders/stk500v2/stk500boot.c:1395: undefined reference to `__eerd_byte_m1280'
stk500boot.o: In function `EEPROMtest':
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/arduino/bootloaders/stk500v2/stk500boot.c:1440: undefined reference to `__eewr_byte_m1280'
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/arduino/bootloaders/stk500v2/stk500boot.c:1461: undefined reference to `__eerd_byte_m1280'
make: *** [stk500boot.elf] Errore 1

Sembra che ci sia qualcosa di non definito per i nuovi 2560.

Giorgio

#10
May 23, 2012, 04:03 pm Last Edit: May 23, 2012, 04:09 pm by Giorgio Reason: 1
Uhm...
e come mai l'errore è riferito al 1280? undefined reference to `__eerd_byte_m1280'
che sia per quello?
inoltre l'errore avr:51 architecture of input file `stk500boot.o' is incompatible with avr:6 output potrebbe far pensare ad un incompatibilità con acr-gcc 4.3.4.
Ho letto che alcune sintassi erano deprecated dopo la versione 4.3



leo72

Appunto, è quello che ti dicevo. Forse è un codice vecchio, e non sarebbe la prima volta. Anche il bootloader della UNO contenuto nell'IDE 0022 non è compilabile  :smiley-yell:

Giorgio

Ah.Caspita.Non lo sapevo.
E c'e' speranza che un comune mortale possa correggere tale errore,oppure bisogna aspettare qualche release ufficiale?
Per la cronaca io ho provato sia con la 1.0 che con la 1.1


leo72

Ho provato ora con la 1.0.1 sempre sotto Linux: niente da fare.

Prova a segnalare la cosa nella sezione internazionale per vedere se è una cosa nota e/o risolta.

leo72

Forse è il problema è proprio l'anzianità del codice:

Code: [Select]
/usr/lib/gcc/avr/4.3.4/../../../avr/bin/ld: avr:51 architecture of input file `stk500boot.o' is incompatible with avr:6 output
Qui dice appunto che ci sono problemi di incompatibilità fra architetture

Go Up