INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Flash: schnelles Speichern und Lesen "großer" 1-2-dim Arrays und Structures?
28.11.2014, 16:45 (Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2014 17:28 von HaWe.)
Beitrag #1
Flash: schnelles Speichern und Lesen "großer" 1-2-dim Arrays und Structures?
hallo,
wie ist der beste und schnellste Weg, zum schnellen Speichern und Lesen "großer" 1-2-dim Arrays und Structures im Flash?
Genau handelt es sich - für den Arduino Due - um entweder

byte array2D[80][80]

oder
byte array[256]

oder arrays von mehreren
struc {
int16_t i;
int32_t j;
int8_t b,c,d;
int8_t str[50];
} data;

data darray[100];

am besten wäre es sicher, alle Arrays als Block auf 1 Rutsch zu schreiben und zu lesen;

beim Lesen der einfachen Arrays geht das auch, weil die Länge bekannt ist,

aber bei den Datensatz-Arrays muss record-weise gelesen werden bis eof() , da die Menge an Datensätzen bei Programmstart noch nicht bekannt ist.



ps, nur zur Klarstellung:
ich will auf keinen Fall die Elemente immer nur einzeln lesen oder schreiben;
was ich suche (aber nicht gefunden habe) ist sowas wie
setbuf ( );
fputs ();
fflush ();
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.11.2014, 08:55
Beitrag #2
RE: Flash: schnelles Speichern und Lesen "großer" 1-2-dim Arrays und Structures?
habe jetzt auch noch mal gesucht -
wo gibt es überhaupt eine Übersicht über Flash- Schreib- / Lese-Befehle für Sketch... ???
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.11.2014, 10:00 (Dieser Beitrag wurde zuletzt bearbeitet: 29.11.2014 10:00 von HaWe.)
Beitrag #3
RE: Flash: schnelles Speichern und Lesen "großer" 1-2-dim Arrays und Structures?
las gerade, dass man hier sowieso nicht allzu oft schreiben darf (10k-100k).

Das ist ja hundsmiserabel.

Welche anderen Möglichkeiten zum einfachen Anschließen von externem Speicher (EEPROM oder SD etc) gibt es inkl. passende Schreib-/Lese-Software ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.11.2014, 10:16
Beitrag #4
RE: Flash: schnelles Speichern und Lesen "großer" 1-2-dim Arrays und Structures?
Moin HaWe,
ich weiß jetzt nicht ob du wirklich den Flash meinst oder eher den EEPROM!?
Um Variablen über reset hinweg zu speichern und trotzdem ändern zu können benutzt man den EEPROM.
Die Möglichkeiten zum read/write auf EEPROM gibt's hier gelistet:
http://www.nongnu.org/avr-libc/user-manu...eprom.html
Für deine Anwendung würde ich eeprom_read_block und eeprom_write_block empfehlen. Beispiel:
Code:
#include <avr/eeprom.h>
// Die Struktur mit den Daten
struct settings_t
{
   long alarm;
   int mode;
} settings;
//...Code um struct zu füllen....
// die Struktur aus dem EEPROM lesen
   eeprom_read_block((void*)&settings, (void*)0, sizeof(settings));
// Die Struktur in den EEPROM schreiben
    eeprom_write_block((const void*)&settings, (void*)0, sizeof(settings));
Variablen im Flash kann man zwar mittels PROGMEM aus dem SRAM raushalten, sie sind aber während des Programmlaufs nicht änderbar. Die Variablen werden auch nicht durch den Programmlauf erzeugt und/oder belegt, sondern während des Sketch-Uploads mit ihren Werten in den Flash geschrieben.
Alles wichtige zu PROGMEM steht ua. hier: http://arduino.cc/en/pmwiki.php?n=Reference/PROGMEM
Hope it helps!
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.11.2014, 10:26 (Dieser Beitrag wurde zuletzt bearbeitet: 29.11.2014 10:34 von HaWe.)
Beitrag #5
RE: Flash: schnelles Speichern und Lesen "großer" 1-2-dim Arrays und Structures?
hallo,
ich gebe zu, jetzt bin ich etwas verwirrt...

Ich bin ja langjähriger NXT-Benutzer, hier hat man 64k Flash für Programme und Daten zum Speichern und kann auch eigene Daten während der Laufzeit drauf speichern - obwohl auch Programme auf dem Flash ausgeführt werden (Ausführung während flash read/write wird solange unterbrochen).
Manche Daten brauche ich nur beim Neustart zum Lesen, es reicht also eine gelegentliche Datensicherung, spätestens vor dem Ausschalten.

In anderen Fällen muss ich aber auch während der Laufzeit öfter die Daten aktualisieren.

dann hätte ich 2 Fragen dazu:

1.) Was bzw. wie groß genau ist denn das EEPROM beim Due?

2.) Und gibt es dafür keine "normalen" C-Befehle wie in stdio.h, also
fopen
fget
fgets
fprint
fput
fputs
fread
fscanf
fflush
fclose ...?

ach ja, und
3.)
<avr/eeprom.h>: EEPROM handling

ist doch nur für avr - ich brauche es aber für den Due (ARM, nicht AVR ) !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.11.2014, 10:37
Beitrag #6
RE: Flash: schnelles Speichern und Lesen "großer" 1-2-dim Arrays und Structures?
(29.11.2014 10:00)HaWe schrieb:  las gerade, dass man hier sowieso nicht allzu oft schreiben darf (10k-100k).

Das ist ja hundsmiserabel.

Welche anderen Möglichkeiten zum einfachen Anschließen von externem Speicher (EEPROM oder SD etc) gibt es inkl. passende Schreib-/Lese-Software ?
Naja, für PROGMEM / Flash 10K Schreibvorgänge ist schon ganz schön viel. 10K Sketche muss man erst mal hochladen Smile Die 100K Schreibvorgänge auf den EEPROM sind sicher nicht sooo viel.
SD-Libs gibt's massenhaft, nur ist es nicht wirklich schnell. Beim Schreiben von Daten auf SD-Karte reden wir schon von Zeiteinheiten im Sekundenbereich. Das kann kritisch werden wenn dein Sketch auf abgeschlossene Schreibvorgänge wartet. Stabil läuft zB. diese Lib http://arduino.cc/en/pmwiki.php?n=Reference/SD .
Vielleicht macht es ja Sinn übers Schreiben über eine Netzwerkverbindung nachzudenken (wenn in deinem Projekt BT,WiFi oder Ethernet im Einsatz sein sollten).
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.11.2014, 10:46
Beitrag #7
RE: Flash: schnelles Speichern und Lesen "großer" 1-2-dim Arrays und Structures?
hi,
nee, WiFi geht gar nicht, nutze ich überhaupt nicht und auch ein Host ist gar nicht immer in der Nähe: es ist für absolute autonome Fahr-Roboter für drinnen und draußen.

Jede Minute 1x gesichert bedeutet aber in 1 Betriebstag = 4 Stunden
240 Schreibvorgänge, und
10000/240 = 40 Betriebs-Tage
- dann ist Schluss!

Klingt nicht so gut, wenn ich dann den Due wegschmeißen kann.

Trotzdem las ich, dass der Due gar kein EEPROM hätte, stimmt das?

Ich muss aber leider einen permanenten Speicher benutzen, z.B. für verschiedenset Muster von neuronalen Netzen und von FFT-Arrays zur Mustererkennung.

Und "relativ" schnell gehen muss es auch, 100ms pro Schreibvorgang für 1 kB Daten ist sicher das Maximum. Das kriege ich aber sogar auf dem NXT locker hin.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.11.2014, 10:52
Beitrag #8
RE: Flash: schnelles Speichern und Lesen "großer" 1-2-dim Arrays und Structures?
Zitat:1.) Was bzw. wie groß genau ist denn das EEPROM beim Due?
Eindeutig: 0, der Due hat keinen EEPROM (sorry, das hatte ich in meinem Post völlig ausgeblendet).
Naja, dann bleibt nur der Flash mittels PROGMEM oder eben eine externe "Anbindung" per SD oder eben Netzwerk.
RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fehler beim Speichern von Projekten Manni66 16 679 23.08.2016 10:05
Letzter Beitrag: hotsystems
  Gewichteten Durchschnitt berechnen, 20 Werte in fortlaufender Variable speichern TimeMen 10 463 03.07.2016 09:00
Letzter Beitrag: Binatone
  String in EEPROM Speichern BennIY 2 404 27.06.2016 10:23
Letzter Beitrag: BennIY
  Messwerte in Array speichern ArduinoMega2560 2 407 07.06.2016 16:30
Letzter Beitrag: SkobyMobil
  Sensordaten in MYSQL speichern rieders 3 688 02.03.2016 19:58
Letzter Beitrag: rieders
  Ins eeprom schreiben/lesen anwo 10 1.779 07.02.2016 20:05
Letzter Beitrag: rpt007
  Pro Mini ADC Kanal 8 lesen Bitklopfer 8 615 30.12.2015 20:27
Letzter Beitrag: Bitklopfer
  Ergebnis lässt sich nicht speichern? schuballaa 2 624 30.08.2015 17:07
Letzter Beitrag: hotsystems
Brick Arduino Wetterstation Daten zu CSV speichern linuxman 4 1.616 23.08.2015 03:17
Letzter Beitrag: Scherheinz
  große 2-dim float-Arrays schnell auf SD speichern und zurücklesen? HaWe 25 2.184 22.06.2015 14:41
Letzter Beitrag: Thorsten Pferdekämper

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste