Forum: Mikrocontroller und Digitale Elektronik Struct aus Flash lesen


von Manuel S. (doc-snyder)


Lesenswert?

Hallo Gemeinde,
folgendes Struct liegt im Flash:
1
struct menuEntry{
2
    uint8_t menu_textNr;       // angezeigter Menütext
3
    uint8_t menu_type;         // 0=status  1=Supermenu  2=wahl 3= entscheidung
4
    uint8_t menu_nextOnDown;   // nächster Menüpunkt bei nach links     BUTTON2
5
    uint8_t menu_nextOnUp;     // nächster Menüpunkt bei nach rechts    BUTTON3
6
    uint8_t menu_nextOnReturn; // nächster Menüpunkt bei return         BUTTON1
7
    uint8_t menu_nextOnBack;   // nächster Menüpunkt bei home           BUTTON4
8
    uint8_t menu_varMin;       // minimaler Wert
9
    uint8_t menu_varMax;       // maximaler Wert
10
    uint8_t *menu_varPtr;      // zugehörige Variable
11
    void (*execute) (void);    // Funktion die ausgeführt werden soll
12
}menu_rom_data[33] PROGMEM = {
13
  { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
14
  { 1, 1, 11, 1, 2, 0, 0, 0, 0, 0 },
15
16
[...]
17
18
  { 31, 1, 31, 29, 32, 0, 0, 0, 0, 0 },
19
  { 32, 3, 0, 0, 31, 31, 0, 0, 0, loadBasicsysSetup }
20
};


Ich frage mich nun wie ich ein einzelnes Feld effektiv auslese. Mit 
pgm_read_byte kann ich ja einzelne Bytes auslesen. Aber kann ich auch 
innerhalb des stucts die Felder adressieren? Etwa so:
1
pgm_read_byte( &menu_rom_data[5].menu_type );

Ich würde es ja testen aber mein Board macht seit cih PROGMEM benutze 
gar nichts mehr. :D

Danke schon mal für die Hilfe

Gruß Manuel

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

memcpy_P()

von Stephan K. (dustpuppy)


Lesenswert?

Hi,
meinste nicht, dass das Ganze irgendwann unuebersichtlich wird, wenn die 
Menuestruktur groesser wird und mehr Verschachtelungen vorhanden sind?

Gruesse

Dusty

von Wolfgang H. (Firma: AknF) (wolfgang_horn)


Angehängte Dateien:

Lesenswert?

Hi, Manuel,


schau mal dem Zitronenfalter im Anhang hinterher.
Code aus dem Atmel Butterfly.

Ciao
Wolfgang Horn

von Manuel S. (doc-snyder)


Lesenswert?

danke mit memcpy_p lässt sich arbeiten. bin dadurch auch auf eine ganz 
nette referenz gestossen.

Ich weiß das menü ist nicht ganz optimal, aber ich habe es jetz schon so 
implementiert. An ROM fehlt es mir ja nicht. Alles nochmal überarbeiten 
würde den Rahmen meiner, dieses Semester viel zu kurzen, Semesterferien 
sprengen. Trotzdem danke für eure Tips.

Gruß Manuel

EDIT: Für die, die per Suche hierauf gestossen sind noch der Link:

http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#ga53ee9e2dec1d5f685d78aa8dc444dccb

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.