[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