SD-Karte Verständnisproblem

OP #5105392
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
Gast
Matthias H. schrieb:
> es gibt die Funktion ffwrite( uint8_t c)

Wie die Zeile schon sagt: es wird ein unsigned Byte geschrieben. 123 
steht nun mal für das '{', also ist alles korrekt.
Wenn du '1', '2', '3' haben willst, dann sind das drei Byte und du musst 
sie vorher zerlegen.
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
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??
OP
Das wars, danke!

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 
umzuwandeln?
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.