Kann ich beim ATMEGA8535 Multitasking anwenden also programmabläufe parallel ablaufen lassen??
BITTE um Rückantwort
MFG
Michael
Kann ich beim ATMEGA8535 Multitasking anwenden also programmabläufe parallel ablaufen lassen??
BITTE um Rückantwort
MFG
Michael
Nicht wirklich, aber du kannst das Programm ja so schreiben, dass er zB nicht in warteschleifen geht oder so, sondern diese mit hilte des Timers macht...
Also dass der programm immer durchläuft. Und nicht irgendwo hängenbleibt. Und Zeitroutinen über eine Variable im Timer runterzählen lassen, und sie immerwieder mit if überprüfen...
Gruß,
Franz
hmm....
ok ich will dass machen!
will PA0 -PA7 nacheinander leuchten (0,25s)
gleichzeitig soll PB0 - PB3 nacheinander leuchten (0,50s)
ah ja noch was ich programmiere in Assembler nicht in C!
MFg
Michael
nimm 2 AVRs, dann kannst du auch 2 Dinge gleichzeitig (realtime) laufen lassen![]()
Auf www.avrfreaks.net gibt es ein Multitasking-Script. Natürlich nicht wirkliches Multitasking, sondern nur so Pseudo-Mässig.
lg
Und sie dreht sich doch...
http://www.muasch.com
http://robotik.muasch.com
Definitiv kein Bascom-User
Wenn du zB zwei sachen zeitgesteuert machen willst, und neben bei noch was anderes ausgeführt werden soll, dann kannst du das so machen...
Dein Timer führt diese funktion 10 mal pro sekunde aus (zB!):
In der Hauptfunktion kannst du dann die Sachen so steuern:Code:void TIMER ( void ){ if( timervar1 ){ timervar1 --; } if( timervar2 ){ timervar2 --; } if( timervar3 ){ timervar3 --; } }
Diese Funktion wird immer Durchlaufen:
if( timervar1 ){ "ES WERDE LICHT" }else{ "ES WERDE DUNKEL" }
Bei irgend ner Bedingung soll 10 Sekunden lang LICHT WERDEN:
also setzt man timervar1 auf 100:
timervar1 = 100;
Solange nun timervar1 UNGLEICH 0 ist, leuchtet die LED.
Und du kannst den Controller bequem was anderes machen lassen....
EDIT1: Richtiges Multitasking gehd glaub ich nicht mal bei handelsüblichen PCs (ausser bei den DUAL CORE PROZESSOREN, da glaub ich geht es...)
EDIT2: timervar1..3 sind globale Variablen!
Gruß,
Franz
Naja, die Meisten meinen wenn sie von "richtigem" Multitasking reden das sog. "preemptive multitasking" wie es z.B. bei Desktop-Betriebssystemen zum Einsatz kommt.
Der Vorteil dabei ist, daß quasi mehrere Programme völlig unabhängig voneinander laufen können. Die Programme bekommen dann jeweils für eine bestimmte Zeit die CPU ganz für sich allein, und müssen die Kontrolle auch nicht freiwillig wieder abgeben. Das ist natürlich sehr praktisch, denn selbst wenn ein thread hängen bleibt, laufen die anderen noch ganz normal weiter.
Natürlich ist das wesentlich aufendiger zu realisieren, und man braucht ziemlich viel Speicher. (denn immer wenn einem thread die Kontrolle entzogen wird, müssen sämtliche Register und der komplette Stack irgendwo gesichert werden)
So viele Treppen und so wenig Zeit!
avr-freaks.net funktioniert nicht!
MFG
Michael
Gruß,
Franz
und wo liegt das Problem???will PA0 -PA7 nacheinander leuchten (0,25s)
gleichzeitig soll PB0 - PB3 nacheinander leuchten (0,50s)
Mache z.B. einen Timer mit 0,25s Zeitbasis.
Beim erstem Überlauf veränderst Du PA und prüftst ob ein Merker gesetzt ist, wenn nein setzt Dir einen Merker.
Beim zweitem veränderst Du PA sowieso und schaust ob Merker gesetzt ist und wenn ja änderst Du PB und löscht den Merker.
und so weiter von vorn....
Ist doch ganz Easy.
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Lesezeichen