Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Absturz bei Dateien >10000 Byte auf SD-Card Kategorie: Programmierung Basic (von Josef - 7.05.2014 9:39)
Als Antwort auf Re: Absturz bei Dateien >10000 Byte auf SD-Card von Max - 7.05.2014 8:23
Ich nutze:
C-Control Pro AVR32
> > > 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);

    QF = SDC_FStat (Filename, FIL_Attrib);
    FIL_Size = FIL_Attrib[0];
    SDC_FSeek(FIL_Buff, FIL_Size);  // Datei fortschreiben

    SDC_Datumseintrag();            // yy.mm.tt in Logfile.csv schreiben
    SDC_Reihentitel();              // Reihenbeschriftung in die erste Zeile eingtragen

Grü�e
Josef.



    Antwort schreiben


Antworten:

Re: Absturz bei Dateien >10000 Byte auf SD-Card (von Max - 9.05.2014 20:21)