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&#337;, 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&#337;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&#337;ben kellen két (nekem) absolut (de 
forditónak 
> > relokalhato) címb&#337;l el&#337;á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&#337; 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&#337; 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&#337;vel 
> > rendelkez&#337; készülékek. (1x v. 2x 7segmens kijelz&#337;, vagy 2-4 soros 
LCD 
> > kijelz&#337;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&#369; 
> > 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