I habe eine Funktion, die die Information von einem 1D-Vektor nimmt und spaltete es in 8 Spalten aus einem Array:die Werte aus einem 2D-Array
void ochoCanales(unsigned char * data)
{
UINT64 INTEGRATE1 = 0, INTEGRATE2 = 0, P, Q;
P = 0, Q = 0;
double ** adc_val;
adc_val = (double *)malloc(8 * sizeof(double*));
int u;
for (u = 0;u < 8 + 1;u++)
{
adc_val[u] = (double *)malloc(VER_LENGTH*BUFFER_ADC/8 * sizeof(double *));
}
while (P + 1 <= BULK_BUFFER_SIZE)
{
INTEGRATE1 = data[P + 7];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 6];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 5];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 4];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 3];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 2];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P + 1];
INTEGRATE1 = (INTEGRATE1 << 8) | data[P];
INTEGRATE2 = data[P + 15];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 14];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 13];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 12];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 11];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 10];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 9];
INTEGRATE2 = (INTEGRATE2 << 8) | data[P + 8];
P = P + 16;
adc_val[0][Q] = (INTEGRATE1 & 0x000000000000FFFF);
adc_val[1][Q] = (INTEGRATE1 & 0x00000000FFFF0000) >> 16;
adc_val[2][Q] = (INTEGRATE1 & 0x0000FFFF00000000) >> 32;
adc_val[3][Q] = (INTEGRATE1 & 0xFFFF000000000000) >> 48;
adc_val[4][Q] = (INTEGRATE2 & 0x000000000000FFFF);
adc_val[5][Q] = (INTEGRATE2 & 0x00000000FFFF0000) >> 16;
adc_val[6][Q] = (INTEGRATE2 & 0x0000FFFF00000000) >> 32;
adc_val[7][Q] = (INTEGRATE2 & 0xFFFF000000000000) >> 48;
Q++;
INTEGRATE1 = 0; INTEGRATE2 = 0;
}
return adc_val;
}
Im Hauptcode I diese statische Array; die Abmessungen sind die gleichen wie adc_val
:
double adc_val1[CAN_CANALES][(VER_LENGTH*BUFFER_ADC)/CAN_CANALES];
Im Haupt Code würde Ich mag so etwas tun:
adc_val1 = ochoCanales(szBufferM);
Aber ich bekomme die Fehlermeldung:
Expression must be modifiable value (adc_val1)
Warum Dies geschieht? Wie kann ich das lösen ??
Sie können‘ t Array-Zuweisung. Du brauchst 'adc_val1' um' double ** 'zu sein, wie' adc_val' in der Funktion. Deine Funktion muss auch 'double **' zurückgeben; Sie haben 'adc_val;' zurückgeben am Ende von dem, was momentan eine Funktion ist, die 'void' zurückgibt, so dass der angezeigte Code nicht deswegen kompiliert werden sollte. Vergessen Sie nicht, das Array freizugeben, nachdem Sie damit fertig sind. –