Gast
#6419675
Hallo, schreibe gerade einen Bootloader für einen 8051 basierenden prozessor. Ich verwende SDCC Nach dem Reset soll immer zunächst der Bootloader laufen, der dann gegebenenfalls das flash beschreibt, aber sonst in das Hauptprogramm springt. Der Bootloader sitzt daher an Addresse 0x0000. Grund ist, dass so selbst im Fall eines Fehlerhaften Updates immer noch der Bootloader installiert ist. Wenn ich nun das Hauptprogramm über --code-loc an Adresse 0x5000 plaziere und vom Bootloader dort hin springe, läuft das Haupprogramm, jedoch nicht dessen Interrupts. Ich verstehe das so, dass SDCC zwar die Interrupt Tabelle ab 0x5000 plaziert, jedoch die Hardware beim Interrupt nach wie vor an die Originalen Adressen springt. (Also z.B. 0xB für Timer1) Scheinbar kann man das nicht ändern? Da ich im Bootloader keine Interrupts verwende, frage ich mich, ob man hier nicht direkt Sprünge an die richtige Stelle plazieren kann. Aber wie würde man so etwas in SDCC bewerkstelligen? Das Beste was mir dazu eigefallen ist, ist für jeden Interrupt eine Funktion der Form
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Im Bootloader zu platzieren. Nicht getestet, aber scheint mir auch nicht die Beste Möglichkeit zu sein. Geht das besser? Dank