Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - deallocazione risorse e jump
Forum - C/C++ - deallocazione risorse e jump

Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:49
Martedì, 01/12/2015
Salve, ho una domanda di puro carattere tecnico da porvi, anche se immagino gia le possibili risposte, vorrei dei riscontri affidabili.
Mi sto lanciando nel primo tentativo di stesura di un bootloader di basso livello per AVR.
So con precisione l'indirizzo di memoria dal quale inizierà l'esecuzione(lo 0x7e00) quindi mi basta passare al main l'attributo section per dire al compilatore in che area di memoria posizionare il main. Ora il vero e proprio dubbio, alla fine del bootloader devo spostare l'esecuzione all'indirizzo 0x0000 per fare questo dichiaro start
Codice sorgente - presumibilmente C/C++

  1. void (*start)() = 0x0000;


e la richiamo al termine del main del bootloader, e qui i conti iniziano a non tornare. Start in assembly viene tradotta come una semplice call ad una subroutine, questo comporta che il vero programma del AVR viene eseguito sopra al bootloader, per esempio senza mai de allocare le variabili locali del bootloader. Mi chiedo l'unica soluzione per una corretta stesura del bootloader sia scrivere il jump finale in assemply?


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 18:06
Mercoledì, 02/12/2015
Sia che fai un JMP o una chiamata a start, le variabili rimarranno allocate sullo stack. Penso dovrai manualmente modificare la register SP per deallocare le variabili del bootloader e poi fare un JMP.


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 19:05
Mercoledì, 02/12/2015
Grazie Piero, se hai letto anche l'altro topic è saltato fuori che il compilatore include nel codice un reset dello stackpointer, quindi questo avverrebbe all avvio del programma principale, dopo il jump, in poche parole mi sono fatto problemi che effettivamente non ci sono. In ogni caso non mi costa nulla includere un istruzione di reset dello stackpointer prima di effettuare il jump, giusto per sicurezza. Grazie della risposta.


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote