Mappen von STM32 Flashspeicher auf eine Structure

Gast #6911543
Lesenswert?
• ▲
▼
Hallo,

Ich versuche gerade einen Bereich des Flashspeichers eines STM32F030 auf 
eine Structure zu mappen. Leider bisher ohne Erfolg und ich sehe den 
Wald wohl vor lauter Bäumen nicht.

Meine Struktur:
1
struct espConfig {
2
  unsigned char espName[32];
3
  unsigned char espAPName[32];
4
  unsigned char espAPPassword[32];
5
} espConfig;

Später versuche ich dann eine Speicheradresse zuzuweisen, ab der die 
Informationen im Flash gespeichert sind:
1
struct espConfig *eCfg = (struct espConfig *)0x08007C0A;

Wo liegt da gerade mein Fehler, dass es nicht funktioniert.

Vielen Dank für Tipps im voraus
Gast #6911575
Lesenswert?
• ▲
▼
Ich habe im Flash Speicher an der Position eine Zeichenkette stehen.
Wenn ich die Position it dem STM Link Utility auslese sehe ich die 
Zeichenkette.

Aber meine Struktur scheint auf den Anfang des Flashspeichers zu zeigen 
und nicht an die Adresse wie angegeben.
#6911714
Lesenswert?
• ▲
▼
Moin,

hm, ich würde das so tun...
1
struct {
2
  unsigned char espName[32];
3
  unsigned char espAPName[32];
4
  unsigned char espAPPassword[32];
5
} espConfig;
6

7
...
8

9
espConfig *eCfg = (espConfig*) 0x08007C0A;

Funktioniert so zuverlässig mit RAM und Registern (da die Elemente dann 
zusätzlich als volatile deklariert) und sollte so auch für den Flash 
funktionieren.
#6911763
Lesenswert?
• ▲
▼
nein, damit definierst du eine Variable espConfig (die dann eine struct 
ist).

Wenn du einen Typ espConfig haben willst, musst du in C schreiben:
1
typedef struct {
2
  unsigned char espName[32];
3
  unsigned char espAPName[32];
4
  unsigned char espAPPassword[32];
5
} espConfig;
6
...
7
espConfig *eCfg = (espConfig*) 0x08007C0A;

Wobei man dann eher als Typnamen espConfig_t statt espConfig nehmen 
sollte vielleicht.
#6911795
Lesenswert?
• ▲
▼
Klaus W. schrieb:
> In deinem Bildchen steht was von "eCfg not in scope".
> Stehst du in deinem Programm gerade woanders?

Sieht für mich auch so aus, als ob er gerade an einer Stelle steht, an 
der diese Variable eigentlich gar nicht existiert.

Übrigens:

Harald schrieb:
> Meine Struktur:
> struct espConfig {
>   unsigned char espName[32];
>   unsigned char espAPName[32];
>   unsigned char espAPPassword[32];
> } espConfig;

Damit erzeugst du den Datentyp espConfig und ein Objekt mit gleichem 
Namen von diesem Typ. Ist das so gedacht?
#6911814
Lesenswert?
• ▲
▼
Ich glaube mich zu erinnern, dass (zumindest beim KEIL) man die Variable 
als const deklarieren musste, dann hat der Kompiler die von selber in 
den Flash gepackt. Ganz ohne Kopfstände. Ob und wie er die dann ggf zur 
Verarbeitung in den RAM kopiert, liegt dann an der weiteren Verwendung.

Geht mbMn bei fast allen Architekturen, die Programm- und Datenspeicher 
nicht explizit trennen. Also nicht beim AVR...

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.