Forum: PC-Programmierung 2D Array übergeben und adresse im 1D array speichern


von Mark (Gast)


Lesenswert?

Hallo,
ich habe in einer einen uint8 2D-Array, worin Daten gespeichert werden 
sollen. Damit rufe ich eine andere Funktion auf, welches mir parameter 
in einem Struct speichert. Dazu übergebe ich auch die Adresse und länge 
(FLASH).
Die Funktion, die Daten aus dem FLASH liest, möchte aber ein 1D-Array in 
sint8 haben.
im Struct habe ich dann
1
typedef struct
2
{
3
    sint16  adress;              
4
    sint8   data[MAX_FLASH_READ_SIZE];
5
    sint8   length;
6
    void   (*callback)(bool);
7
}FLASH;

der Funktionsaufruf um den struct zu beschreiben ist
1
readFlash(flashAddress, &flashData[0][0], 0x90, &flashCallback);
1
void readFlash(uint16 adress, uint8* data, uint8 length, void(*callback)(bool)){
2
flash.adress = (sint16)adress;
3
flash.data = ????
4
flash.length = (sint8) length;
5
flash.callback = callback;
6
}

mit flash.data möchte ich dann die Funktion aufrufen, die mir die daten 
aus dem FLASH ausliest. In der callbackFunktion möchte ich die Daten 
dann wieder im 2D-Array bearbeiten.
Doch leider habe ich absolut keine Ahnung, wie ich die Adresse von 
flashData[0][0] an flash.data übergebe, damit ich in der 
Callback-Funktion die Daten vom Flash im 2D-Array wieder bearbeiten kann

hatte gedacht
1
flash.data = (sint8)&data;
da bekomme ich aber den error incompatible types in assignment

von Dirk B. (dirkb2)


Lesenswert?

Die Defintionon der Variablen flashData und flash wären noch nett.

flash.data ist ein Array. dem kann man keine neue Adresse geben.
flash.data = ???? ist da nicht möglich.

Ein Array kannst du z.B. mit memcpy beschreiben.

Mark schrieb:
> mit flash.data möchte ich dann die Funktion aufrufen, die mir die daten
> aus dem FLASH ausliest.

Dann übergib doch an die Funktion die Adresse von flash.data.
Die ist übrigens flash.data (ohne &)

Du kannst auch den 1D-Index berechnen.
Oder du machst einen Zeiger auf ein 2D-VLA und weist ihm die Adresse von 
dem 1D-Array zu.

von Mark (Gast)


Lesenswert?

Dirk B. schrieb:
> Die Defintionon der Variablen flashData und flash wären noch nett.

flashData:
1
static FLASH_DATA flasData = {0,{0},0,NULL}
flash:
1
static uint8 flash[5][18]

Dirk B. schrieb:
> Dann übergib doch an die Funktion die Adresse von flash.data

Die Funktion ist ja die callback-funktion und die bekommt nur ein bool

Daher hatte ich gedacht, dass ich irgendwie die Adresse vom 2D-array 
übergeben kann, welche dann in der Flash-funktion als 1D-array 
interpretiert wird und die Daten beschrieben werden und wenn das fertig 
ist, ich die callback-funktion aufrufe und dort dann die daten wieder in 
2D-array vorfinde

von Rolf M. (rmagnus)


Lesenswert?

Mark schrieb:
> Doch leider habe ich absolut keine Ahnung, wie ich die Adresse von
> flashData[0][0] an flash.data übergebe, damit ich in der
> Callback-Funktion die Daten vom Flash im 2D-Array wieder bearbeiten kann

flash.data ist kein Zeiger, sondern ein Array. Du musst die Daten also 
kopieren, um sie da rein zu bekommen.

> hatte gedacht
> flash.data = (sint8)&data;
> da bekomme ich aber den error incompatible types in assignment

Das ist nicht verwunderlich, denn das ergibt eigentlich überhaupt keinen 
Sinn. data ist ein Zeiger. Dessen Adresse nimmst du, hast dann also 
einen Zeiger auf den Zeiger. Diese Adresse (nicht etwa irgendwas, was an 
der Adresse steht) konvertierst du in einen sint8 und versuchst dann 
diesen einen sint8 dem kompletten Array zuzuweisen. Im Übrigen sind 
Zuweiseungen an Arrays in C nicht möglich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.