Forum: Mikrocontroller und Digitale Elektronik Datenbank auf externen Speicher mit PIC24/PIC32


von Michael S. (rbs_phoenix)


Lesenswert?

Hallo zusammen,

ich mache mir für mein nächstes Projekt ein paar Gedanken und bin gerade 
an der Stelle, wie ich am besten die Daten speichern kann.

Hardwaretechnisch besteht es im Wesentlichen aus einem (evtl 
Touch)Display, ein paar Tasten, einem PIC24 (in C) oder evtl auch gleich 
einen PIC32 (in C o. C++) sowie einen externen NICHT flüchtigen 
Speicher. (Bitte keine Diskussionen über PIC/ARM ;) )

Bei dem Speicher bin ich noch unsicher, ob ich eine µSD-Karte oder einen 
Flash-IC nehme. Sollte es eine SD-Karte werden, wird diese jedoch nicht 
zugänglich sein, es sei denn, man öffnet das Gehäuse.

Es sollen in dem externen Speicher 2 verschiedene Datensätze gespeichert 
werden. Die Anzahl der Datensätze wird lediglich durch den Speicher 
begrenzt. Zudem sollen die einzelnen Datensätze wieder gelesen werden 
können.

Datensatz A: 1 String (max 50 Buchstaben o. Zahlen), 4 float-Variablen
50Byte + 4*4Byte = max 66Byte

Datensatz B: 1 String (max 100 Buchstaben o. Zahlen), eine Liste oder 
2D-Array, welches eine uint16-Variable sowie ein Verweis auf einen 
Datensatz A beinhaltet.
Datensatzgröße ist abhängig der Listengröße. Ich schätze im Schnitt sind 
es so 10-20 Einträge.


Jetzt bleibt die Frage, wie ich die Daten abspeichere. Da habe ich mir 3 
verschiedene Szenarien überlegt:

1. Ich speichere die Daten vom Satz A mit einer festen Größe ab, sodass 
ich mit einem Adressenabstand von 66 Byte immer zum nächsten Eintrag 
komme. Hiermit fülle ich den Speicher "von Hinten" an, sodass die 
B-Datensätze am Beginn des Speichers anfangen können. Bei diesen muss 
man wohl oder übel nach einem Abschlussbyte suchen, welches hinter jeder 
Liste steht. Der Nachteil ist bloß, dass durch die feste Größe mehr 
Speicherplatz als nötig verbraucht wird, da vermutlich selten die 50 
Zeichen des Strings ausgereizt werden. Das Suchen nach den B-Datensätzen 
ist ebenfalls umständlich. Ich habe auch schon überlegt, 2 separate 
Speicher zu nehmen, doch das nimmt unnötig Platz weg, bei der 
SD-Kartenlösung ist es vergeudeter Speicher/Kosten und zusätzlich will 
ich da vielleicht auch noch Konfigurationen abspeichern, was wieder ein 
Datenmix verursacht. Zudem kann man nicht mehr ohne Weiteres die Liste 
in einem Datensatz B erweitern. Für mich ist diese Speicherart Aufgrund 
des Aufwandes eigentlich schon raus.

2. Das andere Extrem wäre, sofern überhaupt möglich, ein Datenbanksystem 
wie z.B. SQL. Ist ja auch quasi dafür gemacht. Verschiedene Tabellen für 
die verschiedenen Datensätze usw. Ich kenne mich allerdings nicht so gut 
mit dem SQL-Hintergrund aus - meine Erfahrungen kommen eher aus der 
PHP-MySQL Kombi bei Webseiten. Ich nehme an, dass dort auch allerhand 
zusätzlicher Speicherplatz benötigt wird. Bei einer 2-4GB SD-Karte oder 
einen 4Gbit-Flash ist aber denke ich genug Platz dafür da. Hier sehe ich 
die Rechenleistung eher als Problem, um die Daten zu lesen. SQL bietet 
ja die Funktion, beim Abruf nach wählbarer Spalte zu sortieren und 
gleich nach Inhalten zu Filtern. Das alles braucht Rechenleistung. 
Wieviel genau und wie es dann auf einem PIC24 o. PIC32 läuft weiß ich 
nicht. Ich will aber nicht 5 Sekunden warten müssen, um auf die Daten 
zuzugreifen. Auf der anderen Seite hat der µC neben der 
Displayansteuerung auch nicht viel zu tun, wodurch sowas vielleicht doch 
machbar wäre. Mit SQL oder anderen Datenbanksystemen stelle ich mir die 
Lösung bzw. den Zugriff auf die Daten am übersichtlichsten vor, sobald 
das Drumherum steht. Das gibt es aber vielleicht schon fertig!? Wenn ich 
nach PIC32 und SQL suche, kommen nur Beiträge um mit einem PIC32 via LAN 
oder gar Internet auf eine Datenbank zuzugreifen. Bei mir ist Server und 
Client ja das Selbe.

3. Ich formatiere den Speicher mit FAT16 o. FAT32 und erstelle mir damit 
eine Ordnerstruktur wie auf dem PC. Im Hauptverzeichnis könnte dann eine 
Konfig-Datei liegen sowie verschiedene Unterordner für die beiden 
Datensätze. In den Ordnern liegen dann Dateien, die den String als 
Dateinamen haben, und darin sind dann Zeilenweise getrennt die 
float-Zahlen bzw die Listeneinträge.
Scheint aus meiner Sicht die momentan beste Lösung zu sein.
Kann man denn auch ein normalen Flash-IC mit FAT formatieren? Ich kenne 
die Ansteuerung von SD-Karten, gibt es ja auch oft fertige Libs für, 
doch da geht es nur um den Zugriff, nicht um das formatieren selbst. 
Dort wird immer eine formatierte SD-Karte vorausgesetzt.
Sind die angelegten Dateien eigentlich gleich Alphabetisch sortiert?
Und wie sieht es bei FAT16/32 mit solch kleinen Dateien aus? Gibt es da 
eine Minimalgröße oder ist das eine Eigenschaft der Festplatten?

Wie würdet ihr es machen? Ist SQL o.ä. zu übertrieben? Oder gibt es 
vielleicht noch andere, bessere Lösungsarten?

Ich würde mich über Ratschläge oder Ideen sehr freuen.

Grüße

Michael

: Bearbeitet durch User
von Datenkrake (Gast)


Lesenswert?

Michael S. schrieb:
> ein Datenbanksystem
> wie z.B. SQL.

SQL ist kein Datenbanksystem, sondern nur die Abfragesprache für ein 
solches.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.