Re: Menu kezelés C-ben
hg12345
hg12345 at freemail.hu
Fri Sep 21 16:24:46 CEST 2007
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...
> Szia!
>
> Nem értem amit leírtál :-) Mire akarod használni relativ meg abszolút
> címzést? Nem arra vagyok kíváncsi, hogy hogy akarod megcsinálni,
hanem
> hogy mi a feladat :-))
>
> Üdv,
> Lajos
>
> hg12345 írta:
> > Szia!
> >
> > Elvileg amit leírtam az programmemóriában tárolja ezt a tömböket.
> > De ha nem egybe forditom #include a teljes programot akkkor
bizony
> > legalább két extern változom lesz, a függvény pointer és a
memória
> > pointer. Kényelmes lenne azokat a függvényeket amik
meghatározzák
> > az állíthatóságot egy segmens-be definiálni, (ez könnyen
megoldható)
> > és a segmenses belüli relativ cimet tárolni.
> > static void* ptr= &&offset - &&start, de sajnos azt a GCC futási
időben
> > tudja kezelni, a linker miatt! Mondjuk ez még nem lenne probléma.
> >
> > De hasonló problémák vetödik fel a memória pointer esetén, ezt
már
> > nem tudom eliminálni. Mindenképpen szükséges absolut és relativ
> > cimzés a MENU leírásban, de hogy a relativ címzést elötudjam
állítani
> > korrekten forditási időben kellen két (nekem) absolut (de
forditónak
> > relokalhato) címből előállítani az offsetet, erre már nem képes a
linker
> > miatt.
> > Ha nem pointeresen használom, hanem csinálok egy enum index
név
> > felsorolást, majd egy tömbre ráhuzom és ez alapján genererálom a
> > cimeket, akkor minden cimzés és ezzel kapcsolatos meghivás
konstans
> > index-szü tömbkezelés. Ezzel ez megoldható, de egy hátránya van
ha
> > már haszálom a linkert, igy a különböző programok csak az extern
> > néven definiált változókat látják, ha enum index felsorolást
használok,
> > akkor az include miatt mindenki látja és hozzáfér (elgépelés és
egyébb
> > hülyeség esetén) a neki nem elérhető változokhoz is. Ez nem nagy
> > probléma, de kedvezöbb lenne az global/extern megoldás.
> >
> > Stackelt, Matrix, Tree stilusú MENU-t szeretnék csinálni.... kis
kijelzővel
> > rendelkező készülékek. (1x v. 2x 7segmens kijelző, vagy 2-4 soros
LCD
> > kijelzőn...)
> >
> > A megoldáshoz nagyon közel vagyok, de reméltem valaki már
> > végigjárta elöttem ezt az utat... Vagy egy hasonló, de más
felépítésű
> > megoldástra világít rá....
> >
> >
> >
> >
> >
> >> Helló!
> >>
> >> És ez miért nem jó így, ha csak erre van szükség? A fordítónak
meg
> >>
> > tudod
> >
> >> mondani, hogy a programmemóriában tárolja ezeket a tömböket.
> >>
> >> Üdv,
> >> Lajos
> >>
> >> hg12345 írta:
> >>
> >>> Szia!
> >>>
> >>> Ha ezt így oldanám meg, minden Menühöz saját programot
kellene
> >>>
> > írni
> >
> >>> mind az állításra mind a kirirára, mind a feldolgozásra......
Kérdés,
> >>>
> > hogy
> >
> >>> elferek a memóriában.
> >>>
> >>> Valami ilyesmit szeretnék:
> >>>
> >>> struct MENUITEM
> >>> {
> >>> int iString;
> >>> int *PtrMem;
> >>> char iNumber;
> >>> union{
> >>> struct{
> >>> char Setting;
> >>> char DecimalPoint;
> >>> char Valid;
> >>> };
> >>> void *Fn(void);
> >>> };
> >>> };
> >>>
> >>> #define ITEM(s,pm,in,se,de,va) {s,pm,in,{se,de,va}},
> >>> #define ITEMF(s,pm,in,f) {s,pm,in,{f}};
> >>>
> >>>
> >>> const struct MENUITEM Menu[]={
> >>> ITEM(.........)
> >>> ITEM(.........)
> >>> ITEMF(.........)
> >>> ITEM(........)
> >>> stb
> >>> };
> >>>
> >>> Ez a megoldás egyszerüen szövegesen karbantartható.....
> >>> Ha már benne van a FLASH/ROM-ban onnan már kényelmesen
> >>> feldolgozható....
> >>>
> >>>
> >> -----------------------------------------
> >> elektro[-flame|-etc]
> >>
> >>
> >
> > Olvasd az [origo]-t a mobilodon: mini magazinok a Mobizin-en
> > ___________________________________________________
> > www.t-mobile.hu/mobizin
> >
> > -----------------------------------------
> > elektro[-flame|-etc]
> >
>
> -----------------------------------------
> elektro[-flame|-etc]
>
Olvasd az [origo]-t a mobilodon: mini magazinok a Mobizin-en
___________________________________________________
www.t-mobile.hu/mobizin
More information about the Elektro
mailing list