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. > > > Hallo, > jetzt gehts. > Ich hab jetzt das Ganze ohne die SD_Lib.cc gemacht. > Wenns jemand brauchen kann, hier der Quelltext > > Gruß Max > > > Dim Y As Integer > Dim Text(40) As Char > Dim _fat(SDC_FAT_BUF) As Byte > Dim _fil(SDC_FILE_BUF) As Byte > Dim _attrib(4) As ULong > > > Sub main() > Dim res As Byte > Clock_SetTime(11,23,0,0) > Clock_SetDate(7,5,14) > res = SDC_Init(_fat) > For Y = 0 To 2000 > Text = "" > Str_Printf(Text,"%d:%d:%d;Text ;Text ;Text ;Text ;Text\r\n", Clock_GetVal(2), Clock_GetVal(1), Clock_GetVal(0)) > Msg_WriteInt(Y) > Msg_WriteText(" Y\r" ) > ProtokollSpeichern() > Msg_WriteChar(13) > Next > End Sub > > Sub ProtokollSpeichern() > Dim res As Byte > Dim Attrib0 As ULong > Dim bytes_written(1) As Word > res = SDC_Init(_fat) > res=SDC_FStat("0:/protokol.csv", _attrib) > Msg_WriteWord(_attrib(0)) > Msg_WriteText(" SD_READ_FILE_STATUS\r") > > res=SDC_FOpen(_fil, "0:/protokol.csv", FA_WRITE Or FA_CREATE_ALWAYS) > Msg_WriteText("SDC_FOpen " ) > Msg_WriteInt(res):Msg_WriteChar(13) > > Attrib0 = _attrib(0) > res=SDC_FSeek(_fil, Attrib0) > Msg_WriteFloat(Attrib0) > Msg_WriteText(" SDC_FSeek " ) > Msg_WriteInt(res):Msg_WriteChar(13) > > SDC_FWrite(_fil,Text,Str_Len(Text),bytes_written) > SDC_FSync(_fil) > Msg_WriteInt(bytes_written(0)) > Msg_WriteText(" SDC_FWrite " ) > Msg_WriteInt(res):Msg_WriteChar(13) > > > res=SDC_FSetDateTime("0:/protokol.csv",Clock_GetVal(3) + 1,Clock_GetVal(4) + 1,Clock_GetVal(5) + 2000, _ > Clock_GetVal(1), Clock_GetVal(2), Clock_GetVal(0)) > Msg_WriteText("SDC_FSetDateTime " ) > Msg_WriteInt(res) > Msg_WriteChar(13) > > res=SDC_FClose(_fil) > Msg_WriteText("SDC_FClose " ) > Msg_WriteInt(res) > Msg_WriteChar(13) > AbsDelay(5) > End Sub