SD-Karte Verständnisproblem

OP #5105392
Lesenswert?

Hallo,

ich versuche eine SD-Karte zu beschreiben mit der Bibliothek von Daniel 
R.
Diese habe ich auch super zum laufen gebracht.
Ich möchte meine gespeicherten Daten auf der SD-Karte abspeichern

Nun meine Frage:

es gibt die Funktion ffwrite( uint8_t c)

Wenn ich nun meine Daten schreiben will, erhalte ich immer ASCII-Zeichen 
auf der SD-Karte.

Muss ich also zuerst meinen int in ASCII umwandeln und ihn dann senden? 
Oder wie schreibe ich z.B. die Zahl 123 auf die SD-Karte
mit ffwrite(123); erhalte ich "{"

Kann jemand Licht ins dunkle bringen?

Grüße
Matthias
#5105481
Lesenswert?

Matthias H. schrieb:
> Wenn ich nun meine Daten schreiben will, erhalte ich immer ASCII-Zeichen
> auf der SD-Karte.
>
> Muss ich also zuerst meinen int in ASCII umwandeln und ihn dann senden?

Das widerspricht sich! 1, 2, 3 sind auch ASCII Zeichen.
Wie man ein Byte interpretiert ist wichtig.


Cyblord -. schrieb:
> Geradezu genial.

:-D


Matthias H. schrieb:
> Habe das Problem mit der Funktion itoa gelöst.

Mich würde es echt interessieren, wie du das nun mit der itoa() gelöst 
hast.

Aber warum nutzt du nicht einfach eine andere Funktion, z.B.:
1
ffwrites("123");
OP #5105671
Lesenswert?

Adam P. schrieb:
> Mich würde es echt interessieren, wie du das nun mit der itoa() gelöst
> hast.
1
  char Buffer[20];
2
  PORTB = ( 1 << PB0);
3
  itoa(sendedaten,Buffer,10);
4
  
5
  if( MMC_FILE_OPENED == ffopen(file_name,'r') ){
6
    ffseek(file.length);
7
    ffwrites(Buffer);
8
    ffwrite(0x0D);    // new line in file
9
    ffwrite(0x0A);
10
    ffclose();
11
  }

In meinem ersten Programm hat das geklappt.
Es gab nur eine Warnung, da Buffer als char deklariert wurde und 
ffwrites uint8_t erwartet.
Aber wie gesagt, hat funktioniert.

Jetzt habe ich das in mein komplettes Programm eingebunden und nun 
bekomme ich anstatt der warnung einen Error.

Warum funktioniert es als Solo-Projekt aber nicht in meinem kompletten 
Programm? Ist doch das gleiche??
#5106571
Lesenswert?

Matthias H. schrieb:
> Es gab nur eine Warnung, da Buffer als char deklariert wurde und
> ffwrites uint8_t erwartet.

Das hätte ich spontan als Bugreport an den Author geschickt. Strings 
will man als char* übergeben. Die uint8_t* sind für die BlockWrite 
Funktionen besser, wo der Puffer Null Bytes enthalten darf (und daher 
eine Länge mit angegeben wird).

Matthias H. schrieb:
> Ich habe aber gemerkt dass die Funktion itoa sehr lange brauch, um die
> Daten zu wandeln. Gibt es nicht eine Möglichkeit die Integerwerte direkt
> auf die SD-Karte zu schreiben, ohne sie vorher in einen String

Der Zeitbedarf von itoa() ist verschwindend gering im Vergleich zu 
ffwriteX() falls ein neuer Sektor benutzt werden muss. Ich zweifle da 
mal spontan Deine Messmethode an.

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