Forum: Mikrocontroller und Digitale Elektronik mailbox system beim programmieren (Ablaufmanager)


von Marcus (Gast)


Lesenswert?

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

von Marcus (Gast)


Lesenswert?

keiner eine idee oder erfahrung?  :-(

von Marcus (Gast)


Lesenswert?

push

schade; letzter versuch... keiner ne ahnung?

von Stefan Kleinwort (Gast)


Lesenswert?

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

von Marcus (Gast)


Lesenswert?

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.

von Aleksej (Gast)


Lesenswert?

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 "

von Winfried (Gast)


Lesenswert?

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.

von Marcus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.