Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > > Hallo, > > > > ich habe in meinem Projekt eine Protokolldatei in der verschiedene > > > > Aktionen dokumentiert werden. > > > > Aber leider stürzt mein Programm bei einer Dateigröße von größer 10 000 Byte > > > > beim Befehl SD_READ_FILE_STATUS ab. > > > > Unten habe ich ein kleines Testprogramm welches das Anfügen von Protokolldaten > > > > simuliert. > > > > Gruß Max > > > > > > > > > > > > Es wird die SD_Lib.cc aus der Demo „Easy File Access with SD_Lib“ verwendet. > > > > > > > > Dim X As Integer > > > > Dim Text(30) As Char > > > > > > > > Sub main() > > > > Dim res As Byte > > > > Text = "Text ;Text ;Text ;Text ;Text" > > > > res = SDC_Init(_fat) > > > > Do While True > > > > X++ > > > > Msg_WriteInt(X) > > > > Msg_WriteText(" ") > > > > ProtokollSpeichern() > > > > Msg_WriteChar(13) > > > > > > > > End While > > > > End Sub > > > > > > > > Sub ProtokollSpeichern() > > > > Dim res As Byte > > > > Dim bytes_written(1) As Word > > > > res = SDC_Init(_fat) > > > > > > > > Msg_WriteText("SD_READ_FILE_STATUS 1r") > > > > SD_READ_FILE_STATUS("protokol.csv") > > > > Msg_WriteText("SD_READ_FILE_STATUS 2r") > > > > Msg_WriteText(error_str ) > > > > Msg_WriteChar(13) > > > > > > > > SD_OPEN_FILE("protokol.csv") > > > > Msg_WriteText(error_str ) > > > > SD_SEEK(_attrib(0)) > > > > Msg_WriteText(error_str ) > > > > SD_WRITE_FILE(Text) > > > > Msg_WriteInt(res) > > > > SD_CLOSE_FILE() > > > > SD_SET_DATE_TIME("protokol.csv", Clock_GetVal(3) + 1, Clock_GetVal(4) + 1, _ > > > > Clock_GetVal(5) + 2000, Clock_GetVal(1), Clock_GetVal(2), Clock_GetVal(0)) > > > > End Sub > > > Hallo Max, > > > ein grundsätzliches Größenproblem kann ich ausschließen, da ich gerade problemlos eine Logdatei > > > mit mehr als 300 kByte korrekt per AVR32 erstellt und auch lesen kann (Programm in Compact C). > > > Leider bin ich mit BASIC nicht besonders vertraut, um den Code beurteilen zu können, würde aber > > > die SD_SEEK - Parameter einer genaueren Prüfung unterziehen. > > > Gruß > > > Josef. > > > > Hallo Josef, > > ich weiß was du meinst. Da fehlt ein Argument! > > Aber die Adresse des FILE Puffers wird in der SD_Lib.cc eingetragen. > > SD_SEEK ist ein Unterprogramm. > > Du könntest mir aber den Teil deines Programmes posten wo du Einträge zur Logdatei hinzufügst. > > Das würde mir sicher weiterhelfen. > > > > Gruß Max > Hallo Max, > folgende Routine wird je Programmstart nur einmal gestartet, die Logfile bleibt solange offen > und alle weiteren Schreibaktionen finden per SDC_FWrite(..) statt, > bis das Programm wieder beendet wird: > > byte QF; // Rückgabewert der Fileoperation > dword FIL_Attrib[4]; // FSTAT - Ergebnisablage > dword FIL_Size; // Dateigröße > > SDC_Init(FAT_Buff); // Dateisystem initialisieren > // Logdatei zum Schreiben öffnen mit Zugriffszeitupdate > QF = SDC_FOpen (FIL_Buff, Filename, FA_READ | FA_WRITE | FA_OPEN_EXISTING); > if(QF!=0) > QF = SDC_FOpen (FIL_Buff, Filename, FA_READ | FA_WRITE | FA_CREATE_ALWAYS); > > // Datumsstring aufbauen > QF = SDC_FSetDateTime (Filename, DoM, mm, Year, Min, Std, Sek); > <b><i> > QF = SDC_FStat (Filename, FIL_Attrib); > FIL_Size = FIL_Attrib[0]; > SDC_FSeek(FIL_Buff, FIL_Size); // Datei fortschreiben > </i></b> > SDC_Datumseintrag(); // yy.mm.tt in Logfile.csv schreiben > SDC_Reihentitel(); // Reihenbeschriftung in die erste Zeile eingtragen > > Grüße > Josef. >