hi, und hier wieder eine frage: wer von euch kennt das sog. "Mailbox-System" beim programmieren? also es geht darum, dass mehrere daten und ereignisse gespeichert werden sollen und sich dabei nichts in die quere kommen darf/soll, aber auch keine funktion blockiert werden darf. d.h., wenn sensor(a) alle 10 sekunden speichert, aber gerade eine andere funktion von sensor(b) auf den speicherbus zugreift und diesen blockiert (für längere zeit), dürfen die daten von sensor(a) nicht verloren gehen. also muss eine art briefkasten (mailbox), also ein extra speicherbereich festgelegt werden, in den sensor(a) seine daten ablegen kann und automatisch, wenn der bus wieder frei ist, alles was darin liegt anschliessend (nachträglich) gespeichert wird. ich hoffe das war nicht allzu verwirrt beschrieben... hat sowas jemand schon mal programmiert oder sonstwie erfahrungen damit? also bei mir geht es um eine pumpen-elektronik, die zB minutenweise daten speichert, diese nach 60min zu stunden mittelt, nach 24h zu tageswerten und alle 30tage zu monatswerten; und diese dann alle in ringspeichern unterbringt. zusätzlich können aber auch ereignisse oder serviceroutinen eintreten, die je nach priorität den bus belegen können, während wieder eine speicherung fällig wäre. oh jee... jetz blick ich bald selbst nicht mehr durch... :-P
push schade; letzter versuch... keiner ne ahnung?
wie wäre es mit einem Multitasking-System? Da ist genau das was Du suchst schon eingebaut: * Für jeden Sensor einen Task * Für Dein Speichersystem einen Task Die Sensoren schicken Messages mit ihren zu speichernden Daten an den Speichertask. Multitaskingsysteme die das liefern, sind u.a.: proc realtime kernel von Jan Eric Nilsen (www.nilsenelektronikk.no) freeRTOS Viel Spass, Stefan
sorry, aber ich entwickel nur ein kleines teil des ganzen systems. das ganze drumherum wie µC, bus, sensoren, etc. und alles, was der prozessor sonst noch machen soll, ist vorgegeben. ich denke also an so eine art speicherverwaltung, bzw. ablaufsteuerung. sowas wie ein briefkasten, in den jeder teilnehmer, seine daten (mit bestimmter priorität) reinwerfen kann, dies durch einen interrupt erkannt wird und dann wenn zeit ist, im eeprom gespeichert wird. hierbei ist es halt wichtig, das bestimmte ereignisse absoluten vorrang haben, aber während eines anderen, nicht so wichtigen speichervorganges auftreten können, der dann kurzzeitig unterbrochen werden sollte.
Wenn es wirklich so aussieht, wie du es beschrieben hast, dann geht ja nicht anders als die Daten direkt an dem Sensor zu speichern. Es gibt verschiedene Moeglichkeiten, du koenntest z.B. einen kleinen MC implementieren oder was fertiges nehmen, fuer die Temperatur z.B. DS1615 von Maxim. Der kann so was: "...Logs up to 2048 consecutive temperature measurements in read-only nonvolatile memory "
Vielleicht kannst du es nochmal etwas genauer erläutern. Begriffe wie Speicherbus und Sensor sind zu allgemein. Und was meinst du mit "Speicherbus blockieren"? Um welche Zeitspannen geht es da, wo irgendwas nicht erfolgen kann? Werden Sensoren gepollt oder per Interrupt verarbeitet? Was für ein Prozessor, welche Programmiersprache? Ein Programm, was nicht in der Lage ist, alle paar Sekunden einen Sensor zu bedienen, ist von meinem Gefühl vom Design irgendwie schief.
hi, also: prozessor ist ein Renesas M32C85 und programmiert wird in C. bus ist ein I2C mit ca. 100kHz und Sensoren werden allemöglichen (als hausnummer mal ca. 20 stück). mit blockieren meine ich: die pumpe um die es hier geht, wird zu warm, d.h. ein sensor meldet die temperatur (alle paar sekunden) und ab einem grenzwert wird "alarm" gegeben => EREIGNIS 1 (soll wie alle anderen im über I2C angebundenen EEPROM gespeichert werden). gleichzeitig fällt die drehzalhl ab, meldung => EREIGNIS 2. und dummerweise will gerade zu dem zeitpunkt ein servicetechniker mit einem externen zugriff das EEPROM auslesen => EREIGNIS 3. das zB sollte dann schon geregelt sein, das erst die wichtigen daten festgehalten werden (EREIGN.1), aber die anderen dadurch nicht verloren gehen. zu den zeiten, das speichern eines 128byte blockes braucht <=20ms. das auslesen des gesamten speichers <=10sek. ich habe also jede menge daten in ringspeichern (tempereaturen) und ereigniszählern (fehler), so dass das 512kbit EEPROM gut genutzt wird. somit könnten sich also auch einige dieser daten beim speichern in die quere kommen, sollten mehrere zur selben zeit gespeichert werden. deshalb hatte ich an so eine art briefkasten gedacht, in den die sensoren zB ihre pakete reinwerfen und die dann von dort ins eeprom geschrieben werden.
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.