Hallo zusammen, ich bin auf der Suche nach einer Möglichkeit, eine Zeit zwischen zwei Punkten (in Sekunden) zu ermitteln. Ich setze C unter einem C167 Prozessor ein (mit Tasking und CMX). Bin aber schon beim Ermitteln der aktuellen Zeit auf Probleme gestossen. Allein schon der Aufruf time() liefert mir stets 0xFFFFFFFF, d.h. die Funktion scheint wohl nicht unterstützt zu werden. Gibt es überhaupt eine Möglichkeit, Sekunden auszulesen? Es muss ja nicht eine genaue Uhrzeit sein - wird ja nirgends gesetzt. Aber die Möglichkeit, irgendwo steigende Sekunden abzufragen würde mir ja reichen, um die Dauer zu berechnen. Vielen Dank. Grüße, AndyKaiser
Sowas geht mit einer ordentlichen Debugging Schnittstelle samt passendem Debugger. Auf STM32 mit Lauterbach mache ich das dauernd. Ansonsten nimm einen Ausgangspin und schalt den an Punkt 1 ein und an Punkt 2 aus und miss die Zeit mit einem Oszi oder LA. Das ist die Lowtech/LowCost Variante.
Du kannst ja einfach einen freilaufenden Timer (GPT) verwenden. Dann holen du dir den Wert an Stelle 1 und 2 ab, bildest eine Differenz und rechnest es in deine gewünschte Zeiteinheit um. Im Idealfall Tickt der Timer z.B. mit 1ms. Damit kannst du dann direkt 65s mit 1ms Auflösung abdecken. Die neueren GPTs von Infineon kann man auch hintereinander Ketten. Ich weiß nicht ob das bei deinem alten Controller auch geht, musst du schauen. Dann könntest du einen größeren Zeitraum abdecken.
Andreas W. schrieb: > time() In einem so kleinen Prozessor hat man normalerweise einen "Ticker": Eine variable "SysTicker", die in ms raufzählt oder einen Timer-Interrupt, der alle 1ms aufgerufen wird (und in dem man seinen eigenen SysTicker raufzählt). Wichtig: * SysTicker volatile und unsigned * Nur in der Interruptroutine incrementieren, nicht irgendwo anders setzen, keine Behandlung des Überlaufs (-> das geht immer schief) * Wenn 16Bit, dann niemals für mehr als 30s verwenden (danach geht alles schief!) * Wenn 32Bit, dann nach spätestens 20 Tagen einen Reset machen (weil die Überläufe manchmal doch falsch behandelt werden und man das nicht sinnvoll testen kann) * Berechnungen von Zeiten/Differenzen maximal in der Breite des SysTickers * Niemals sowas wie "if(SysTicker>oldSysTicker + 100)" oder so. * Immer "diff = SysTicker - oldSysTicker; if(diff > 100)". * Nur wenn der SysTicker mindestens int-Breite hat (16 oder 32 Bit), dann geht auch sowas: "if((SysTicker - OldSysTicker) > 100)" (Klammern nur zur Verdeutlichung).
:
Bearbeitet durch User
Andreas W. schrieb: > Ich setze C unter einem C167 Prozessor ein Sicher, daß Du mit diesem Urgestein noch ein neues Projekt anfangen willst? Infineon hat mit dem C167 den Fehler gemacht, nicht auf Flash umzusteigen, wie alle anderen µC-Hersteller. Daher ist er kaum verbreitet. Wer will sich heute noch mit Mask-ROM rumplagen. Der Schritt zum XC167 mit Flash erfolgte viel zu spät (2005), so daß dieser schon wieder obsolet ist.
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.