Parallel Task Processing

Hallo,

ich bin ganz neu bei Arduino und habe gleich ein sicherlich Anfängerproblem.
Wie muss ein Programm aussehen das zwei Processe gleichzeitig bearbeitet.
Also beispielsweise eine LED einschaltet 1s wartet und wieder ausschaltet und im zweiten
eine LED einschaltet 1,3s wartet und wieder ausschaltet und das unendlich wiederholt.
Beim PICAXE hat man >>main<< einfach durch start0, start1... ersetzt. Wie geht das hier.
Leider habe ich noch keine Erfahrung in der C Programmierung.

Über Eure Hilfe würde ich mich sehr freuen.

Frank

Würde mit zwei Variablen arbeiten, die die millis() enthalten, zu denen die beiden "Prozesse" das letzte Mal gelaufen sind.

Wenn dann das aktuelle millis() 1000 bzw. 1300 Differenz aufweist würde ich die entsprechende LED umschalten und 1000 bzw. 1300 zur entsprechenden Variable aufaddieren.

Kein Warten oder so.

Hallo,
ich glaube da gibt es jetzt ein Missverständnis. Die LED's sind als Beispiel gedacht.
Ich möchte wissen wie die Programmstrucktur aussehen muss um zwei Prozesse
parallel ablaufen lassen zu können.

Frank

Anstelle von zwei parallelen Prozessen kannst Du nur eine Steuerprozessschleife laufen lassen, die zum richtigen Zeitpunkt in die Arbeitsprozesse abbiegt.

Ich glaube da hast du Trauer.
Wenn ich das richtig verstanden hab, dann willst du Multithread betreiben, richtig? Das kann der Arduino glaube ich nicht (oder evtl noch nicht ;))
Dafür wäre ein Betriebssystem mit Prozess-Scheduler notwendig. Beim Arduino gibts aber nur einen Bootloader und kein Betriebssystem (worüber ich auch froh bin).
MfG Jago

Parallel geht hier nix soviel ich weiß!
Joguhrt hat schon genau das richtige gesagt und hat genau wie du die LEDs als beispiel genommen.
Du kannst nur hin gehen dir zu merken wann das letze mal was ausgeführt wurde bzw wann es das nächste mal passieren soll
und dann die abgelaufene Zeit vergleichen und schauen ob es wieder so weit ist.

Das ist so nicht ganz richtig. Parallel geht schon was, es ist jedoch nicht vorgesehen.
Man müsstest sich halt den Scheduler selbst programmieren, aber da wird man um Assembler wohl nicht rum kommen.
Vorstellen könnte ich mir das man dies in einen Timerinterrupt erledigt, dh. beim Interrupt den Stackwert ausließt (nicht den aktuellen sondern den vor dem sprung) und dann den Wert vom anderen Thread reinschreibt. Das ganze dürfte sich aber nicht einfach gestallten.

PS.: Vielleicht hilft es dir weiter wenn du dich über das Thema Echtzeitbetriebssysteme für Mikrocontroller im Internet schlau machst. Ich hatte mich damit im Studium beschäfftigen müssen, war allerdings alles andere als ein Lieblingsthema von mir.

Danke für die schnellen Antworten.

Ich kann es aber nicht glauben. Ein PICAXE - 08M2 für 3€ mit 2048 Byte Programmspeicher und 128 Byte RAM
kann ich so programmieren und hier soll es nicht möglich sein?
Wahrscheinlich kann ich mich nur nicht richtig ausdrücken.

Frank

Das ist das leben, nicht jeder Mikrocontroller kann alles...
Ich halte es aber nicht für unmöglich das ein Arduino das kann. Hab kurz nach Multithread im forum gesucht und einige Topic´s gefunden. Scheinbar könnten da Lösungen für dich mit dabei sein.
Beim PICAXE - 08M2 wird´s ja auch nur über Software gemacht. Ich sehe da keinen grund warum´s die für den Arduino nicht geben soll (gibt ja sonst auch jeden mist).

Eine Variante wäre:

Gefällt mir aber nicht wirklich, da es sich hier mehr um einen zyklischen aufruf handelt, was du ja grad nicht suchst.

Ah, nah schau mal einer an:

http://arduino.cc/playground/Code/QP

Bzw gibts ne ganze Reihe von Schedulern unter:

http://arduino.cc/playground/Main/LibraryList#Sched

Von wegen geht nicht! :grin:

Nochmal ganz lieben Dank für die Hilfe.

Hätte ich mir auch nicht vorstellen können das dass nicht gehen soll.

Frank