Menu kezelés C-ben
Rancz Lajos
csiga at fosch.com
Fri Sep 21 16:42:25 CEST 2007
Helló!
Értem. Ebben az esetben, megkülönböztetnék kétfajta menüt. Az egyik menü
olyan, ami nem ismétlődik, a másik meg igen, és a struktúrában van
tárolva, hogy hányszor. Tehát a menü függvény eldönti egy definiált
konstans szerint, hogy az most szimpla vagy multi menü-e és annak
megfelelően használja. Pl:
tyepdef struct
{
char* name;
void (*funptr)();
} SimpleMenu;
typedef struct
{
char* name;
char count;
void (*funptr)(int); <= itt adod át, hogy hanyadik, ezt a
multimenut feldolgozó fv. teszi bele. Pl. lesz egy Alarmot bekero fv.
ed, ami megkapja az Alarm számát a doMenu fv. től
} SimpleMenu;
typedef struct
{
char type;
union
{
SimpeMenu smenu;
MultiMenu mmenu;
}
} MenuElement;
Ekkor van egy tömb:
MenuElement menu[] = {......};
a függvény pedig:
int doMenu(MenuElement *mptr)
{
// Mondjuk do-while cikusban
do
{
// Szimpla menu
if (mptr->type = SIMPLE)
{
....
}
// Ismétlődős menu
else
{
....
}
} while (exit == 0);
}
A másik, hogy az adatok tárolását és a menü felépítését nem tudod egy
helyen megoldani, tehát (ha jól értem) az alábbi nem fog menni.
> > struct MENUITEM
> > {
> > int iString;
> > int *PtrMem;
> > char iNumber;
> > union{
> > struct{
> > char Setting;
> > char DecimalPoint;
> > char Valid;
> > };
> > void *Fn(void);
> > };
> > };
hg12345 írta:
> Hi!
>
> Adott egy MENU részlet ami ismétlödik
>
> ALARM:
> ALARM1
> ALARM2
> ..........
> ALARM16
>
> ALARM*:
> CONFIG
> SETPOINT
> HYSTEREZIS <<< erre hivatkozom....
> TIME
>
> Az minden ALARM menünek egy közös almenüje van.
> A memória hozzáférését egyszerüen leirható pl.:
>
> ALARM + n*SIZEOF(ALARM) + (&HYSTEREZIS-&CONFIG)
>
> A memórában igy van elhelyezve. Amikor kezdem feldolgozni a fa ágait,
> a menüleírás alapján, kikapom az ALARM abszolút címét ehhez
> hozzáadom hányadik ALARM-t használom (ezt a menü leírás
> tartalmazza) majd hozzá adom a fa melyik levelén vagyok ez szintén
> egy relativ cim. Az összeadás végén kapok egy abszolút címet ami
> alapján a beolvashatom a X. alarm hiszterézis értékét.
> Minden MENÜ bejegyzéshez tartozik egy memória, de ha minden MENÜ
> bejegyzéshez egyedi saját leírót használnék akkor
> pl.: 3000 * 8 byte = 24Kbyte lenne leirás ami még nem tartalmazná az
> öröklödést.
> a készülékeinkben ez funkciók azonossága miatt, kb 1/10 1/20
> csökkenthető, de a 1/10 esetén is csak 2.4K, mivel a bejegyzések
> azonos öröklödési programokat hívnak, ez is kisebb de minimum
> ugyanakkora területet foglal, mint nem ilyen megoldású.
>
> A maradék helyen 21K elfér a készülék teljes programja...... :-()
>
> Remélem igy érhetöbb vagyok. Ha megnézed ennek a készüléknek a
> MENÜ leírását, talán érthetöbbi válik a dolog. (Az egész 38K-ban elfér
> tokkal vonóval)
> http://meter.hu/adatlap/szabalyozo/pdf/96du_h.pdf
> 7-8 oldal...
More information about the Elektro
mailing list