Aiuto per compilazione STK500boot.c

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

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)
	}

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..

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

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.

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 è:

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

stk500boot.c (47.6 KB)

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 :expressionless: gli "esperti" mi correggeranno. :roll_eyes:

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.

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:

-------- 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.

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.

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!

Avviando la compilazione con "make mega2560" ottengo:

-------- 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.

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

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 :stuck_out_tongue_closed_eyes:

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

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.

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

/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

Ho postato nella sezione internazionale.
Con la 22 hai già provato?

E' la prima prova che ho fatto.

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

In effetti non posso fare a meno di notare che il file è inalterato ;(
Ma scusa..vuoldire che dai tempi delle 022 NESSUNO ha più ricompilato il bootloader di Arduino Mega2560?

Giorgio:
In effetti non posso fare a meno di notare che il file è inalterato ;(
Ma scusa..vuoldire che dai tempi delle 022 NESSUNO ha più ricompilato il bootloader di Arduino Mega2560?

Non so che dire. Forse compilano su altri SO o con altri strumenti (esempio AvrStudio)... boh.

ma provando ad usare la tool-chain contenuta nell'ide 1.0.1?