Hallo Forum, ich arbeite gerade mit dem oben genannten µC und Compiler. Nun habe ich folgendes Problem. Da der µC absolut neu für mich ist und ich vorher viel Motorola programmiert habe, habe ich einige Probleme. Die grundlegenden Funktionen klappen alle I/O Ports lesen und so weiter. Meine Frage: Kann ich eine "Funktion" als Beispiel hier void test(viod) { ... } Kann ich so eine Funktion/Task auch einer anderen Funktion/Task zyklisch aufrufen lassen d.h. z.B. die Funktion "test" beim Starten zyklisch alle 300ms ausführen lassen? Kann ich das machen? Wenn ja wie, denn ich finde dies bezüglich keine Informationen wie es bewergstelligen sollte. Das ist nur ein Problem was ich momentan habe, aber dafür eine Lösung zu haben würde mich erstmal sehr viel weiterbringen. Als info für euch. Ich bin das Wochenende im Kurzurlaub udn bin somit erst am Montag morgen wieder da. Besten dank schonmal.. mfG HUX
Entweder mit einem RTOS (FreeRTOS) oder einfach ein Timer der alle paar ms einen Interrupt gibt. Bei jedem Interrupt wird eine Variable incrementiert. Entspricht die variable einer Zeit von 300ms wird ein Flag gesetzt. In der Hauptschleife fragst du das flag ab. Ist das Flag gesetzt führst du deine Routine aus, wenn nicht -> weiterwarten...
>vorher viel Motorola programmiert habe... Und, wie hast du das dort gelöst? Das macht doch vom Prinzip her keinen Unterschied auf welchem Rechner man das selbe Problem lösen möchte. >Kann ich so eine Funktion/Task auch einer anderen Funktion/Task >zyklisch aufrufen lassen d.h. z.B. die Funktion "test" beim Starten >zyklisch alle 300ms ausführen lassen? Irgendwie ist der Satz ein bisschen durcheinander...
Muss da den Vorschreibern recht geben. Wer weiss, wie er einen Mot (oder Freescale) Chip dazu bringt einen zyklischen Interrupt zu generieren, der ist auch beim ARM nicht weit weg. Basierend auf dem Takt berechnen wie weit der Timer zaehlt in 300 ms. Diesen Wert in ein Compare Register schreiben. Interrupt fuer diese Funktion freigeben. Timer auf "0" setzen Timer starten, der zaehlt bis der Vergleichswert erreicht ist. Nochmals den Wert fuer weitere 300 ms auf den Vergleichswert addieren und als neuer Vergleichswert reinschreiben. (Ueberlauf beruecksichtigen) Im Interrupt die gewuenschte Funktion ausfuehren, kann natuerlich auch noch weitere Funktionen aufrufen aber das waere ausserhalb des Interrupts besser aufgehoben. p.s. falls 1 sekunde auch geht, einfach die RTC nehmen ;-) Robert
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.