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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Mark (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.