Re: Menu kezelés C-ben

hg12345 hg12345 at freemail.hu
Fri Sep 21 15:18:16 CEST 2007


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



More information about the Elektro mailing list