mikrocontroller.net

Forum: Compiler & IDEs struct im AVR-Flash statt im RAM - wie?


Autor: beta-frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallöchen,

um RAM zu sparen, möchte ich ein struct vom RAM ins Flash verbannen.
Das struct bildet mir die Menmüstruktur (navigieren und Funktionen
aufrufen) ab. Im Grunde bräuchte ich sogar zwei alternative
Menü-Strukturen, da beim Startverhalten je nach Situation eine von zwei
möglichen ausgewählt werden soll.

struct:
typedef struct{
   CHAR* (*pfkt)(U8, U8*, U8*);  // Mit Eintrag verknüpfte Funktion
   U8 level;         // GruppierungsEbene des Menüeintrages
   CHAR *label;      // Bezeichnungsfeld f. LCD
   U8 navi;          // LevelZiel (1. Eintrag), wenn RET-Taste gedrückt
und Funktionszeiger==NULL.
} menu_t;

exemplarische Definition eines Menüs:
[C]
menu_t menu1[] ={
   /*  callback-fkt.   level  label             navi*/
//Toplevel
   {          NULL,     01,   "Config",         02 },
   {          NULL,     01,   "Info",           03 },
//Config
   {   set_avg_per,     02,   "AVG-Period",     00 },
   {   set_rec_per,     02,   "Recordperiod",   00 },
//Info
   {      get_volt,     03,   "Akku Voltage",   00 },
   {  get_modul_id,     03,   "Modul-ID",       00 },
//Endmarkierung
   {          NULL,     00,   "",               255}
};

Einzelne Bytes oder Strings kriege ich hin. Aber beim struct (oder
eigentlich besser zwei, wovon zur Laufzeit einer genutzt werden soll)
bräucht ich mal Starthilfe.

Vielen Dank - Frank

Autor: beta-frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso,

das [/C] reiche ich hiermit nach;-)
und Compiler ist gcc, Target ist ATmega128

Autor: Detlev Tietjen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reicht es denn nicht, als Attribut 'const' anzugeben?

Gruß, Detlev

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Betr. "CHAR *label;"
http://www.nongnu.org/avr-libc/user-manual/FAQ.htm...
schon gelesen?

Autor: beta-frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Detlev
so einfach macht es einem der AVR mit seiner Havard-Architektur
(Busmäßige Trennung von RAM und Flash -> Zugriffe verschieden) leider
nicht.

@mthomas
Kopfschmerzen macht mir vor allem der Funktionszeiger mit Parameter

@All
Bin also weiter am Suchen... ;-)

Gruß Frank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.