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.