Ich entwickle für den STM32F0 mit Keil uVision.
Ich habe einen benutzerdefinierten Bootloader geladen, der unter der Adresse 0x08000000 ausgeführt wird. Ich brauche den Bootloader, um zu meiner Hauptanwendung zu springen, die ich unter der Adresse 0x08003000 flashe. Das ultimative Ziel ist es, Remote-Updates der Hauptanwendung zu ermöglichen. Der Bootloader-Code, der zur Anwendung springt, lautet wie folgt:
__disable_irq();
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS+4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Jump_To_Application();
Ich erhalte einen harten Fehler in der Zeile Jump_To_Application() mit der Meldung „Cannot access memory“ von Keil.
In Keil habe ich die IROM1-Startadresse in der Projektkonfiguration meiner Hauptanwendung auf 0x08003000 gesetzt. Ich habe das Gefühl, dass das Problem in einigen weiteren Einstellungen in Keil liegt. Sollte IROM2 beispielsweise auf irgendetwas eingestellt werden? Sollte etwas von den Standardeinstellungen in der Keil-Konfiguration innerhalb des Bootloader-Projekts angepasst werden?
Hat jemand irgendwelche Empfehlungen?
Ich hatte das gleiche Problem: Ich habe es mit diesen Zeilen auskommentiert gelöst:
__disable_irq();
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Einige Ratschläge für alle, die zum ersten Mal einen Bootloader schreiben:
Verwandeln Sie Ihren Code in kleine Abschnitte:
Sie müssen den Offset der Vektortabelle neu konfigurieren. Der Offset ist die Startadresse Ihrer App.
Ihr Bootloader-Code sollte so aussehen:
__disable_irq();
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS+4);
Jump_To_Application = (pFunction) JumpAddress;
SCB->VTOR = APPLICATION_ADDRESS;
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Jump_To_Application();
Und wenn Sie STM32CubeMX zum Generieren Ihres Codes verwendet haben, müssen Sie dieselbe Codezeile am Anfang von main() Ihrer App hinzufügen:
SCB->VTOR = APPLICATION_ADDRESS;
Da die Systeminitialisierung den Offset der Vektortabelle zurücksetzt, muss der Offset neu konfiguriert werden, sodass er auf die Startadresse Ihrer App zeigt.
Batuu
rfkortekaas
max
max