STM32L EEPROM Linker Probleme

OP #3418237
Lesenswert?
• ▲
▼
Hallo

Ich bin gerade dabei mich in den STM32L152 einzuarbeiten. EEPROM 
schreiben und lesen klappt auch schon mal. Nun wollte ich, wie bei AVR, 
mein EEPROM in der Art formatieren, dass ich eine große Struct, bzw. 
Array definiere über den ganzen EEPROM und diese dann mit flash.
Dazu habe ich nach langem suchen heraus gefunden, dass das Linker Script 
File wie flogt angepasst werden muss:

1.Teil
/* Specify the memory areas */
MEMORY
{
  FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 128K
  EEPROM (rx)     : ORIGIN = 0x08080000, LENGTH = 4K 
!!!!!!!!!!!!
  RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 16K
  MEMORY_B1 (rx)  : ORIGIN = 0x60000000, LENGTH = 0K
}

2.Teil
SECTIONS
{
…
   .eeprom :
  {
    . = ALIGN(4);
    *(.eeprom)
    . = ALIGN(4);
  } >EEPROM
…
}

3.Teil
Und im Main-File :
#define    EEMEM   _attribute_ ((section(".eeprom")))
EEMEM const uint8_t eepromArray[4095] ;


1. Definieren eines neuen Speicherbreiches mit der Addresse und der 
Größe.
2. Festlegen des Attributes.
3. Array definieren und sagen das es im EEPROM liegen soll.

Soweit so gut. Das compilieren und linken klappt auch aber wenn ich das 
Programm flashen will stürzt der ST-Link/V2 einfach ab. 
"ST-Kink_gdbserver.exe hat ein Problem festgestellt und muss beendet 
werden."

Was könnt die Ursache sein oder habe ich etwas vergessen, falsch gemacht 
oder nicht richtig verstanden.

Danke schon mal für die Hilfe.
OP #3418262
Lesenswert?
• ▲
▼
Also wenn man die Adresse so anpasst das sie in dem Flash bereich liegt 
scheint es zu gehen.
MEMORY
{
  FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 64K
  EEPROM (rx)     : ORIGIN = 0x08002000, LENGTH = 4K
  RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 16K
  MEMORY_B1 (rx)  : ORIGIN = 0x60000000, LENGTH = 0K
}

Aber wie kann man das alles in denn EEPROM des Controller verschieben?
Oder kann man dies nicht wie bei den AVR Typen, da bekommt man ja eine 
extra Datei für den EEPROM.
OP #3419470
Lesenswert?
• ▲
▼
Ja, das ist klar das mit dieser Addresse (0x08002000) die Daten im 
Flash-Bereich landen. Ich wollte damit nur schauen, ob die Formatierung 
und die Syntay richtig ist. Aber wie macht man es wenn die Daten im 
EEPROM landen sollen.
EEPROM (rx)     : ORIGIN = 0x08080000, LENGTH = 4K !!!!

Muss noch was anders in das Linker Skript oder in die Header vom EEPROM.

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.