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?
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????
@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
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.
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 :-)
@ 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
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.