AVR Pseudo Multitasking

Gast #1000798
Hallo,

nachdem ich mitlerweile sämtliche Foren und auch Google abgegrast habe 
komme ich leider trozdem nicht wirklich weiter. Mir geht es darum ich 
habe einen ATMega8 mit Bascom programmiert das dieser einen 
Temperatursensor ausließt und ausgibt.

Nun würde ich nebenbei noch wollen das eine LED am PortB.1 blinkt. 
Leider kann der Prozessor ja kein Multitasking und wenn der Controller 
in einer wait_ms Anweisung hängt wartet er ja und da blinkt woanders 
nichts mehr!.

Währe es möglich das die Codes (Sub1 und Sub2) wirklich gleichzeitig 
ausgeführt werden?
Gast #1000802
Ich weis nur ich hab noch nicht so richtig Begriffen gerade auch in 
Bascom wie das funktionieren soll wenn er z.B. gerade in der Wait 
Anweisung steckt dann würde er ja zu Sub2 springen und dann wieder alles 
von ganz vorne????
Gast #1000827
Der Witz des Multitasking ist die unbenutzte Zeit der CPU richtig zu 
verteilen. Dh es gibt generell kein polling, sei das nun fuer ein Delay 
oder ein Wait. Sobald ein Prozess warten muss geht die restliche Zeit an 
den Kernel, und der macht mit einem anderen Prozess weiter.
Gast #1000828
Achso! Danke mitlerweile funktioniert es :-D. Ich hab schon gelesen das 
es für die Mega32 Serie extra Betriebssysteme geben soll aber bei mir 
ist es mehr Spielerei :-)
#1000836
@ Sigint 112 (sigint)

>   Wie kommst du darauf, daß der AVR kein Multitasking kann? Zugegeben,
>mit BASCOM wird das wahrscheinlich nix,

Nöö, BASCOM kann das problemlos. Aber einge Programmierer vielleicht 
nicht.

@ Pascal (Gast)

Der Trick des Multitasking ist, dass man EBEN NICHT wartet, sondern 
prüft, ob eine bestimmte Teilaufgabe bearbeitet werden muss. Wenn ja, 
dann macht man das. Wenn nein, geht man zu nächsten Teilaufgabe weiter. 
Das nennt man dan kooperatives Multitasking. Das kann man mit Timern 
lösen. Für den ersten, einfachen Ansatz kann man das aber auch mit 
kleinen Häppchen von wait_ms machen. Also anstatt wait_ms(1000) macht 
man eine Schleife mit 1000 mal wait_ms(1). In dieser Schleife zählt man 
eine Variable hoch. Ist sie 1000, lässt man die LED blinken 
(umschalten). In den 1000 Durchläufen kann man aber 1000 mal prüfen, ob 
der Temperatursensor ausgelesen werden muss. Damit "klemmt" nix, wenn 
die LED blinken soll.

MFG
Falk

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.