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?