Loading...
Pages: [1]   Go Down
Author Topic: Grundsatzfrage "gleichzeitige Anweisungen"  (Read 325 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 171
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

da sich bei mir im Gehirn scheinbar momentan ein Knoten festgesetzt hat, hier eine ganz grundsätzliche Frage:

Wenn ich möchte, dass mehrere Dinge exakt zum gleichen Zeitpunkt ablaufen sollen, wie ist dass dann möglich bei einem Sketch, den der Prozessor von oben nach unten durcharbeitet?

Mit welchen "Befehlen" veranlasse ich den Prozessor dazu, Dinge parallel auszuführen?

Gruß Chris
Logged

Lösung für Dein Problem: Verstehen des "Blink without delay" Tutorials. smiley-razz

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 3
Posts: 285
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mikrocontroller und auch (PC-)Einkernprozessoren können systembedingt nie zwei Sachen völlig gleichzeitig machen.
Es wird immer ein Takt vorgegeben, der natürlich entsprechend schnell sein kann, dass zwei Dinge NAHEZU gleichzeitig ablaufen. Beim Arduino sind das i.d.R. 16 MHz, also grob gesagt ist der Controller in der Lage, 16.000.000 Einzelschritte pro Sekunde abzuarbeiten. Je nach Art der Einzelschritte werden aber einer oder mehrere Takte benötigt, um diesen Schritt auszuführen. Bei einer Funktion oder auch einem einfachen "Mehrzeiler" kann dies schon einige Takte in Anspruch nehmen. Es kommt jetzt darauf an, was genau Du machen willst und wie sehr dieses "zeitgleich" wirklich gemeint ist.
Je hardwarenäher man den ATMEGA programmiert, umso weniger Takte pro Befehl werden übrigens benötigt. Beispiel: Man verwendet nicht die Arduino-Layer-Funktion digitalWrite(), sondern schreibt direkt in die Register des µC.
« Last Edit: August 31, 2012, 02:25:08 am by markbee » Logged


Germany
Offline Offline
Edison Member
*
Karma: 33
Posts: 1801
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Direkt parallel geht prinzipiell erst mal nicht. Du kannst es nur simulieren, indem du die zwei Aufgaben/Threads abwechselnd bearbeitest. Je kleiner man diese Zeitfenster wählt, desto näher kommt man einer Parallelbearbeitung. Ich meine auch schon mal eine passende Library gesehen zu haben, die das anwenderfreundlicher macht.

Ansonsten nimm zwei Mikrocontroller, die arbeiten dann wirklich parallel - Dualcore quasi. smiley-wink

[edit] Der Verkleinerung des Zeitfensters sind jedoch Grenzen gesetzt, die aus der Taktfrequenz des Mikrocontrollers und der Anzahl der benötigten Takte des jeweiligen Threads resultieren, wie mein Vorredner bereits ansprach.
« Last Edit: August 31, 2012, 02:30:44 am by sth77 » Logged

Mein Arduino-Blog: http://www.sth77.de/ - neues Design, neues Projekt, neuer Eintrag

Offline Offline
Full Member
***
Karma: 1
Posts: 171
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

vielen Dank.

Jetzt konnte ich grad mal meinen megalangen, eben geschriebenen Text löschen, da die zweite Antwort sehr umfassend ist. smiley

Gruß Chris
Logged

Lösung für Dein Problem: Verstehen des "Blink without delay" Tutorials. smiley-razz

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 3
Posts: 285
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Das ist übrigens auch einer der Gründe, warum beispielsweise der Arduino für simple Nah-Echtzeit-Aufgaben prädestinierter ist, als z.B. ein Raspberry Pi oder andere embedded-Linux-Lösungen, die im Hintergrund noch ein Linux zu laufen haben und je nach Programmiersprache noch die Garbage-Collection oder andere Schweinereien smiley-wink ablaufen. Da wird die Prognose, wann ein Prozess tatsächlich ausgeführt wird u.U. viel schwieriger als bei einem simpel-µC wie dem ATMEGA. Auch wenn diese Prozessoren meistens weit höher getaktet sind.
Logged


Germany
Offline Offline
Edison Member
*
Karma: 27
Posts: 1510
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
mehrere Dinge exakt zum gleichen Zeitpunkt ablaufen

Die Frage ist eher: "Wofür willst'n das wissen" smiley-wink

Was ist gleichzeitig für dich: Die gleiche Millisekunde ist kein Thema, die gleiche Mikrosekunde wird schwierig, darunter fängt es irgendwo an, ins Philosophische abzugleiten oder zumindest die klassische Physik zu verlassen.

Ganz am Rande übrigens: Die 8 Bits eines Ports kann man, wenns drauf ankommt, gleichzeitig lesen/schreiben.
D.h. die Reihenfolge im Femtosekundenbereich ist dann evtl. erstmal undefiniert oder hängt davon ab, von wo aus du es anschaust smiley-wink

Im übrigen erleichtert es das Programmieren meist ganz gewaltig, wenn immer schön eins nach dem anderen passiert, und du nicht mehrere Threads auf multicore Maschinen synchronisieren musst.
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 99
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn etwas, zur veranschaulichung, wirklich gleichzeitig (im rahmen physikalsicher möglichkeiten) passieren solle empfiehlt sich auch eine art seriel-parallel wandlung, zum beispiel ein shiftregister, dort kannst du zu erst eine 8-bit anweisung reinschieben und diese dann mit einem knopfdruck aktiv schalten, das heißt zuerst anweisungen nacheinander durchführen, die ergebnisse sammeln und dann alle auf einmal raushauen... ein spezieller anwendungsfall, für den du so etwas brauchst wäre allerdings interessant
Logged

0
Offline Offline
Faraday Member
**
Karma: 16
Posts: 3196
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nur so zum Nachdenken "exakt zum gleichen Zeitpunkt" ist nicht nur bei einem Kern schwierig sondern bei jeder Hardware. Außer das Ereignis findet auch "exakt" am gleichen Ort statt. Ansonsten stellt sich schon die Frage von wo man den eigentlich schaut. http://de.wikipedia.org/wiki/Raumzeit.

Und wenn ich schon am Haarspalten bin: wenn man sehr kleine Dinge messen will, dann ist auch die Frage was denn genau "exakt" heißen soll smiley-wink
Logged

Check out my experiments http://blog.blinkenlight.net

Pages: [1]   Go Up
Print
 
Jump to: