SD-Karte lesen und schreiben im Process

  • 1
  • 2
  • Seite 1 von 2
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

SD-Karte lesen und schreiben im Process

 · 
Gepostet: 05.04.2018 - 11:43 Uhr  ·  #1
Hallo mal eine kleine Frage,

ich bin gerade dabei eine Routine zu schreiben um Dateien zwischen meiner Applikation PC und meinem XMEGA mit SD-Karte über den USB-Smart hin und her zu kopieren.

Da mittlerweile meine XMEGA-Anwendung schön stabil läuft (mit allen Tasks und Processen) würde ich gerne das lesen und schreiben auf die SD-Karte in einen Process auslagern. Da aber Prozesse nach der eingestellten Anzahl der Systicks unterbrochen werden, stellt sich mir nun die Frage:
Hat das unterbrechen der Schreib/Lese-Befehle negative auswirkungen? (offene Dateien usw.)

Wir sind eure Erfahrungen mit sowas? Ich denke ein Task würde zu viel Rechenleistung blockieren, oder?

Thorsten
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: SD-Karte lesen und schreiben im Process

 · 
Gepostet: 05.04.2018 - 16:49 Uhr  ·  #2
Hallo Thorsten,

du kannst den Process doch lock-en, während des Schreibvorganges.

Gruss
Harry
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: SD-Karte lesen und schreiben im Process

 · 
Gepostet: 05.04.2018 - 18:01 Uhr  ·  #3
Hallo Harry,

wie gehst Du eigentlich vor um Zeiten der einzelnen Routinen zu messen?
Schaltest Du einen PortPin, den Du mit dem Oszi abfragst? Oder nutzt Du die TIMER in der Software?

Ich möchte mal ein paar Routinen messen, um genau zu sehen ob hier was kritisch ist.

Gruß
Thorsten
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: SD-Karte lesen und schreiben im Process

 · 
Gepostet: 06.04.2018 - 13:19 Uhr  ·  #4
Hallo Thorsten,

das ist verschieden. Früher nur via PortPin und messen (teilweise sogar verschiedene PortPins für verschiedene Routinen) und in letzter Zeit auch mal den Simulator. Mit mehreren PortPins und einem Logikanalyser schaut das manchmal echt witzig okok interessant aus.

Gruss
Harry
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: SD-Karte lesen und schreiben im Process

 · 
Gepostet: 09.04.2018 - 18:21 Uhr  ·  #5
Da ich die Flanken von einigen Eingängen als Meldung im LOG speichern möchte, muss ich das in der Hauptroutine machen. Hier macht sich nun aber eine Verzögerung bemerkbar.

Die ersten tests waren super schnell, die CS-LED hat nur kurz aufgeflackert. Jetzt habe ich die LOGs aus dem Hauptverzeichnis in einen Unterordner schreiben lassen.

Und das ist deutlich langsamer, kann das sein? Nur wegen dem Unterordner?

Gibt es evtl. eine Möglichkeit das der AVRco erst in einen Zwischenspeicher arbeitet und ich diesen dann alle paar Sekunden auf die SD-Card schreiben lasse?

Es kann halt schon mal passieren, das 4-5 Meldungen innerhalb von 1-2 Sekunden kommen.

Ansonsten würde ich mir hier per Hand was zurecht machen, in etwa so:
Code
type

TMeldungLog = record
      no    : byte;  // Anzahl der Meldunen im Speicher
      mldg  : array [1..9] of string[45]; // Meldespeicher im RAM
    end; // Ende
  


Ich würde dann beim logen erstmal nur in diesen Speicher schreiben und dann über einen Timer auf die SD-Card schreiben, bzw. beim Reset (Softreset ;-) und beim Spannungseinbruch diesen schnell wegspeichern.

Thorsten

Nachtrag:
Hab es gerade nochmal getestet, wenn ich im Hauptorder speichere braucht es nur ca. 1/3 der Zeit.
Kann ich da noch irgendwo ansetzen? Buffer erhöhen oder sowas?
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: SD-Karte lesen und schreiben im Process

 · 
Gepostet: 12.04.2018 - 10:13 Uhr  ·  #6
Hallo rolf,

kann es sein, das beim öffnen, schließen, lesen und schreiben zusätzlich Zeit benötigt wird, wenn man der Funktion einen PfadNamen <>'' / TPathStr mit übergibt?

Bei meinen Tests ist die SD-Geschwindigkt ca. 3x so langsam, gegenüber dem schreiben im root.

Thorsten
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: SD-Karte lesen und schreiben im Process

 · 
Gepostet: 12.04.2018 - 14:24 Uhr  ·  #7
Hallo Thorsten,

durch den hirarchischen und komplexen Aufbau von FAT16/32
kostet jede weitere Sub-Dir zusätzliche Zeit beim Zugriff.
Das weiter oben angesprochene Problem des sofortigen wegschreibens
kann man verbessern, indem man in eine Pipe schreibt, die ein anderer
Prozess im Hintergrund leert und wegschreibt.

rolf
miparo
Schreiberling
Avatar
Geschlecht:
Herkunft: Germany
Alter: 59
Beiträge: 988
Dabei seit: 09 / 2007
Betreff:

Re: SD-Karte lesen und schreiben im Process

 · 
Gepostet: 12.04.2018 - 14:29 Uhr  ·  #8
Schließt du die Datei nach jeden Write wieder ?
  • 1
  • 2
  • Seite 1 von 2
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   139   153 · Page-Gen-Time: 0.037758s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI