dynamische Speicherbelegung auf Chip



  • Was genau ist unklar?



  • Du willst also quasi beliebige Key/Value-Paare speichern auf dem Chip? Wobei key und value beliebige Datentypen sein können?

    Dann bleibt dir ja nicht viel anderes als in etwa solch eine Struktur für jeden Eintrag:

    struct entry{
      int type;
      int keysize;
      int valuesize;
      char key[keysize];
      char value[valuesize];
    };
    

    Ist natürlich keine gültige c++-Syntax aber ich denke es ist klar worauf ich hinaus will. Das Programm bestimmt anhand des type welchen Typ Key und Value haben. Eigentlich könnte auch keysize und valuesize anhand des types bestimmt werden. Problematisch natürlich nur, wenn sich das unterscheidet. Bei Strings zum Beispiel. Aber das kommt halt auf die eigentliche Problematik drauf an, die du nicht wirklich ausführlich beschrieben hast.



  • ok ich versuchs nochmal zu erklären.

    Also ich habe einen RFID Chip. Auf dem sollen diverse Daten abgespeichert werden und natürlich auch ausgelesen werden sollen. Da die Datenmenge relativ groß und vielseitig ist, sollte diese so effizient wie möglich abgespeichert werden.
    Deshalb wollte ich das möglichst dynamisch lösen.
    Problem ist nur, dass der Chip nie komplett ausgelesen werden soll, da dies zu Zeitaufwendig wäre und ich ihn deshalb nur gezielt auslesen werde.
    Dazu muss ich dann aber wissen wo die entsprechenden Daten vorher abgelegt wurden die ich nun haben möchte. Diese Information wo was liegt muss dann ja iwie mit auf dem Chip sein.
    Also beispielsweise Chip kommt in Firma X und man möchte nun wissen wie man das Bauteil "behandeln" darf, wie groß es ist, o.ä. und auch nur diese eine Info auslesen und nicht den ganzen Chip und dann die entsprechende Info aus der Geamtdatenmenge raussuchen.
    Die erste Überlegung war jetzt das ganze statisch abzuspeichern, so hätte man eine Art Lageplan für die entsprechenden Daten.
    Nur dies schien mir im nachhinein zu verschwenderisch, wenn man überall genug reserviert um keinen Überlauf zu riskieren. Deshalb will ich es dynamisch lösen.
    Nur dazu brauch ich ja auf dem Chip individuell einen Plan wo was liegt also einen Bereich wo Zeiger abgespeichert sind, o.ä.



  • Entweder am Anfang eines jeden Datenblocks, so musst du dich von Datenblock zu Datenblock hangeln aber immerhin nicht die ganzen Daten auslesen. Oder alles am Anfang aber dann musst du entsprechend Platz für die Einträge einplanen. So schwer? 😉



  • Was heißt schwer. Hab halt noch null Erfahrung und muss das nu regeln.
    Aber an das mit das Von Datenblock zu Datenblock hangeln hab ich auch schon gedacht, dachte man könnte das iwie anders lösen, so dass man ne Art "Inhaltsverzeichnis" individuell am Anfang macht und dann direkt den entsprechenden Block sich raussucht. Weil mit dem Reader kann man direkt Byte x bis y auslesen.



  • Wenn die Größe des "Inhaltsverzeichnies" dynamisch sein soll kannst du es ja so machen, das dieses am Anfang der Blöcke steht und du den Chips von hinten her auffüllst. Würde sich der neue Inhaltseintrag und der neue Datenblock überschneiden gilt der Chip als voll.

    Sollen denn auch Daten gelöscht werden können? Dann musst du dir auch um Fragmentierung/Speicherlöcher Gedanken machen,



  • Das sollte auch vorgesehen werden. Gibt es dafür spezielle Algorithmen, so dass ich den Fragementierungsteil nich selber schreiben müsste und einfach einbinden kann?



  • Nicht das ich wüsste. Falls das nicht so oft vorkommen sollte, dann kannst du ja einfach alle Daten einlesen, den Chip plätten und wieder komplett neu beschreiben. Jedesmal wenn der eigentliche Platz reicht aber nicht in einem Stück vorhanden ist. Suboptimal aber eine Möglichkeit. 😉



  • Stimmt das ne Möglichkeit, aber die ist so suboptimal dass nich möglich weil das ziemlich lange dauert diesen chip auszulesen und der leseabstand rel gering ist,
    ca. 1 cm
    Das würde dann zu kritisch werden. Aber ich denke es ist eh nich sinnvoll den überhaubt zu defragmentieren aufgrund der Zeitdauer, weil alle anderen Techniken, wohl auch zu lange dauern würden.



  • Sonst schreibst halt ne Funktion um Platz zu schaffen. Simpel gesehen schaust du vom größten freien Stück abwärts ob der Platz ausreichen würde wenn du angrenzende Daten in andere freie Bereiche kopieren würdest. Ist nicht wirklich kompliziert.



  • hm danke ersma klingt ein wenig Zeitintensiv. (Nicht vom Aufwand her sondern hinterher in der Praxis).
    Ich versuche erstmal ohne löschen auszukommen durch komprimierung der Datenmenge.
    Glaub der Vorschlag von dir die Zeiger ans Ende zu packen und den Rest einfach an Anfang ist eigtl garnich mal so schlecht.
    Nur Nochmal zum Verständnis wenn ich jetzt Datenblock X haben will muss ich dann ja erst das komplette Inhaltsverzeichnis auslesen, dann mir den entsprechenden Eintrag raussuchen und mich dann auf die richtige Stelle verweisen lassen.
    Dann brauch ich aber doch noch ne information wie groß aktuell das Inhaltsverzeichnis ist, oder?



  • Die Größe des Inhaltsverzeichnisses kannst du ja simpel realisieren indem du als letzten Eintrag immer den gleichen Dummy-Eintrag nimmst. Oder speicherst die Anzahl als ersten short auf den Chip. Also dann:

    Anzahl Einträge
    Eintrag 0
    Eintrag 1
    Eintrag 2
    ...
    ...
    Daten 2
    Daten 1
    Daten 0



  • speicher die daten in ne datenbank^^ auf dem chip *fg*


Anmelden zum Antworten