hallo zusammen, ich bastel an meiner diplomarbeit und habe da eine frage was den umgang bzw. die korrekte verwendung eines timers angeht. hier die situation: - 4 Prozesse laufen nacheinander ab - das ganze wird zyklisch wiederholt - die dauer der einzelprozesse ist nicht genau gleich und lässt sich nicht beeinflussen (ca 10ms pro prozess) - die 4 prozesse sollen immer wieder nach 4 sekunden aufgerufen werden das heißt die zeit zwischen dem aufruf von prozess 2 und dem nächsten aufruf von prozess 2 soll 4 sekunden sein ich wolle nun zu beginn jedes prozesses einen timer starten und den dann eine Sekunde laufen lassen wenn er fertig ist den nächsten prozess starten und den timer neu laden. damit würde ich ja erreichen dass die gesamtzykluszeit 4 sekunden wäre oder?? =) nur jetzt hab ich nen 16-bit timer der kann ja bis 65534 zählen mit nem vorteiler käme ich im längsten fall auf 2,6µs. 65534 * 2,6µs = 170ms =( wahrscheinlich ist das problem ganz einfach zu lösen nur steh ich aufm schlauch... =) wäre schön wenn ihr mir nen netten tip geben könntet =)
Zähle doch im Timer eine Variable hoch. Wenn du z.B. alle 100ms um 1 erhöhst, musst du nur noch prüfen, ob 10 erreicht wurde. Dann einfach die Variable zurücksetzen und den passenden Prozess starten... Du kannst natürlich auch bei 10 den ersten Prozess, bei 20 den zweiten, usw. starten und bei 40 wieder von vorne anfangen zu zählen... Chris
Quick and Dirty: Lass dir alle 100ms einen Interrupt erzeugen und zähl auf 40. Dann sind 4 Sekunden vergangen. Ich mache das üblicherweise so, dass z.B. jede ms ein Interrupt erzeugt wird, der eine Variable ulong tiAkt hochzählt. Und alle anderen Zeiten berechnen sich relativ zu diesem durchlaufenden Zähler. So etwa:
1 | if (tiAkt > tiProzess2) { |
2 | Prozess2(); |
3 | tiProzess2 = tiAkt+4000; |
4 | }
|
hmmm gott wie blöd... =) naja ich bin schon ne weile wacht heute =) danke das werd ich mal versuchen
ein problem ist nur bei dem 1ms-interrupt dass die 4 prozesse nicht unterbrochen werden dürfen =(
> dass die 4 prozesse nicht unterbrochen werden dürfen
Das würde mir aber zu denken geben :-/
Diese Timer-Hochzähl-Interrupt-Routine dauert nicht sehr lange (ein paar
us). Wenn das deine Prozesse 1-4 nicht vertragen, dann wirst du aber
garantiert irgendwo anders ins offene Messer laufen.
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.