www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Philips LPC2148 mit Keil Compiler -> zyklische tasks


Autor: Hux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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...

Autor: Robert Teufel (robertteufel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.