Ich habe ein Problem mit dem Auslesen über SPI. char * read_from_buffer(unsigned int buffer) { char * daten; dataflash_busy_wait(); flash_on(); flash_1(); if(buffer==1)Write_SPI(0xD4); if(buffer==2)Write_SPI(0xD6); Write_SPI(0x00); Write_SPI(0); Write_SPI(0); for(unsigned int c=0; c<528; c++) { *daten++=Write_SPI(0xFF); } flash_0(); flash_off(); return &daten[0]; } wenn ich die Funktion aufrufe mit char *ergebniss=read_from_buffer(1)); printf(&ergebniss[0]); dann bekomme ich †††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††† †††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††† †††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††† ††††††††††††††††††††††††††††††††††††††††‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ ‡‡‡‡‡‡‡‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ ‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ ‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ ‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ ‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘’’’’’’’’’’’’’’’’’’’’’’’’ ’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ ’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ ’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ ’’’’’’’’’’’’’’’’““““““““““““““““““““““““““““““““““““““““““““““““““““““““ ““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““ ““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““ ““““““““““““““““““““““““““““““““““““““““““““““““““““““““”””””””””””””””” ”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””” ”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””” ”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””” ””””””””””””””””””””””””•••••••••••••••••••••••••••••••••••••••••••••••• •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••–––––––– –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– ––––––––––––––––––––––––––––––––———————————————————————————————————————— ———————————————————————————————————————————————————————————————————————— ———————————————————————————————————————————————————————————————————————— ———————————————————————————————————————————————————————————————————————— ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™ ™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™ ™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™ ™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™ ™™™™™™™™šššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššš ššššššššššššššššššššš Wenn ich char * read_from_buffer(unsigned int buffer) { char * daten; dataflash_busy_wait(); flash_on(); flash_1(); if(buffer==1)Write_SPI(0xD4); if(buffer==2)Write_SPI(0xD6); Write_SPI(0x00); Write_SPI(0); Write_SPI(0); for(unsigned int c=0; c<528; c++) { printf("%c",=Write_SPI(0xFF)); } flash_0(); flash_off(); return &daten[0]; } und den aufruf read_from_flash(1); dann bekomme ich "Hallo wie gehts!!!" genau das was ich in den Flash geschrieben habe. wie kann ich lösen???? Danke
Und Du glaubst wirklich, jemand könnte in Deinen Kopf schauen ? Der Kode ist total uncompilierbar, er strotzt nur so vor unbekannten Funktionen und fehlenden Includes / Deklarationen. Kommentare, Funktionsbeschreibung fehlen völlig. Und die Hardware (Schaltung, CPU), kennt auch keiner. So ist Dir nicht zu helfen !!! Peter
Mir geht es eigendlich nur um den aufruf der Funktion aufruf der Funktion: ??????? read_from_buffer(1); was kommt bei ?????? rein char * ergebniss=read_from_buffer(1); char ergebniss[529]=read_from_buffer(1); oder ??? das ist mein Problem.
Schau Dir nochmal gründlich im C-Buch an, was Pointer und was Arrays sind. Pointer dürfen immer nur auf Speicher zeigen, welcher existiert ! D.h. in der Regel legt man ein Array an und weist dessen Adresse einem Pointer zu. Legt man ein Array innerhalb einer Funktion an, ist es natürlich nach Beenden der Funktion ungültig. Soll eine Funktion etwas in einem Array speichern, muß der Aufrufer das Array anlegen und einen Pointer darauf übergeben ! Nicht böse gemeint, aber Dein Code ist gequirlte Scheiße, er verletzt fast alle C-Programmier-Regeln. Unter Windows würdes Du dafür nen satten Blue-Screen kassieren.
1 | printf("%c",=Write_SPI(0xFF)); |
Ich hab ja schon viel gesehen, aber ein "=" als Präfix noch nicht. Peter
Da dein Code, wie Peter schon treffend bemerkte, völlig sinn- und zweckfrei ist, bleibt eigentlich nur der Rat, ein Grundlagenbuch über C in die Hand zu nehmen, um den Umgang mit Pointern zu verstehen. Dann kannst du deine Frage selber beantworten. Oliver
Nachtrag : Versuch mal zu verstehen, was char * daten; . . . for(unsigned int c=0; c<528; c++) { *daten++=Write_SPI(0xFF); } anrichtet. Wenn du das verstanden hast, dürfte dir auch klar werden, warum weder char * ergebniss=read_from_buffer(1); noch char ergebniss[529]=read_from_buffer(1); so funktionieren wird. Oliver
Hallo Also der fehler printf("%c",=Write_SPI(0xFF)); es sollte heisen printf("%c",Write_SPI(0xFF)); war ein tippfehler. Ich habe jetzt mal versucht zu verstehen und habe folgendes anzubieten und bitte um Krtitiken. in der main void main(void) { char ergebniss[529]; read_from_buffer(1,&ergebniss[0]); printf(&ergebnis[0]); } void read_from_buffer(unsigned int buffer,unsigned char *daten) { /*hier sthet noch Code für Commandos des Atmel Flash über SPI . . . . . */ for(unsigned int c=0; c<528; c++) { *daten++=Write_SPI(0xFF); } return; } Wenn ich es richtig verstanden habe übergebe ich an die funktion read_from_buffer die adresse des arrays ergebnmiss in die Variable daten oder ???? im printf(&ergbeniss[0]); lese ich die daten des arrays wieder aus oder??? Bitte um Prüfung Danke
Das sieht schon mal deutlich besser aus. > Wenn ich es richtig verstanden habe übergebe ich an die funktion > read_from_buffer die adresse des arrays ergebnmiss in die Variable daten > oder ???? Ja. Genauer gesagt übergibst du die Adresse des ersten Elements. > im printf(&ergbeniss[0]); lese ich die daten des arrays wieder aus > oder??? Ja. Dazu muss aber sichergestellt sein, dass ergebniss ein Nullterminierter String ist. Man kann &ergebniss[0] auch verkürzen zu ergebniss. Übrigens: Ergebnis schreibt man mit einem s.
Na dann siehts ja gut aus und es funktioniert nun habe ich noch ein zweites problem. ich will eine Structur erstellen in Array form meine structur struct { char datum[11]; char uhrzeit[9]; char temp[6]; }temperatur[1000]; char date[11]; zugriff auf die Variablen müsste ja so gehen temperatur[x].datum temperatur[x].uhrzeit temperatur[x].temp zuweisen würde ich mit memcpy(temperatur[x].datum,date,strlen(date)); wie kann ich deses Array darstellen printf("%c",&temperatur[0].datum[0]); gehts nicht wie kann ich einen zeiger auf die erste adresse des Arrays geben??? temperatur[0].datum???? danke
> printf("%c",&temperatur[0].datum[0]); > gehts nicht Wie wäre es mit
1 | printf("%s", temperatur[0].datum); |
und mal genauem Ansehen der Formatspezifizierer von printf?
A ja ich dachte sowas gibts beim AVR GCC nicht %s wie ja auch der formatspezifizierer %f %g für float oder double typen. Ja so gehts mit %s. Danke
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.