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

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.