[elektro] C struktura kérdés

hg12345 hg12345 at freemail.hu
Fri Apr 16 18:31:55 CEST 2010


:-)
Sajnos már van egy halom macro, tovább nem akarom feszegetni.

Ez szerencsémre tökéletesen olvasható szövegesen szerkeszthető és nagyon tömör. A MODBUS regiszter kiosztást is megadja egyben. A függvény amit látsz az csak az öröklődést biztosítja és az eredményét a hívási pointere helyére teszi. A minden készülékünkben ezt használjuk.



  Szia!

Na most esett le :) Nem akarod kiírni az a plusz egy pontot meg a struktúra
nevét. Ok. Sztem makrózd meg.

ps: Ha jól értelmezem ebben a struktúrában a menü, a kezelő  fv és a
szükséges adatok vannak egyben. Nem lenne jobb szétszedni? Volt egy nagyon
hasonló elven működő menürendszer amit csináltunk még 8051-re, de
végeredménye egy nagyon karbantarthatatlan, átláthatatlan rendszer lett

üdv
Lajos

2010/4/16 Lajos Rancz <lajos.rancz at gmail.com>

> Szia!
>
> Oké, ha jó értem, akkor tagITEMu struct utolsó uninjában lévő struct-ot
> szeretnéd használni a tagITEMstatus structban. Erre is áll amit Arnold
> mondott, tehát hogy a két struct előtt van egy typedef struct és ezt
> használod mindkettőben.
>
>
> Üdv,
> Lajos
>
> 2010/4/16 hg12345 <hg12345 at freemail.hu>
>
>> Ám legyen  :-)
>> Szerintem ebből se értetek többet.
>>
>> Azért használok typedef-t mert így egyszerűbb később a kezelése.
>>
>> A második typedef-be szeretném a "Legacy"  structuráját átmenteni.
>> A jelenlegi kis különséget még tudom oldani, nem ez a problémám :-)
>> --------------------------------------------------------------------
>> typedef struct tagITEMu{
>>                        struct{
>>                                        iStr_t          iString:12;
>>                                     //String Index
>>                                        unsigned        No:4;
>>                                                     //kisegitő sorszám
>>                                        };
>>
>>                        union{
>>                                struct{
>>                                        unsigned        Default:12;
>>                             //default érték
>>                                        unsigned        Ch:4;
>>                                             //csatorna sorszám
>>                                };
>>                                struct{
>>                                        unsigned        ItemDelta:12;
>>                     //a menü blokk mérete....... (igy nagyobb területet
>> tudok definiálni)
>>                                };
>>                        };
>>
>>                        union{
>>                                unsigned int     Tag3rd;
>>                              //ezt nem használom sehol csak az érték
>> adásnál....
>>                                MIndex_t        ItemStart;
>>                                      //következő ITEM kezdö címe...  (nincs
>> meghatározva a kezdő hely!!!!)
>>                                unsigned int    *pRam;
>>                              //Ram ban tárol érték, elvileg ezt is tudom
>> korlátozni erre a tartományra....
>>                                struct {
>>                                        unsigned                SelIndex:1;
>>                                     //kulső vagy helyettesítő index
>>                                        eE2index_t      E2Index:15;
>>                             //külső memória cim
>>                                        };
>>                                unsigned short  Address;
>>      //Második memória szó
>>                        };
>>
>>                        union{
>>                                unsigned short  Legacy;
>>                     //hozzáféréssel kapcsolatos adatok
>>                                void (*pF)(struct tagITEMu *p);
>> //függvény pointer  ezért a legalsó bitje mindig nulla!, a pointer a
>> változtatások miatt szükséges
>>                                struct{
>>                                        FunctConst_t    SelFunct:1;
>>                     //0: a tárol érték egy függvény címet takar....  1:
>> konstans megadás
>>                                        unsigned        :2;
>>                             //!!! Free szabadon felhasználható
>>                                        EditType_t              EditType:5;
>>                             //állítási tipus
>>                                        DecPoint_t              DecPoint:4;
>>                             //decimál point
>>                                        Access_t
>>  Access:4;                                       //hozzáférési jog
>>                                        };
>>                        };
>>                } ITEMu_t;
>>
>>
>> typedef struct tagITEMstatus{
>>                                        unsigned
>>  Live:1;                                         //0: ez a csatorna nem
>> létezik, 1 a csatorna létezik....
>>                                        unsigned        :2;
>>                             //!!! Free szabadon felhasználható
>>                                        EditType_t              EditType:5;
>>                             //állítási tipus
>>                                        DecPoint_t              DecPoint:4;
>>                             //decimál point
>>                                        Access_t
>>  Access:4;                                       //hozzáférési jog
>>                                }ITEMstatus_t;
>>
>>
>> --------------------------------------------------------------------
>>
>>
>>
>>
>>
>>
>>
>>  Szia!
>>
>> Ezt nem értem (az elsőt sem). Meg tudnád magyarázni egy bővebb példával?
>> Annyira leegyszerűsítetted, hogy nem érthető :o
>>
>> Üdv,
>> Lajos
>>
>> 2010/4/16 hg12345 <hg12345 at freemail.hu>
>>
>> > Ettől féltem :-(
>> >
>> > Mint említettem ez csak egy kiragadott példa.
>> > Az eredeti helyzetben egy ROM-ban összetett konstans leírását
>> tartalmazza a
>> > strutc. Majd ez a struct igen sok helyen szerepel további struct
>> belsejében.
>> > Mire leírom a teljes kifejtést, nem férek el monitoron, pedig nem kicsi,
>> és
>> > értelmetlen lenne külön kifejteni a bitselect, mikor az többivel együtt
>> > értelmes.
>> >
>> > Ez a kis darab máshol és más környezetben szerepel, de a végén
>> találkozik
>> > az eredeti struct-val
>> >
>> > Én nem akartam nevet adni a változó résznek, csak a struct-nak, hogy
>> később
>> > hivatkozni tudjak erre a struct meghatározásra. Minden meghatározást
>> > szeretek egyszer definiálni, és a fordító bábáskodására bízom magamat és
>> > programomat.
>> >
>> >  pontosan nem ertelek, de:
>> >
>> > typedef struct{
>> >           unsigned b1:1;
>> >           unsigned b2:1;
>> >           };
>> >
>> > }AAA_T;
>> >
>> > typedef  union {
>> >          long   V1;
>> >         AAA_T tagAAA;
>> >          } TEST_t;
>> >
>> >
>> > miert nem jo?
>> >
>> > A.
>> > On 2010. 04. 16. 15:32, hg12345 wrote:
>> > > Hi!
>> > >
>> > > Hogyan lehet egy unnamed struct struktura nevet adni?
>> > >
>> > > typedef  union {
>> > >          long   V1;
>> > >           struct tagAAA{
>> > >            unsigned b1:1;
>> > >            unsigned b2:1;
>> > >           };
>> > >          } TEST_t;
>> > >
>> > >
>> > > typedef struct tagAAA  AAA_t;
>> > >
>> > > és későbbiekben ezt a typedef-et szeretném használni. A belső
>> > strukturának nem szeretnék nevet adni (unnamed).
>> > >
>> > > A fordító említi, hogy a tagAAA nem definiáltam ami jogos is.
>> > > Ezért később nem is tud rá hivatkozni.
>> > >
>> > > Ha felcserélem a TYPEDEF meghatározásokat vagy csak struct névvel
>> > definiálom ekkor nem tudok unnamed struct létrehozni, mert változó névre
>> > szükség van!
>> > >
>> > > #define esetén, meg nem válik azonos típusúvá  a két struktura, ezért
>> > castolás nélkül nem tőtlhetők egymásba.
>> > >
>> > > A fenti példa csak egy egyszerűsítés de a lényeg jól látszik belőle.
>> > >
>> > > Van erre megoldás?
>> > >
>> > > -----------------------------------------
>> > >           elektro[-flame|-etc]
>> > >
>> >
>> > -----------------------------------------
>> >          elektro[-flame|-etc]
>> >
>> > -----------------------------------------
>> >          elektro[-flame|-etc]
>> >
>> -----------------------------------------
>>          elektro[-flame|-etc]
>>
>> -----------------------------------------
>>          elektro[-flame|-etc]
>>
>
>
-----------------------------------------
          elektro[-flame|-etc]



More information about the Elektro mailing list