Ich versuche gerade, einen benutzerdefinierten Bootloader für avr zu bauen. Ich weiß, dass die Bootloader-Funktionen mit dem Anwendungsprogramm geteilt werden können. Ich bin wirklich verwirrt mit der Hauptfunktion. Haben Bootloader und Anwendungsprogramm beide eine Hauptfunktion? Wenn nicht, wie man zwei getrennte Programme mit nur einer Hauptfunktion schreibt
Anwendungsprogramm:
#include <avr/io.h> // application program at 0x0000
#include <string.h>
int main()
{
uart_init();
}
Bootloader-Programm:
#include <avr/io.h>
#include <avr/boot.h>
void uart_init();
void (*funcptr)( void ) = 0x0000;
int main(void)
{
uart_init();
//Boot or Goto Application program
}
void uart_init()
{
//UART initialization code;
}
Ich würde sie getrennt halten.
Was Sie tun können, ist:
Das Kombinieren von Bootloader und Hauptprogramm in einer Binärdatei macht keinen Sinn, es sei denn, Sie möchten etwas ganz Besonderes erreichen. Der Bootloader wird normalerweise zum Flashen/Upgrade des Hauptprogramms über eine "normale" Schnittstelle (USB, UART) verwendet, und der BL-Code wird normalerweise nur einmal über ISP/JTAG hochgeladen. Der BL-Code unterstützt möglicherweise auch die Verschlüsselung, um Ihren Code nicht an alle weiterzugeben, die Ihr Gerät flashen (Firmware-Upgrade).
Wenn der Bootloader-Code eingegeben wird (abhängig von FUSEs), sollten Sie schnell entscheiden, ob Sie zum Hauptcode springen oder im Bootloader bleiben. Der Standard-Bootloader von Arduino verwendet Timeouts, die auf den Stk-Protokoll-Header auf der seriellen Schnittstelle warten, was sehr ärgerlich ist, da es jeden Bootvorgang um einige Sekunden verlängert. Ich ziehe es vor, wenn eine Benutzeroberfläche vorhanden ist (Taste, ...), schnell zu testen, ob der Benutzer die Firmware zum Flashen bringen möchte (Taste nach dem Aus- und Einschalten gedrückt halten oder so).
gzix
Tom L.
gzix
Tom L.
gzix