Bootloader und JumpToFirmware

OP #5431376
Lesenswert?
• ▲
▼
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();
OP #5431389
Lesenswert?
• ▲
▼
Hier noch ein Auszug aus dem Mapfile.
Hier sieht man schön das dass Image auch im richtigen Brereich liegt.
1
Memory Map of the image
2

3
  Image Entry point : 0x08010189
4

5
  Load Region LR_IROM1 (Base: 0x08010000, Size: 0x0000d8e8, Max: 0x00054000, ABSOLUTE, COMPRESSED[0x0000d7f4])
6

7
    Execution Region ER_IROM2 (Base: 0x08010000, Size: 0x0000d700, Max: 0x00054000, ABSOLUTE)
8

9
    Base Addr    Size         Type   Attr      Idx    E Section Name        Object
10

11
    0x08010000   0x00000188   Data   RO            3    RESET               startup_stm32f4xx.o
12
    0x08010188   0x00000008   Code   RO        17969  * !!!main             c_w.l(__main.o)
13
    0x08010190   0x00000034   Code   RO        18772    !!!scatter          c_w.l(__scatter.o)
14
    0x080101c4   0x0000005a   Code   RO        18770    !!dczerorl2         c_w.l(__dczerorl2.o)
15
    0x0801021e   0x00000002   PAD
16
    0x08010220   0x0000001a   Code   RO        18774    !!handler_copy      c_w.l(__scatter_copy.o)
17
    0x0801023a   0x00000002   PAD
18
    0x0801023c   0x0000001c   Code   RO        18776    !!handler_zi        c_w.l(__scatter_zi.o)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.