Hallo,
ich suche mich jetzt schon ne ganze Weile dumm und deppert.
Ich habe mir einen Bootloader für den M4 geschrieben, der ja nach
Anforderung zwei unterschiedliche Images im Flash aufrufen soll.
Das funktionierte auch immer gut.
Da sich aber nun der Speicher geändert hat, habe ich die Sprungadresse
von 0x800C000 auf 0x8010000 ändern müssen. Und nun wird zwar die
Firmware noch angesprungen aber landet bei der Initialisierung der
globalen Variablen auf der Adresse 0xFFFF FFFE.
Gelinkt wurde die Firmware natürlich auch für den neuen Speicherbereich.
Gibt es Einschränkungen welchen Speicher man starten kann? Oder wo
könnte das Problem liegen?
Beide Adressen liegen am Start eines Flashsectors.
Hier der Code zum Sprung der funktioniert.
1 | NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x800C000);
|
2 |
|
3 | JumpAddress = *(__IO uint32_t*) (0x800C000 + 4);
|
4 | Jump_To_Firmware = (pFunction)JumpAddress;
|
5 | // Initialize user production's Stack Pointer
|
6 | __set_MSP(*(__IO uint32_t*) 0x800C000);
|
7 | Jump_To_Firmware();
|