Hallo!
Ich habe folgendes Problem: Ich möchte Takte per Interrupt zählen.Es dürfen keine Takte verloren gehen. Ich kann nun in der ISR eine Flag setzen. Das Problem ist aber, dass der Prozessor in der Hauptroutine immer wieder sehr grosse Mengen an Daten verarbeiten muss und in der Zeit mehrere Takte zu zählen sein könnten. In diesem Fall wäre aber die Flag noch immer gesetzt (weil noch nicht verarbeitet) und es würden Takte verloren gehen.
Ich kann in der ISR auch eine Variable hochzählen. Das wäre erst mal kein Problem, die Taktfrequenz kann nur bis zu 30 HZ gehen, ist meist aber deutlich niedriger. Wie gehe ich aber dann mit dem Problem um, dass ich womöglich gerade dabei bin, die Zählvariable zu lesen (in der Main) und genau da mittendrin ein IRQ kommt und genau diese Variable verändert wird?
Wie kann ich an der Stelle Datenchaos verhindern? Gibt es dazu eine gute Lösung oder einen gänzlich anderen Lösungsansatz?
Viele Grüße und Danke für jede Hilfe!
Andy
Ich habe folgendes Problem: Ich möchte Takte per Interrupt zählen.Es dürfen keine Takte verloren gehen. Ich kann nun in der ISR eine Flag setzen. Das Problem ist aber, dass der Prozessor in der Hauptroutine immer wieder sehr grosse Mengen an Daten verarbeiten muss und in der Zeit mehrere Takte zu zählen sein könnten. In diesem Fall wäre aber die Flag noch immer gesetzt (weil noch nicht verarbeitet) und es würden Takte verloren gehen.
Ich kann in der ISR auch eine Variable hochzählen. Das wäre erst mal kein Problem, die Taktfrequenz kann nur bis zu 30 HZ gehen, ist meist aber deutlich niedriger. Wie gehe ich aber dann mit dem Problem um, dass ich womöglich gerade dabei bin, die Zählvariable zu lesen (in der Main) und genau da mittendrin ein IRQ kommt und genau diese Variable verändert wird?
Wie kann ich an der Stelle Datenchaos verhindern? Gibt es dazu eine gute Lösung oder einen gänzlich anderen Lösungsansatz?
Viele Grüße und Danke für jede Hilfe!
Andy