www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Pseudo Multitasking


Autor: Pascal (Gast)
Datum:

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

Autor: Anonymous (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dazu sind Timers da...

Autor: Pascal (Gast)
Datum:

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

Autor: Anonymous (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Sigint 112 (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Pascal:
   Wie kommst du darauf, daß der AVR kein Multitasking kann? Zugegeben, 
mit BASCOM wird das wahrscheinlich nix, aber in ASM ist das durchaus 
machbar:

http://www.barello.net/avrx/

Gruß,
  SIGINT

Autor: vielleicht so (Gast)
Datum:

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

Autor: Pascal (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

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.