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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren