Problem schreiben auf SD Karte
-
Hallo, ich nutze einen mbed IC.
Damit möchte ich immer wieder auf eine SD Karte schreiben. Daher nutze ich eine Init Funktion um die SD Karte zu initialisieren und eine Schreibfunktion um zu beschreiben. Mein Problem ist, dass ich leider nicht schreiben kann. Ich habe zwei Versionen, eine mit fw <<"String" und eine mit fprintf(fp,"string)Das Problem bei fw: Die Datei bleibt leer.
Das Problem bei fprintf er kennt fp nicht da es in einer anderen Funktion deklariert wurde.Code:
void init(){ uartpc.baud(115200); // initialisierung der Baudrate für USB auf 9600 (Auslesen mit Terra Term) uart.baud(115200); // initialisierung der Baudrate für die Verbindung zwischen den Mbed uart.attach(readUart, (Serial::RxIrq)); // Interrupt für Schreiben(UART) uart.attach(writeUart, (Serial::TxIrq)); // Interrupt für Lesen(UART) uartpc.printf("Start\r\n"); once=true; while(!Saveadress){ uartpc.printf("Wait SA\r\n"); // Warten auf Dateinamen für lesen und schreiben } once=true; uartpc.printf("GOT Saveadress\r\n"); Card.init(); // Initialisierung der SD-Card Card.initwrite(Filename); // Initialisierung der Schreibdatei für Versuchsverlauf while(!configuration){ // Warten auf die Beschreibung der Datei mit dem Verlauf } Card.SDwclose(); uartpc.printf("Closed\r\n"); while(true){ // Wartet bis die Globale Variable Configuration auf true gesetzt wurde // Dies beinhaltet eine Definition des Reglers // ... myled =1; } }#include "SDCard.h" #include "SDFileSystem.h" #include "mbed.h" #include <string> #include <fstream> extern Serial uartpc; extern SDFileSystem sd; void SDC::init(){ mkdir("/sd/save", 0777); return; } void SDC::initread(string adress){ sprintf(readfile, "/sd/save/%sr.txt",adress); fr.open(readfile, ios::in); } void SDC::initwrite(string adress){ sprintf(writefile, "/sd/save/%sw.txt",adress); FILE *fp = fopen(readfile, "w"); fprintf(fp, "Hello fun SD Card World!\r\n"); // fw.open(writefile, ios::out); } void SDC::SDwrite(int Sendvalue){ sprintf(Send,"Wert%s\r\n",Sendvalue); fprintf(fp, "Hello fun SD Card World!\r\n"); //fw << "100\n"; uartpc.printf("Schreiben!!!"); return; } void SDC::SDread(){ *_Out = 1; for(int i=0; i<200;i++){ getline(fr,s); } //uartpc.printf("Read from file: %s",s); *_Out = 0; return; } void SDC::SDwclose(){ uartpc.printf("Schliessen!!!"); //fw.close(); fclose(fp); uartpc.printf("Geschlossen!!!"); } void SDC::SDrclose(){ fr.close(); }#ifndef SDCARD_H #define SDCARD_H #include "mbed.h" #include <string> #include <fstream> class SDC{ public: string s; ifstream fr; ofstream fw; char readfile[256]; char writefile[256]; char Message[256]; Timer t; int counter; char Send[20]; void SDwrite(int Sendvalue); void SDread(); void SDwclose(); void SDrclose(); void init(); void initwrite(string adress); void initread(string adress); private: AnalogOut* _Out; }; #endif /* SDCARD_H */Die erste Datei macht den Funktionsaufruf.
Die Zweite ist die cpp für die Klasse Card
Die dritte Datei die Klassenbeschreibungschonmal danke für die Hilfe
-
Das ist ja mal ein schönes Durcheinander von C und C++

Wundert mich jetzt nicht unendlich, dass das nicht funktioniert - und wahrscheinlich hat das nicht einmal mit der SD-Karte zu tun.
Ich würde erstmal alle C-I/O rauswerfen (
printf()funktioniert eh nicht mitstd::string!).Danach kann man sich das ja nochmal anschauen.