Arbeitsspeicher sparen

OP #2378910
Lesenswert?
• ▲
▼
Hallo Leute,

ich habe trotz Optimiereung schon 1,7 kByte meines SRAM (Mega 32) voll 
wenn ich meinem AVRStudio glauben kann.

Meine Frage ist nun woher kommt dieser Verbrauch? Ich schätze meine 
Variablen auf ca 50-100 an der Menge plus ein Bündel von ca 1kB im Menü 
drin:
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] = {
13
  { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
14
  { 1, 1, 11, 1, 2, 0, 0, 0, 0, 0 },
15
  { 2, 1, 4, 2, 3, 1, 0, 0, 0, 0 },
16
  { 3, 2, 0, 0, 2, 2, 0, 0, &sysSetup.DCF77_enabled, 0 },
17
  { 4, 1, 4, 2, 5, 1, 0, 0, 0, 0 },
18
  { 5, 2, 0, 0, 6, 4, 0, 99, &sysTime.date.year, 0 },
19
  { 6, 2, 0, 0, 7, 5, 1, 12, &sysTime.date.month, 0 },
20
  { 7, 2, 0, 0, 8, 6, 1, 31, &sysTime.date.day, 0 },
21
  { 8, 2, 0, 0, 9, 7, 1, 7, &sysTime.date.weekDay, 0 },
22
  { 9, 2, 0, 0, 10, 8, 0, 23, &sysTime.time.hour, 0 },
23
  { 10, 2, 0, 0, 4, 9, 0, 59, &sysTime.time.minute, 0 },
24
  { 11, 1, 23, 1, 12, 0, 0, 0, 0, 0 },
25
  { 12, 1, 16, 12, 13, 11, 0, 0, 0, 0 },
26
  { 13, 2, 0, 0, 14, 12, 15, 35, &sysSetup.tempSetWinter, 0 },
27
  { 14, 2, 0, 0, 15, 13, 15, 25, &sysSetup.tempSetSummer, 0 },
28
  { 15, 2, 0, 0, 12, 14, 1, 15, &sysSetup.tempHyst, 0 },
29
  { 16, 1, 20, 12, 17, 11, 0, 0, 0, 0 },
30
  { 17, 2, 0, 0, 18, 16, 30, 90, &sysSetup.humiSetWinter, 0 },
31
  { 18, 2, 0, 0, 19, 17, 30, 90, &sysSetup.humiSetSummer, 0 },
32
  { 19, 2, 0, 0, 16, 18, 5, 30, &sysSetup.humiHyst, 0 },
33
  { 20, 1, 20, 16, 21, 11, 0, 0, 0, 0 },
34
  { 21, 2, 0, 0, 22, 20, 6, 18, &sysSetup.minSunshineDuration, 0 },
35
  { 22, 2, 0, 0, 20, 21, 6, 18, &sysSetup.maxSunshineDuration, 0 },
36
  { 23, 1, 27, 11, 24, 0, 0, 0, 0, 0 },
37
  { 24, 2, 0, 0, 25, 23, 0, 255, &sysSetup.nightRed, 0 },
38
  { 25, 2, 0, 0, 26, 24, 0, 255, &sysSetup.nightBlue, 0 },
39
  { 26, 2, 0, 0, 23, 25, 0, 255, &sysSetup.nightGreen, 0 },
40
  { 27, 1, 29, 23, 28, 0, 0, 0, 0, 0 },
41
  { 28, 3, 0, 0, 27, 27, 0, 0, 0, save_sysSetup },
42
  { 29, 1, 31, 27, 30, 0, 0, 0, 0, 0 },
43
  { 30, 3, 0, 0, 29, 29, 0, 0, 0, load_sysSetup },
44
  { 31, 1, 31, 29, 32, 0, 0, 0, 0, 0 },
45
  { 32, 3, 0, 0, 31, 31, 0, 0, 0, loadBasicsysSetup }
46
};
47
char menu_strings[33][21] = {
48
"Stats",
49
"Zeiteinstellungen",
50
"DCF",
51
"DCF ein/aus",
52
"Zeit einstellen",
53
"Jahr",
54
"Monat",
55
"Tag",
56
"Wochentag",
57
"Stunde",
58
"Minute",
59
"Klimaeinstellungen",
60
"Temperatur",
61
"Wintertemperatur",
62
"Sommertemperatur",
63
"Temp-Hysterese",
64
"Feuchtigkeit",
65
"Winterfeuchtigkeit",
66
"Sommerfeuchtigkeit",
67
"Humi-Hysterese",
68
"Lichtdauer",
69
"Wintertag",
70
"Sommertag",
71
"Nachtbeleuchtung",
72
"Rot",
73
"Gruen",
74
"Blau",
75
"Einst. speichern",
76
"speichern",
77
"Einst. laden",
78
"laden",
79
"Einst. zuruecks.",
80
"zuruecksetzen"
81
};


Wie kann ich das so arrangieren, dass das nicht im Ram liegt?
Ich habe schon einmal was vom Variablen im Flash speichern, bin mir aber 
nicht sicher ob das so funktionieren kann.

Ich bitte um Schlägwörter, Tipps und Links. Ich verlange natürlich keine 
Lösung oder gar Code.

Danke schon mal.
Grüße
Manuel
Gast #2378926
Lesenswert?
• ▲
▼
> Ich bitte um Schlägwörter, Tipps und Links. Ich verlange natürlich keine
> Lösung oder gar Code.

Da gibt es einen kompletten Abschnitt drüber im AVR-GCC-Tutorial. Such 
mal nach PROGMEM und PSTR...

In der Artikelsammlung sind auch Projekte beschrieben, die mit einer 
Menüführung auf einem LCD arbeiten. Da ist wahrscheinlichst auch 
entsprechender Code zu sehen.

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.