2D-Array mit Daten befüllen
-
Hi Forum,
ich habe folgende STruktur:
typedef struct { s16 sAcc[3]; s16 sGyro[3]; s16 sMag[3]; } IMU100_DATA;
ruf ich so auf : IMU100_DATA *ImuData;
eine funktion s16_to_u8 hab ich auch
void s16_to_u8_buffer(s16* refvalue, unsigned char* pBufferDestination);
und würde gerne alle werte (diese aktualisieren sich ständig) in ein 2D Array schreiben. Es sollen alle 100 Zeilen mit den 9 Werten befüllt werden:
int myArray[100][9]= { 0 };
wie würde man das am elegantesten machen?
Hab so eine Überlegung gehabt:
for (int row=0; row < 100; row++) { for (int col=0; col < 9; col++) { myArray[row][col] = -> hier irgendwie das struct mit einer schleife paaren und in col füllen?!<-
oder
for (int row=0; row < 100; row++) { for (int col=0; col < 9; col++) { myArray[row][0] = sAcc[0]; myArray[row][1] = sAcc[1]; myArray[row][2] = sAcc[2]; myArray[row][3] = sGyro[0]; myArray[row][4] = sGyro[1]; myArray[row][5] = sGyro[2]; myArray[row][6] = sMag[0]; myArray[row][7] = sMag[1]; myArray[row][8] = sMag[2];
ja mit den Arrays tue ich mir echt schwer
vielen Dank schonmal im vorraus!
Glen
-
glenki schrieb:
ruf ich so auf : IMU100_DATA *ImuData;
Da definierst du einen Zeiger auf deine Struktur.
Da hast du aber noch keinen Speicher für deine Daten.Funktionen werden aufgerufen.
glenki schrieb:
eine funktion s16_to_u8 hab ich auch
void s16_to_u8_buffer(s16* refvalue, unsigned char* pBufferDestination);
Wozu soll die denn gut sein?
glenki schrieb:
myArray[row][col] = -> hier irgendwie das struct mit einer schleife paaren und in col füllen?!<-
Das ist genau das, was du in deinem 2. Beispiel machst.
Wo benutzt du in deinem 2. Beispiel überhaupt col?
Gar nicht. Also kannst du dir die Schleife auch sparen.Was spricht eigentlich gegen ein Array von deine struct?
IMU100_DATA ImuData[100];
Falls du meinst, du musst zum übertragen der Daten diese in ein char-Array kopieren, so irrst du dich.
Übergib einfach die Startadresse vom Array an deine Übertragungsfunktion.
-
Hallo,
danke fuer die Antwort.Den Speicher erstelle ich natuerlich vorher mit :
IMU100_DATA data;
Die Funktion ist gut, da ich mit der Daten in einen Framebuffer fuer spaeter kopiere, das schaut so aus:
//Sensordaten lesen und in sAcc schreiben LSM303DLH_Acc_Read_RawData(pData->sAcc); //Kopiere Daten in einen Frame zum uebrtragen s16_to_u8_buffer(&(pData->sAcc[0]), &databuffer[2]); s16_to_u8_buffer(&(pData->sAcc[1]), &databuffer[4]); s16_to_u8_buffer(&(pData->sAcc[2]), &databuffer[6]);
ok aber ich glaube das ist irrelevant. Ich haette das nicht erwaehnen brauchen.
Du hast recht im zweiten brauche ich die Schleife fuer das col nicht, ich befuelle das col array ja manuell.
Ich wollte eigtl. nur wissen ob es eine Methode gibt das eleganter zu machen oder ob das so in Ordnung ist ?
Gruss
Glen
-
Kannst Du das bitte nochmal genauer erklären. Ein Zeiger ist ja die auch die Anfangsadresse eines Arrays. Wieso ist das bei den Strings anders???
Vielen Dank....
-
leyden schrieb:
Kannst Du das bitte nochmal genauer erklären. Ein Zeiger ist ja die auch die Anfangsadresse eines Arrays. Wieso ist das bei den Strings anders???
Vielen Dank....
Wie lautet die Frage genau=?