Go Down

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

Giorgio

#90
May 25, 2012, 10:56 am Last Edit: May 25, 2012, 11:00 am by Giorgio Reason: 1
@astrobeed
innanzitutto ancora grazie.
-Le cose migliorano: ora in effetti flashando il file 2560_Boot.hex il led lampeggia in maniera tranquillizzante.
Tuttavia se successivamente provo a caricare uno sketch mediante IDE ottengo lo stesso problema di prima :
Code: [Select]
Dimensione del file binario dello sketch: 11.100 bytes (su un massimo di 258.048 bytes)
avrdude: verification error, first mismatch at byte 0x0000
        0x02 != 0xff
avrdude: verification error; content mismatch


-se con la stessa procedura scrivo il file stk500boot_V2_mega2560.hex posso successivamente caricare gli sketch senza problemi.ù


Tra parentesi, cosa importante: Se provo a caricare il file 2560_Boot.hex che hai generato tu,funziona tutto senza problemi, a maggior conferma che è un errore di compilazione e basta!

astrobeed


-Le cose migliorano: ora in effetti flashando il file 2560_Boot.hex il led lampeggia in maniera tranquillizzante.
Tuttavia se successivamente provo a caricare uno sketch mediante IDE ottengo lo stesso problema di prima :


Purtroppo sono fuori e mi tocca andare a "memoria", ho fatto un'altra piccola modifica al progetto, riscaricalo dal post precedente, ora dovrebbe funzionare perfettamente.

Giorgio

EUREKA!!

0 Warning!

E lo sketch funziona!

Grazie!!

Che bello ora posso finalmente cominciare a risolvere il mio problema..

astrobeed


Che bello ora posso finalmente cominciare a risolvere il mio problema..


E adesso comincia il vero divertimento, o sofferenza a seconda dei punti di vista  :smiley-mr-green:

Giorgio

Ma si dai, chiamiamolo divertimento.Ancora grazie!

@lesto
avevi ragione:se evito quella parte,commentando alcune righe non ottengo il risultato desiderato.Dove mi suggeriresti di mettere il timeout?

Michele Menniti

Nonn c'è niente da "fare": questo è un grande Forum, non c'è problema che non si risolva XD
Buon proseguimento Giorgio e tienici aggiornati, mi spiace averti potuto dare solo supporto morale, ma a volte anche quello serve per non scoraggiarsi subito ;)
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

lesto

lol hai commentato tutto tranne l'unica istruzione bloccante:

Quote
while ((!(Serial_Available())) && (boot_state == 0))


quindi io farei così:

Quote

unsigned long timeout = millis() + 5000; //tempo atuale + 5 secondi

while ((!(Serial_Available())) && (boot_state == 0) && millis() < timeout)


in questo modo il boot-loader aspetta 5 secondi lo sketch, se no parte normalmente.

NON SO SE LA MILLIS FUNZIONA DI GIà, in caso crei una unsogned long millis, e la incrementi nel ciclo. certo non si tratterà più di millisecondi ma il valore sarà da trovare "a naso"... ma direi che te la puoi cavare da solo :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

astrobeed


NON SO SE LA MILLIS FUNZIONA DI GIà, in caso crei una unsogned long millis, e la incrementi nel ciclo. certo non si tratterà più di millisecondi ma il valore sarà da trovare "a naso"... ma direi che te la puoi cavare da solo :)


Il bootloader è scritto in C ANSI, scordati di usare millis e tutte le altre "comodità" di Wiring.

lesto

non vorrei dire baggianate ma millis e micro sono scritte in C ansi, magari non ci sono nel boot-loader, ma fare un copia-incolla brutale delle funzioni (i includere la libreria) dovrebbe essere possibile senza modifiche.

in effetti mi sembrava strano che ci fossero tutte le librerie arduino.h, mi ha tratto in inganno la Serial_Available()
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

astrobeed


non vorrei dire baggianate ma millis e micro sono scritte in C ansi, magari non ci sono nel boot-loader, ma fare un copia-incolla brutale delle funzioni (i includere la libreria) dovrebbe essere possibile senza modifiche.


La millis per funzionare usa il timer 0 e il relativo interrupt, tutte cose che non fanno parte del bootloader che già è abbastanza carico di suo senza complicargli ulteriormente la vita.

leo72

@lesto:
Il timer 0 viene inizializzato solo quando si programma con l'IDE perché fa parte del core di Arduino, il bootloader non lo usa. Forse con uno pseudo ciclo di ritardo (un contatore a vuoto) ma non so.

lesto

un ciclo vuoto non funziona, il compilatore lo elimina in automatico.(furbo, eh? :smiley-mr-green:)
ogni iterazione di while aumenti un contatore, e quando supera una soglia esci dal while. in pratica trasformi quel while in un for... la logica è la stessa ma "freghi" il compilatore.
Certo è più difficile stimare la durata del ciclo, ma andando a tentativi non si rompe certo niente.

DA CONTROLLARE CHE NON VENGA ACCIDENTALMENTE SOVRASCRITTO, MAGARI IN MANIERA PARZIALE LO SKETCH NEL MICRO!
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

leo72

Altrimenti, visto che il bootloader è comunque di diversi kB, si può impostare il timer 2 per incrementare un contatore una volta ogni ms, un po' come faccio io sulla swRTC. In questo modo si ha un contamillisecondi com poche righe di C, basta agire direttamente sui registri.

Giorgio

Uh state andando un po sul difficile per me..
Nel frattempo sto provando con qualche contatore,qualche delay e qualche forzatura di bootstate, ma ho trovato solo un gran numero di modi di evitare che lo sketch parta ;)

Caspita che parto..

lesto

già bisogna entrare più in merito.. quando uppi il codice, poi non parte linearmente, ma mi pare ci sia un reset a fine upload.se così fosse bisogna fare in modo che invece parta lo skecth senza quel reset.
sinceramente è solo un'idea, prima di esprimermi seriamente voglio osservare bene tutto il codice, altrimenti son solo supposizioni
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up