Hallo,
ich habe ein größeres Problem bei der Verwendung eines
Second-Stage-Bootloaders auf dem ADUC7060.
Das Projekt besteht aus einem Bootloader welcher im Speicher unter
0x80000 – 0x807FF liegt und einer Anwendung welche bei 0x80800 beginnt.
Ohne Bootloader funktioniert die Anwendung fehlerfrei, wenn sie von der
Adresse 0x80000 ausgeführt wird. Der Bootloader selbst initialisiert
einige Hardware und springt unter gewissen Bedingungen in die Anwendung
mittels
1 | void Bootloader_JumpToApplication(uint32_t targetAddress)
|
2 | {
|
3 | //!< funtion pointer definition for entry into main application
|
4 | typedef void (*pFunction)(void);
|
5 |
|
6 | // disable all interrupts before do anything
|
7 | __disable_irq();
|
8 |
|
9 | pFunction EntryPoint = (pFunction)targetAddress;
|
10 |
|
11 | EntryPoint();
|
12 | }
|
Die Anwendung reinitialisiert im StartUp die Vectoren und legt diese in
den RAM. Anschließend wird der restliche RAM mit 0 beschrieben.
Starte ich die Anwendung dann direkt, wird sobald ich die
Interrupt-gesteuerte Kommunikation starte, der pAbt Handler ausgelöst.
Setze ich im Interrupt einen Breakpoint, springt er beim Debuggen
dorthin. Lösche ich ihn dann und lass die Anwendung weiter laufen, sehe
ich, dass der Controller reseted und anschließend funktioniert die
Kommunikation fehlerfrei.
Ich vermute daher, dass der Fehler bei den Vectoren zu suchen ist, finde
aber keinen Ansatzpunkt.
Hilfreiche Vorschläge oder Fragen zur Präzesierung sind gern gesehen.