Kann ich beim ATMEGA8535 Multitasking anwenden also programmabläufe parallel ablaufen lassen??
BITTE um Rückantwort
MFG
Michael
Druckbare Version
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...
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
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!
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)
avr-freaks.net funktioniert nicht!
MFG
Michael
und wo liegt das Problem???Zitat:
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