Pointer Problem
-
Hallo habe ein kleines Problem was mein leider recht dürftiges Verständnis von Pointern überschreitet.Ich habe folgenden Code geschrieben der auch soweit funktioniert.
int WritePICData(Uint8 *pData, Uint8 len, Uint8 SlaveAddr ) { Uint8 Res =0; Uint8 i = 0; struct I2CMSG SerMes; GI2CMsgStatus = I2C_MSGSTAT_SEND_NOSTOP; SerMes.SlaveAddress = SlaveAddr<<1; SerMes.MasterAddress = I2C_MASTER_ADDR; SerMes.Offset= 0x80; SerMes.NumOfRcvBytes = 2; SerMes.NumOfSendBytes = 0x0B; for (i =0; i <len ;i++) { SerMes.MsgSendBuffer[i] = *(pData++); } SerMes.MsgSendBuffer[len] = Checksum( (Uint8*)&SerMes, 15 ); Res = I2CMTransceive( SlaveAddr, SerMes.NumOfSendBytes+DEFAULT_MESS_BYTES, (Uint8*)&SerMes.MasterAddress, SerMes.NumOfRcvBytes, (Uint8*)&SerMes.MsgRcvBuffer ); if (Res == I2C_NO_SLAVE) { return PCK_WRITE_DATA_ERROR; } return PCK_WRITE_DATA_OK; }
So jetzt soll ich aber meinen Pointer nicht dirket im Funktionsaufruf übergeben. sondern soll den Pointer erst später übergeben bekommen.Dies soll über einen funktion geschehen. Weis nur nicht wie ich das nun realisieren soll?
Soetwas habe ich noch nicht gemacht. Hab die Pointer bisher immer direkt übergeben.
-
Vermutlich meinst du das etwa so:
for (i =0; i <len ;i++) { SerMes.MsgSendBuffer[i] = Foo(); //diese Funktion gibt den Pointer zurück, den du brauchst }
Foo() könnte so aussehen:
Uint8 *Foo();
Frage beantwortet? Ansonsten musst du mal mehr dazu erzählen, worum genau es geht.
-
Ja aber wie gehe ich damit um wenn ich zum beispiel folgende 2 Datensätze habe
const uint8 Data1[] {0x04,0x20,0x34}
const unit8 Data2[] {0x10, 0x00, 0x50, 0x60}
Ich versteh das nicht?
-
Dann muss die Länge ebenfalls über die Funktion Foo zurückgegeben werden (entweder per Rückgabewert mit einem struct, oder halt Parameter per call by reference).