Menu kezelés C-ben

Rancz Lajos csiga at fosch.com
Fri Sep 21 15:21:23 CEST 2007


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]
>   



More information about the Elektro mailing list