[elektro] C struktura kérdés

hg12345 hg12345 at freemail.hu
Fri Apr 16 17:41:24 CEST 2010


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



More information about the Elektro mailing list