Bootloader

Vorrei una spiegazione sul bootloader.
Ne ho lette di "cotte e di crude" ma ho ancora alcune idee confuse.

Ricapitoliamo:

  1. il bootloader è una porzione di codice che non viene toccata dall'IDE quando si carica uno sketch nell'Arduino.
  2. il bootloader viene eseguito ogni volta che viene data alimentazione al mC prima dell'esecuzione dello sketch.
  3. per cambiare il bootloader bisogna usare un programmatore esterno.

Non capisco però la necessità del bootloader. Non basta ad esempio solo lo sketch nel chip?
Ma si può cambiare/togliere il bootloader? Si può cambiare il bootloader con l'IDE o con questo si può solo programmare 1 volta?
Si può scrivere un proprio bootloader? Con l'IDE?

Grazie dei chiarimenti.

Ed un chiarimento sui "fuse"... che sono? :-?

le 3 asserzioni sono tutte giuste.

La domanda che ti devi fare e': a che serve il bootloader ? Serve per permettere la programmazione del uP direttamente dall'ide attraverso la seriale o una com virtuale usb.

Senza il bootloader saresti costretto a scrivere il programma e caricarlo sul uP tramite un programmatore apposito per quel uP, rendendo molto piu' lenta e poco user friendly, ed anche costosa, l'operazione.

Ma si può cambiare/togliere il bootloader? Si per entrambe, ad esempio se ti serve usare lo spazio che occupa.
può cambiare il bootloader con l'IDE ? Si ma serve cmq un programmatre esterno o almeno dei collegamenti sull'arduino vecchio con FTDI, metdo bitbang
Si può scrivere un proprio bootloader? si, e' anch'esso open source

il bootloader e un pezzo di codice che serve ad interpretare i dati ricevuti in seriale (lo sketch) e scriverlo nella memoria, dato che per scrivere direttamente nella memoria flash si deve usare la porta spi.

Il bootloader e sempre in esecuzione sotto il programma, e come pensare che il bootloader è il sistema operativo e lo sketch è un programma che viene gestito da esso.

ho reso l'idea?

c

pero' pensarlo come SO puo' portare fuori strada perche' il booloader finice il suo compito dopo il boot e non interagisce con lo sketch, diciamo che se proprio si vuole fare un paragone sarebbe meglio dire che e' un bios, ma anche questo sarebbe forzato, diciamo che il boot loader e' come il bootloader.

per chi segue il mondo sat ai bei tempi delle schde taroccate, si usava appunto un bootloader per poter caricare in memoria i nuovi codici.

Quindi definirlo "bootloader" è solo a scelta arbitraria. In realtà di un "boot loader" un Atmega non ne ha bisogno, giusto?

In pratica quando resettato lui cerca del codice eseguibile dalla locazione $0000 della sua memoria. Che poi questa contenga un "caricatore di avvio" o uno sketch poco gliene importa?
Il bootloader non fa altro che verificare che non ci sia in arrivo sulla porta seriale una richiesta di invio codice: in caso affermativo, legge i dati e li scrive nella memoria successiva a quella occupata dal bootloader e poi passa il controllo al codice caricato.

Ma che significato hanno i "fuse"? Perché leggo di "proteggere" dalla scrittura il bootloader con i fuse?

Ciao leo72

Il Bootloader controlla all'accensione o dopo un reset se dalla seriale/USB collegata é possibile caricare un sketch.
In linea di massima esistono 2 versioni: una da 2Kbyte usato fino al Arduino 2009 e una da 500byte usata sul Arduino UNO.
Una volta terminato il caricamento di uno sketch oppure se non c'é richiesta di caricarne uno viene eseguito lo sketch senza ritornare sul bootloader.
Senza bootloader dovresti caricare il sketch tramite un programmore ISP.

I fuse sono dei bit che impostano delle funzioni del ATmega, praticamente il settaggio del controller.
Normalmente non é necessario cambiarli.
Per esempio é definito quale é la sorgente del clock, se esterna o interna, si puó proteggere un programma caricato in modo che non puó essere letto ecc.
Per maggiori informazioni devi leggerti il datasheet del ATmega, ma ripeto per l'uso del Arduino non serve modificare queste impostazioni.

Ciao Uwe

Per altre info puoi dare uno sguardo a questa pagina