mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bootloader und JumpToFirmware


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Jürgen H. (nobody)
Datum:

Bewertung
0 lesenswert
nicht 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.
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x800C000);

JumpAddress = *(__IO uint32_t*) (0x800C000 + 4);
Jump_To_Firmware = (pFunction)JumpAddress;
// Initialize user production's Stack Pointer 
__set_MSP(*(__IO uint32_t*) 0x800C000);
Jump_To_Firmware();

Autor: Peter D. (peda)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Jürgen H. schrieb:
> Ich habe mir einen Bootloader für den M4 geschrieben

Und jetzt raten wir alle mal, welcher M4 das sein könnte.

Autor: Jürgen H. (nobody)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kein Problem.....

STM32F417

: Bearbeitet durch User
Autor: Jürgen H. (nobody)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch ein Auszug aus dem Mapfile.
Hier sieht man schön das dass Image auch im richtigen Brereich liegt.
Memory Map of the image

  Image Entry point : 0x08010189

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

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

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

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


Autor: Jürgen H. (nobody)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal ne Info.

Das Problem tritt immer dann ein, wenn ein SVC Aufruf (KEIL RTX) gemacht 
wird.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der 2. Parameter von NVIC_SetVectorTable ist ein Offset und keine 
absolute Adresse

Autor: Jürgen H. (nobody)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja Martin da hast du recht. Danke.

Aber das kam durch mein probieren. Hatte vorher den direkten Zugriff auf 
VTOR drinnen.
SCB->VTOR = 0x800C000; // Vector Table Relocation in Internal FLASH 

Aber das ändert leider nichts an meinem Problem.

Autor: Jürgen H. (nobody)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hab's gefunden.

Eine std lib von STM hat mir den VTOR umgeschrieben.
Nun läuft es wie es soll.

Autor: Bülent C. (mirki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jürgen H. schrieb:
> So hab's gefunden.
>
> Eine std lib von STM hat mir den VTOR umgeschrieben.
> Nun läuft es wie es soll.

klassiker

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.