SD-Karte lesen und schreiben im Process

  • 1
  • 2
  • Page 1 of 2
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

SD-Karte lesen und schreiben im Process

 · 
Posted: 05.04.2018 - 11:43  ·  #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
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: SD-Karte lesen und schreiben im Process

 · 
Posted: 05.04.2018 - 16:49  ·  #2
Hallo Thorsten,

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

Gruss
Harry
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: SD-Karte lesen und schreiben im Process

 · 
Posted: 05.04.2018 - 18:01  ·  #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
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: SD-Karte lesen und schreiben im Process

 · 
Posted: 06.04.2018 - 13:19  ·  #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
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: SD-Karte lesen und schreiben im Process

 · 
Posted: 09.04.2018 - 18:21  ·  #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
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: SD-Karte lesen und schreiben im Process

 · 
Posted: 12.04.2018 - 10:13  ·  #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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: SD-Karte lesen und schreiben im Process

 · 
Posted: 12.04.2018 - 14:24  ·  #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
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: SD-Karte lesen und schreiben im Process

 · 
Posted: 12.04.2018 - 14:29  ·  #8
Schließt du die Datei nach jeden Write wieder ?
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 8 · Cache Hits: 14   139   153 · Page-Gen-Time: 0.023567s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI