2D Array übergeben und adresse im 1D array speichern

Gast #5785767
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
#5785898
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.
Gast #5785956
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
#5786770
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.