AVR Multitasking verständnisfrage

Gast #5186544
Lesenswert?
• ▲
▼
Guten Abend zusammen

Ich habe soeben das Multitaskingtutorial durchgeschaut und bin an einem 
Punkt hängengeblieben : 
https://www.mikrocontroller.net/articles/Multitasking#Verbesserter_Ansatz

Dort werden ja quasi die 3 verschiedenen Aufgaben die der MC zu 
erledigen hat in Funktionien verbaut und dann im Hauptprogramm diese 
einzeln aufgerufen, dann eine Milisekunde gewartet und dann alles wieder 
von vorne.

Wenn jetzt aber die LED schön im Takt blinken soll, dann verzögern ja 
die anderen 2 Funktionen die 1 ms Wartezeit bis zum erneuten Aufruf der 
Blinkfunktion, nicht? Der MC benötigt ja eine gewisse Zeit zusätzlich um 
die Funktionen abzuarbeiten. Und so dauert es minimal länger als 1 ms 
bis die Funktion wieder aufgerufen wird, oder?


Stimmt es das es nur sehr schwer möglich ist Zeitkritisches Multitasking 
auszuführen ohne Timer/Interrupts?
#5186548
Lesenswert?
• ▲
▼
Cheater schrieb:
> dann verzögern ja
> die anderen 2 Funktionen die 1 ms Wartezeit bis zum erneuten Aufruf der
> Blinkfunktion, nicht?

Das ist so.

Cheater schrieb:
> Und so dauert es minimal länger als 1 ms
> bis die Funktion wieder aufgerufen wird, oder?

ja

Cheater schrieb:
> Stimmt es das es nur sehr schwer möglich ist Zeitkritisches Multitasking
> auszuführen ohne Timer/Interrupts?

Zumindest eine generische Lösung lässt sich nicht so leicht finden.
#5186573
Lesenswert?
• ▲
▼
@Cheater (Gast)

>Blinkfunktion, nicht? Der MC benötigt ja eine gewisse Zeit zusätzlich um
>die Funktionen abzuarbeiten. Und so dauert es minimal länger als 1 ms
>bis die Funktion wieder aufgerufen wird,

Ja.

>Stimmt es das es nur sehr schwer möglich ist Zeitkritisches Multitasking
>auszuführen ohne Timer/Interrupts?

Ja, aber warum sollte man das? Einen Timer hat heute jeder uC.
#5186638
Lesenswert?
• ▲
▼
Zwölf M. schrieb:
> Das Konzept nennt sich Systemtick.

> Ein timer interrupt, der alle ms ein Flag setzt. Das mainfragt
> dieses Flag ab und fuehrt alle ms das passende aus.

Wenn es das einzige ist, was in der ISR passiert, kann man sich den 
Interrupt mit seinem ganzen Overhead auch sparen und das Timer-Flag 
direkt abfragen.

> Gewartet wird nirgendwo. Strikt nirgendwo

Doch, natürlich wird gewartet. Je nachdem wie lange das, was beim 
Systemtick abgearbeitet wird, dauert, wird entsprechend lange auf den 
nächsten Tick gewartet.

Aber genau das sorgt für ein vernünftiges Timing. Mit regelmäßig 
blinkenden Leds, flackerfreiem Multiplexing etc.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.