Hallo,
ich schildere mal kurz was ich vorhabe, dann die Fragen.
Ich binde mich in ein bestehendes Bussystem ein. Da klappt prima. Nun
will ich das ganze über einen Bootloader updatebar machen (sowie den
Bootloader selbst ?).
ich verwende den avr-gcc und zur Zeit einen Mega8515.
Ich wollte das folgendermassen machen:
Im Bootloader steht der Code zur Auswertung des Protokolls "void
Parse(void)". Im Anwendungsprogramm sind nur Funktionen die aus der
"parse()" aufgerufen werden. Erkennt die parse() den Update Modus,
deaktiviert diese alle Interrupts und geht in eine Funktion die dem
UART pollt ohne Ints (einfacher), die im Bootloader steht. Nun kann ich
das Anwendungsprog löschen und neu schreiben.
Bei bestimmten Befehlen ruft die parse() Funktionen auf um z.B. Relais
zu schalten. z.B. "Relais(Nr, status)", also mit Parametern.
Die Funktion "parse()" wird aus der Mainschleife aufgerufen sobald
neue Daten im UART Eingangspuffer stehen (Dauert zu lange für Aufruf
aus einem Interrupt). Kommt jetzt z.B. ein Relais Befehl, muß ja die
Funktion "parse()" im Bootloader wissen WO im Anwendungsprogramm die
Funktion Relais steht. Das geht vermutlich mit Zeiger auf Funktionen
(Funktionstabelle) ? Kann mir da einer einen Tip geben wie man sowas
macht. Bei jedem Kompile verschieben sich ja die Funktionen im
Anwendugsprogramm. Daher müsste vermutlich auch das Anwendugsprogramm
die Funktionstabelle stellen ?
Wie kann ich aber den Bootloader selbst updaten, wenn ich z.B. die
Funktion parse() ändere ?
Mir fällt da nur folgendes ein.
1) Anwendungsprog löschen
2) Neuen Bootloader in Anwendungsspeicher schreiben (Zwischenspeicher)
3) Wenn fertig mit einer kleinen Routine das Prog in den Bootloader
kopieren
4) Neustart
5) Anwendungsprog wieder laden
Die Funktion von 3) müsste am Ende des Bootloaders stehen, wo diese
nicht überschrieben wird. Das Anwendungsprog kann ja nicht den
Bootloader überschreiben ?!
Ach ja, ich würde den Bootloader mehr als "BIOS" einsetzen. So kommt
das ganze auch ohne gültiges Prog ans laufen.
1) Bootloader start
2) ist Anwendungsprog gültig -> Main starten, sonst poll Modus im
Bootloader für Systemupdate
Oder denke ich da im Moment zu kompliziert ?
Für Tips bin ich jederzeit dankbar.