Pointer Wert auf union kopieren



  • Ich habe folgenden code zum ausprobieren geschrieben.Er macht auch was ich mir vorgestellt habe.Nun würde ich aber gerne gerne die Funktion Test anderst aufbauen. Habe mal in Klammern darunter geschrieben wie ich es gerne hätte.Nur wie sieht dann der Aufruf aus?Muss da noch irgend was ändern? Oder geht das gar nicht?

    void Test_Main(void);
    Uint16 *GetPointer(void);
    #define TEST GetPointer();
    
    struct  Rx {          
    	Uint16	Crc:2;			
    	Uint16	Status:2;		
    	Uint16	Daten:12;			
    
    };
    
    union RX_Mess {
       Uint16           all;
       struct Rx  bit;
    }RX_Mess;
    
    void main(void)
    {	
    	Test_Main();
    
    } 
    
    Uint16 *GetPointer(void)
    {
    	static Uint16 buffer[6];
    
    	buffer[0]= 0x0001;
    	buffer[1]= 0x2002;
    	buffer[2]= 0x0003;
    	buffer[3]= 0x4004;
    	buffer[4]= 0x0005;
    	buffer[5]= 0x0000;
    
    	return buffer;
    }
    
    void Test(Uint16 *testptr)
    {
    static Uint16 x=0;
    RX_Mess.all=*testptr;
    x=RX_Mess.all;
    x=RX_Mess.bit.Daten;
    x=RX_Mess.bit.Status;
    x=RX_Mess.bit.Crc;
    }
    
    //So hätte ich das gerne
    void Test(union RX_Mess mess)
    {
    static Uint16 x=0;
    x = mess.all;
    }//
    
    void Test_Main(void)
    {
    Uint16 y=0;
    Uint16 *ptr;	
    	ptr =TEST;
    	while(*(++ptr)!=0)
    	{
    		y=y+1;
    		Test(ptr);
    	}
    }
    


  • Wo genau liegt jetzt das Problem? Wenn du eine union als Parameter übergeben willst, mußt du der Funktion auch eine union übergeben.

    (btw, hältst du es wirklich für eine gute Idee, wenn die Variable den selben Namen bekommt wie ihr Typ?)



  • Es gibt C/C++ Code-Tags! Die sind zum Benutzen da!

    void main
    

    ist kein C Standard.

    Uint16
    

    ist kein C Standard.

    union RX_Mess mess = {1234};
    Test(mess);
    

    Was ist daran so schwierig?


Anmelden zum Antworten