Hallo Fachleute, ich bin gerade am Überlegen wie ich mein EEPROM das ich mit aufgezeichneten Daten gefüllt habe, auslesen soll. Kurz zum Verständnis. Alle 15 min macht mein Projekt eine Messung, der Messwert ist 1byte Groß und wird in ein I²C EEPROMgeschrieben. Dabei wird die EEPROM Speicheradresse immer um 1 höher gezählt. Zusätzlich wird jeden Tag vor der ersten Messung das Datum in das EEPROM geschrieben. (RTC unterstützt) Somit sieht mein EEPROM Inhalt wie folgt aus. (ich fange bei der Adresse 0x65 (101) an weil ich noch andere Werte im vorderen Bereich speichere) ERSTER TAG: 0x65 (101) --> 255 Start/End Zeichen 0x66 (102) --> 20 TAG 0x67 (103) --> 11 MONAT 0x68 (104) --> 12 JAHR 0x68 (105) --> xx erster Messwert …… (weitere Messwerte in Summe also 96) 0x68 (199) --> xx Messwert 0xC8 (200) --> xx letzter Messwert ZWEITER TAG: 0xC9 (201) --> 255 Start/End Zeichen 0xCA (202) --> 21 TAG 0xCB (203) --> 11 MONAT 0xCC (204) --> 12 JAHR 0xCD (205) --> xx Messwert …… (weitere Messwerte in Summe also 96) 0x12B (299) --> xx Messwert 0x12C (300) --> xx letzter Messwert Usw……. Wenn ich das verständlich beschrieben habe, seht ihr das ein Tag bei mir immer 100Byte braucht. Jetzt muss ich es irgendwie realisieren das ich einen bestimmten Tag im EEPROM finde. Wie macht man das normalerweise / am besten? • Das EEPROM nach aufeinander folgenden Kombinationen Bsp. (255.21.11.12) durchsuchen? (alsojedes Byte auslesen und vergleichen) Habe testweise Probiert, 1000byte lesen und vergleichen dauert 7sec. Würde für mich bei 64Kbytezu lange dauern. • Oder versuche ich mich an der Adresse lang zu hangeln? Also gesuchtes Datum in die„wahrscheinliche“ Speicheradresse Wandeln. Ich habe viel zu dem Thema gesucht, jedoch Leider nix gefunden. Ich denke ihr könnt mir bestimmt weiterhelfen, danke schon jetzt für Antworten.
Hm, wenn du kontinuierlich schreibst, also alle 15min einen Datensatz, brauchst du den Zeitstempel doch gar nicht. Aber stört auch nicht weiter. Zum Suchen: auch ganz einfach. Ersten Zeitstempel lesen, Adresse des gesuchten berechnen, fertig, dauert nicht mal 1ms. Willst du wirklich suchen - dafür gibts auch schnelle Algorithmen. -auf halber Speicherkapazität lesen -Datensatz vorhanden? -falls nein: untere "halbe Hälfte" lesen -falls ja: Datum zu gross/zu klein/gerade passend? Dementsprechend weiterverzweigen, findet man recht schnell.
Du liest einfach das Datum an der ersten Speicherstelle aus und dann ermittelst du die Differenz zwischen diesem Datum und dem gesuchten Datum. Die Differenz ergibt die Tagesdifferenz vom ersten Datum zum gesuchten Datum. Dann liest du einfach die Speicherzellen ab Tagesdifferenz * 100 aus. So oder so ähnlich sollte es recht fix ohne viel Rechenaufwand gehen.
Hallo Joachim, danke für deine Antwort, das sind sehr gute Lösungen, wieso komm ich da nicht selber drauf. Ich werde mir das jetzt mal ins Programm einbauen. Danke nochmal:)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.