Char und funktionen übergabe

Gast #435046
Lesenswert?

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
#435052
Lesenswert?

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
Gast #435061
Lesenswert?

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.
#435073
Lesenswert?

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
Gast #435074
Lesenswert?

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
Gast #435088
Lesenswert?

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
Gast #435133
Lesenswert?

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
Gast #435276
Lesenswert?

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.
Gast #435286
Lesenswert?

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







Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren