Flario
07.10.2009, 23:16
Hallo,
ich habe folgendes problem:
Ich möchte Impulse von einem Stromzähler mittels Interrupt zählen und die Daten über LAN verschicken.
Dazu speichere ich jede Minute die Summe der letzten Impulse in einen Array. Eine "Counter" Variable zeigt mir immer auf die letzte befüllt Adresse im Array. Immer wenn möglich werden die Daten des Arrays von unten weg versendet und der Counter um eins zurückgezählt.
Wenn nun während des Sendevorganges bzw. an einer anderen Stelle im Programm, wo der "Counter" gebraucht wird, der Interrupt diesen um 1 erhöht, würden unvorhersebare Probleme entstehen.
Als Lösung wäre mir eingefallen dass ich während des Sendens mir den "Counter" in eine andere Variable abspeichere und danach ihn mit dem "Counter" vergleiche um zu sehen ob der Interrupt in dieser Zeit aktiv war. Danach müsste ich lediglich die Lücke in dem Array beseitigen. Das einzige Problem nun währe dass der Interrupt beim aufräumen wieder Probleme verursachen könnte.
Eine andere denkbare Lösung währe, den Interrupt für die Sendezeit zu deaktivieren und danach wieder zu Aktivieren, dabei könnte ich jedoch einen "Tick" verpassen. Is es möglich den Interrupt beim Aktivieren auslösen zu lassen, wenn ein Tick in der zwischenzeit gekommen wär. Nur könnte ich dabei 2 Ticks verpassen und am Ende nur 1nen rausbekommen.
Fällt euch eine bessere Lösung zu dem Problem ein, oder wie würdet ihr das angehen?
Freundliche Grüße
Philipp Reitter
ich habe folgendes problem:
Ich möchte Impulse von einem Stromzähler mittels Interrupt zählen und die Daten über LAN verschicken.
Dazu speichere ich jede Minute die Summe der letzten Impulse in einen Array. Eine "Counter" Variable zeigt mir immer auf die letzte befüllt Adresse im Array. Immer wenn möglich werden die Daten des Arrays von unten weg versendet und der Counter um eins zurückgezählt.
Wenn nun während des Sendevorganges bzw. an einer anderen Stelle im Programm, wo der "Counter" gebraucht wird, der Interrupt diesen um 1 erhöht, würden unvorhersebare Probleme entstehen.
Als Lösung wäre mir eingefallen dass ich während des Sendens mir den "Counter" in eine andere Variable abspeichere und danach ihn mit dem "Counter" vergleiche um zu sehen ob der Interrupt in dieser Zeit aktiv war. Danach müsste ich lediglich die Lücke in dem Array beseitigen. Das einzige Problem nun währe dass der Interrupt beim aufräumen wieder Probleme verursachen könnte.
Eine andere denkbare Lösung währe, den Interrupt für die Sendezeit zu deaktivieren und danach wieder zu Aktivieren, dabei könnte ich jedoch einen "Tick" verpassen. Is es möglich den Interrupt beim Aktivieren auslösen zu lassen, wenn ein Tick in der zwischenzeit gekommen wär. Nur könnte ich dabei 2 Ticks verpassen und am Ende nur 1nen rausbekommen.
Fällt euch eine bessere Lösung zu dem Problem ein, oder wie würdet ihr das angehen?
Freundliche Grüße
Philipp Reitter