Hallo,
wie festgestellt wurde, blockierst Du mit while den Rest vom Code während Du Impulse zählst. Nimmst Du if statt while und kannst damit auf Clientanfragen reagieren, gehen Dir jedoch Impulse verloren, während Du den Client bedienst. Jetzt merkst Du schon, Du kannst eigentlich machen was Du willst, es wird nicht zu 100% perfekt.
Die Frage wäre, wie oft kommt eine Clientanfrage rein? Kann man das abschätzen?
Teurere Lösung:
2. µC nehmen der Imulse zählt und der vom 1. µC abgefragt wird wenn er Zeit hat und damit immer nur den aktuellsten Wert geliefert bekommt.
günstigste Lösung:
bei einem µC bleiben und je nachdem was wichtiger ist, könnte man:
der Impulszählung Vorrang geben, eine Clientanfrage in einer Variable speichern und wenn die Impulszählung fertig ist, fragt man die Variable ab ob eine Anfrage kam, wenn ja bedient man den Client verspätet. Kann natürlich sein der Client bekommt dadurch manchmal einen Timeoutfehler.
oder der Clientanfrage Vorrang geben, man läßt Impulse zählen, sobald eine Clientanfrage reinkommt, bedient man den Client, verwirft damit die Impulsmessung und fängt von vorn an mit der Impulsmessung. Nachteil hier, wenn viele Clientanfragen reinkommen, hat man möglicherweise nie die Möglichkeit eine Messung durchführen zu lassen.
- Idee wäre, man läßt die Impulse mittels Interrupt zählen.
Also permanent läuft der Code der die Clientanfragen bedienen kann und im "Hintergrund" löst jeder Impuls einen Interrupt aus, dieser zählt in einer kleinen/kurzen Funktion die Impulse. Der Rest der Rechung muß im Hauptsketch erfolgen. Der Code für den Interrupt sollte so kurz wie möglich sein, sonst blockiert er wiederum den loop zu lange. Bzw. im dümmsten Fall dauert die Interruptfunktion länger wie die Zeit zwischen den Impulsen, dann gehen Dir auch Impulse verloren. Ich weis ja nicht wieviel U/min du bekommst. Ein µC Takt dauert 62,5ns.
Das wäre mein Theorieansatz.