Struct aus Flash lesen

OP #2379083
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
OP #2379418
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

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