Hi,
Für ein Hobbyprojekt bin ich gerade in der Konzeptphase für eine
Menüsteuerung (Taster + 2-zeiliges LC-Display) um sowol Parameter
darzustellen als auch zu verändern. Da ich auf einem AVR32 arbeite steht
nur begrenzt RAM zur verfügung, weshalb ich nach einer RAM-Schonenden
Lösung suche;) Folgendes habe ich mir überlegt. Über eure
Meinungen/Anmerkungen/weiteren Ansätze bin ich euch jetzt schon dankbar
;)
Die Idee:
-->|---------|-->|---------|-->|---------|
|DISP_n-1 | | DISP_n | | DISP_n+1|
<--|---------|<--|---------|<--|---------|
|---------|
|Param_n_0|
|---------|
|---------| |---------|
|Param_n_1|---->|ParamCH |
|---------| |---------|
|---------|
|Param_n_x|
|---------|
Also: Es soll 3 Zustände geben:
- Anzeige (DISP) : Hier können Parametergruppen ausgewählt werden
- Parametergr. (PARAM) : Hier kann jeweils ein Parameter der Gruppe
ausgewählt werden.
- ParamChange (PARAM_CH): Hier kann der Parameter (nach Anwahl) geändert
werden.
Das kleine ASCII-Bildchen dient nur der Veranschaulichung, hoffentlich
verwirrt es nicht mehr als das es hilft ;)
Meide Idee war das mit einer doppelt(bzw.dreifach) verketteten Liste zu
lösen in der Vorgänger u. Nachfolger bekannt sind. So könnte man per
Tastendruck bequem im Menü navigieren. Allerdings ist das sehr
RAM-intensiv bzw. ich weiß nicht genau wie ich das ganze möglichst
RAM-schonend umsetzen kann.
Das Menü wird nicht sehr dynamisch sein, es ist also nicht nötig zur
Laufzeit Anzeigelelemente anzufügen womit ein Großeil der Informationen
konstant und somit aus meiner Sicht in dem ROM abgelegt werden können.
Die einzige Information die zum Compilezeitpunkt nicht bekannt ist ist
der aktuelle Wert des jeweiligen Parameters. In Peusocode hätte ich das
jetzt mal so versucht ob das in C überhaupt möglich ist bin ich mir
nicht sicher ;) ??
1 | //Parameter RAM-Variable
|
2 | unsigned char Param_Drehzahl[LCD_NUM_OF_SYMBOLS];
|
3 |
|
4 | //Displayobject Datentyp
|
5 | typedef struct
|
6 | {
|
7 | unsigned char Zeile1[LCD_NUM_OF_SYMBOLS]; //Beschreibung des angezeitgen Wertes
|
8 | unsigned char *p_Zeile2[LCD_NUM_OF_SYMBOLS]; // Parameter
|
9 | struct display *p_next;
|
10 | struct display *p_last;
|
11 | struct display *p_firstParam;
|
12 | } display;
|
13 |
|
14 | //definiertes Displayobjekt im ROM
|
15 | static const Drehzahl=
|
16 | {
|
17 | Zeile1={'D','r','e','h','z','a','h','l'}
|
18 | Zeile2=&Param_Drehzahl
|
19 | p_next=&Temp
|
20 | p_last=&Druck
|
21 | p_firstParam=&Motordrehzahl
|
22 | }
|
Mir wäre sehr geholfen wenn Ihr mir sagen könntet ob das totaler
Schwachsinn ist, oder ob die Idee umsetztbar ist. Gegenüber anderen
Lösungsansätzen bin ich natürlich offen.
Danke u. Gruß
T3Knopap$T