Bascom Zeitrpoblem mit RS232 und SD Karte

Gast #925654
Hallo,

mein Problem ist das open, print, flush und close mehr zeit brauchen
als ein neues Zeichen ankommt.

Wärend die Karte beschrieben wird kommen weitere Zeichen an,
die leider ignoriert werden.

Ich habe bereits Probiert das mit einem Interupt zu lösen,
das Problem ist das selbe.

Gibt es denoch eine Möglichkeit Daten auf die SD Karte zu schreiben
ohne das der Buffer voll wird?


Bascom, Atmega32, RS232 mit 9600 Baud.

Do
Akey = Waitkey()
Chrx = Chr(akey)

       If Len(buff) < Max_buf_len Then
            Buff = Buff + Chrx
       Else
            If Sdpresent = 1 Then
              Buff = Buff + Chrx
               Open Tfile For Append As #3
               Print #3 , Buff
               Flush #3
               Close #3
               Buff = ""
               Toggle Portc.7
            End If
      End If
    Loop


Vielen Dank
Gast
Nimm das Open mal nach oben aus der Schleife raus.
Flush und Close machst du hinter die Schleife.
Halte die Datei offen solange du schreibst.
Damit sollte es schon mal ein wenig besser werden.

Open Tfile For Append As #3

Do
Akey = Waitkey()
Chrx = Chr(akey)

       If Len(buff) < Max_buf_len Then
            Buff = Buff + Chrx
       Else
            If Sdpresent = 1 Then
              Buff = Buff + Chrx
               Print #3 , Buff
               Buff = ""
               Toggle Portc.7
            End If
      End If
    Loop

Flush #3
Close #3
Gast
Da habe ich aber das problem wann ich Flush ausführe.

Ich schreibe ja permanent über RS232 auf die SD Karte, wenn ich dann
die spannung weg nehme ohne einem flush/close verliere ich Daten.

Eventuell ein Timer der in gewissen abstaenden ein flush durchfuehrt 
aber auch da wieder das problem, wenn in diesem moment Daten ankommen 
stoert das die sache.
Gast
>Ich schreibe ja permanent über RS232 auf die SD Karte, wenn ich dann
>die spannung weg nehme ohne einem flush/close verliere ich Daten.

dann erkenn doch das weg nehmen der spannung und führe dann flush/close 
aus. brown-out-detection und interrupt
Gast
>Ich schreibe ja permanent über RS232 auf die SD Karte, wenn ich dann
>die spannung weg nehme ohne einem flush/close verliere ich Daten.

Genau das sollte man nicht machen. Also Spannung
einfach wegnehmen. Was du brauchst ist ein Taster mit
dem du die Karte gezielt runterfährst.

Lies da mal ein bißchen:
Beitrag "SD card: FAT Integrität und power-down / "elektrischem" Ausschalten?"

>Eventuell ein Timer der in gewissen abstaenden ein flush durchfuehrt
>aber auch da wieder das problem, wenn in diesem moment Daten ankommen
>stoert das die sache.

Wenn Flush zu langsam ist, dann wirst du dir wohl eine
andere Pufferstrategie einfallen lassen müssen.
Gast
>dann erkenn doch das weg nehmen der spannung und führe dann flush/close
>aus. brown-out-detection und interrupt

Dann kannst du die Karte auch ohne die Spannung wegzunehmen
einfach rausziehen während geschrieben wird.
Interrupt ist hier völlig daneben.
Gast
also ich gehe mal davon aus, daß das CLOSE+FLUSH länger dauert als der 
Abstand zwischen 2 empfangenen Zeichen. Dann ist die Frage, ob ein 
Interrupt den CLOSE / FLUSH-Befehl unterbrechen darf. Wenn nein, geht es 
nicht, wenn ja machst Du

im Hauptprogramm:

do
  if buffer_voll then ... 'close+flush!, buffer_voll=false
loop

in der UART-ISR

  'Zeichen in den Puffer
  buffer(index) = udr
  incr index

  'Signal and Hauptprogramm, falls Puffer voll
  if index > (buf_max) then
    buffer_voll=true
    index=1
  endif
return

Besser noch abwechselnd 2 Puffer, damit der eine in Ruhe geschrieben 
werden kann, während sich der andere füllt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.