Wie arbeitet ein PC? Seriell, parallel?

Hallo!

Heute mal eher eine allgemeine Frage zum Verständnis eines PCs. Ich habe einen Sensor mit einer Abtastrate von 10 Hz. Nun habe ich drei dieser Sensoren im Versuchsaufbau verwendet und im Sketch passiert auch noch ein bisschen drumherum. Wenn ich nun kontinuierlich Werte auslesen und schreiben möchte, dann dauert ein Schleifendurchlauf 167 ms. Womit ich ja schon über der genannten Abtastrate drüber liege.
Das serielle Arbeiten von Schritt A, B, C,... braucht halt seine Zeit.

Wie schafft es ein Mikrocontroller, PC, System solche Aufgaben parallel zu bearbeiten? Muss ja irgendwie möglich sein, wenn ich mir überlege, was die PCs so alles für uns machen.

Die Frage ist jetzt eher theoretischer Natur. Für meinen Versuch ist die Abtastrate mehr als ausreichend, aber jetzt will ich es halt wissen. :slight_smile:

THX

(deleted)

Was bedeutet Abtastrate? Warten bis die Zeit um ist? Oder bis der Sensor fertig ist? Dann kann nebenher, so lange die Zeit noch nicht erreicht ist, vieles andere bearbeitet werden. Siehe BlinkWithoutDelay...

Wie schafft es ein Mikrocontroller, PC, System solche Aufgaben parallel zu bearbeiten? Muss ja irgendwie möglich sein, wenn ich mir überlege, was die PCs so alles für uns machen.

Wie viele Kerne hat dein PC?
Mit wie vielen MHz läuft dein PC?
Mit wie wielen MHz betreibst du deinen Uno?

Fällt dir was auf?

Hanswurst123:
Wie schafft es ein Mikrocontroller … solche Aufgaben parallel zu bearbeiten?

Gar nicht.

Gut, das ist jetzt sehr kurz formuliert.
Wenn Du nur einen Rechenkern hast, kann auch immer nur ein Befehl nach dem anderen abgearbeitet werden. Die “parallele” Abarbeitung ist also nur ein schöner Schein; der Ablauf ist eigentlich immer “seriell” - möglicherweise mit ineinander verschachtelten Teilaufgaben.
Das kann man dadurch erreichen, dass man vor allem möglichst nie wartet bis eine Aktion fertig ist (“polling”, delay), sondern zur erwarteten Zeit das Ergebnis abholt (Nachtwächter, millis) oder aber mit Interrupts arbeitet.

Wenn Dein Sketch 167ms für einen Durchlauf braucht, kann das natürlich auch an vielen Ausgaben auf die serielle Schnittstelle (vielleicht dann auch noch bei nur 9600baud) liegen. Sollte aber wirklich nichts “überflüssiges” darin passieren ist diese Hardware für die Anforderung “Drei Sensoren mit 10Hz abfragen” tatsächlich nicht geeignet - auch das kommt vor.

Gruß Walter

Anekdötchen aus meiner Vergangenheit: Es gibt tatsächlich embedded Systeme ohne Betriebssystem mit “Zeitscheibenverfahren”. Da läuft ein Timer, der z.B. alle 10, 50 und 100ms eine Funktion aufruft. Die 10ms-Funktion darf dann natürlich nie mehr als 10ms lang dauern. Man muss etwas aufpassen, die Abarbeitung der 50er und 100er passend zu starten, indem der Basistimer z.B. mit 1ms läuft. Damit kann der Jitter vermindert werden.

(deleted)

Wie schafft es ein Mikrocontroller, PC, System solche Aufgaben parallel zu bearbeiten? Muss ja irgendwie möglich sein, wenn ich mir überlege, was die PCs so alles für uns machen.

Eigentlich macht ein µC das genau so wie ein großer PC.
Nur ist halt die Ausstattung eines PC erheblich besser.

PCs setzen mittlerweile auf preemptives Multitasking.
Alle aktuellen Betriebssysteme.
Wir µC Bastler müssen uns meist selber kooperative Verfahren zurechtbasteln.

Ablaufsteuerung
Meine Standardantwort zu Ablaufsteuerungen:

Eine Stichworte Sammlung für Google Suchen:
Endlicher Automat,
ProtoThreads,
State Machine,
Multitasking,
Coroutinen,
Ablaufsteuerung,
Schrittkette,
BlinkWithoutDelay,

Blink Without Delay
Die Nachtwächter Erklärung

[MicroBahner/MobaTools/url]
](GitHub - MicroBahner/MobaTools: Arduino library for model railroaders)Intervall Macro
Multitasking Macros
INTERVAL Ersatzstoff
CooperativeTask


Hanswurst123:
Wie schafft es ein Mikrocontroller, PC, System solche Aufgaben parallel zu bearbeiten? Muss ja irgendwie möglich sein, wenn ich mir überlege, was die PCs so alles für uns machen.

Die Frage ist jetzt eher theoretischer Natur. Für meinen Versuch ist die Abtastrate mehr als ausreichend, aber jetzt will ich es halt wissen. :slight_smile:

Der „Trick“ besteht darin, so zu programmieren, dass bei vielen Dingen immer nur „ein bisschen was“ nacheinander erledigt wird.

Wenn das sehr schnell hintereinander geschieht, entsteht der Eindruck, die Dinge würden gleichzeitig passieren.

Wenn Du z.B. zehn Autos hast, die sich quasi gleichzeitig bewegen sollen, bewegst Du jedes Auto nur ein bisschen und gehst dann zum jeweils nächsten. Das bewegst Du wieder ein bisschen und gehst zum nächsten Auto weiter. Da dieses „ein bisschen Bewegen“ sehr schnell hintereinander mit jedem Auto gemacht wird, sieht es so aus, als würden sich alle gleichzeitig bewegen.

Sieh Dir mal das Strickmuster eines „endlichen Automaten“ an.

Gruß

Gregor

Wenn ich nun kontinuierlich Werte auslesen und schreiben möchte, dann dauert ein Schleifendurchlauf 167 ms

Mag sein, dass du das so beobachten kannst. Da ist dann aber noch viel Verbesserungspotential drin, wenn erforderlich.
Sag ich jetzt einfach mal, ohne Details zu kennen. Und das moderne PC Prozessoren mit mehreren Kernen haben, ist nur eine neumodische Erfindung, auf die kein Betriebssystem (auch mit multitasking) essentiell angewiesen ist.
Die ersten PC (4,77 MHz Takt) waren recht langsam, im Vergleich zu einem Arduino. Allerdings mit riesig viel RAM (128kB) und einer Festplatte. Eine Maus und die damit gekoppelte Darstellung eines Zeigers auf einem Bildschirm war schon eine Überforderung

Peter-CAD-HST:
ich habe das "früher" :slight_smile: komplett ereignisgesteuert, auf einen mc68030 ohne betriebssystem, realisiert....

Das geht natürlich auch. Da hattest Du aber schon eine fette Maschine :-). Ich sag' nur Siemens 80C167.

Ein PC ist ein Sammelsurium von Teilen.
Er hat zB auch intern I2C zB als Identifikation von RAM Modulen zum richtigen Timing oder bei bestimmten Interface zum Monitor.
Die CPU ist nicht die einzige CPU / Controller der im PC drin werkelt. Viele Teile haben spezielle optimierte Controller für ihre Aufgabe. ZB die Tastatur mit einem 8051 Controller, VideoKarte, Laufwerke, Ata, Sata, Aus uns Einschalten, ecc.
Das Betriebsystem verteilt die Ausarbeitung der Programme auf mehrer HauptCPUs (falls vorhanden) und zeitlich nacheinandere auf Tasks (Multitasking).
Durch DMA (Direct memory acess) können Daten verschoben werden ohne daß die CPU diese herumschaufelt. Das entlastet die HauptCPU auch.

Die ganze Sache wird noch komplizierter weil viele Triks und Strategieen angewendet werden um das alles effizienter, schneller und fehlerfreier zu machen. Die meisten Sachen weiß ich gar nicht.

In einem PC werkeln viele Teile paralell zueinander und verhelfen so der HauptCPU Arbeitsersparnis. Die Tatatuz zB wird ausgewertet und nur ein Code für die gedrückte Taste gesendet. Die Arbeit der Tastaturerkennung, Entprellen und erkennen von doppel und dreifachtsten macht der Tastaturcontroller in der Tastatur.

Grüße Uwe

michael_x:
Die ersten PC (4,77 MHz Takt) waren recht langsam, im Vergleich zu einem Arduino. Allerdings mit riesig viel RAM (128kB) und einer Festplatte. Eine Maus und die damit gekoppelte Darstellung eines Zeigers auf einem Bildschirm war schon eine Überforderung

Der IBM XT war schon ein Nachfolgemodell. Zuerst kam der IBM PC modell 5150.
Die ersten IBM-PC hatten keine Festplatte nur 1 oder 2 Floppy und 16 oder 64 kByte RAM

Grüße Uwe.

... was Zeiten ... mit einem Schneider 80286er AT ging's bei mir los ... allerdings schon mit 5, wahlweise 10MHz wie einer 20MB Hdd und 3 1/2" Floppy (720kB) ... DOS 3.3, wenn ich mich recht entsinne ... der 9-Nadel-Drucker ratterte nächtelang (Epson FX-80) - ok, der Rechner war meinem alten Herren ... also am Anfang :wink:

Ok, hat nun so was von Nichts mit der Fragestellung zu tun ... zumiondest gab's damals kein Blue-Screen ... die Kiste rannte einfach!
Achja, 'Unserer' hatte auch schon eine RTC verbaut, bei den damals normalen PCs musste man jedes Mal Datum und Uhrzeit eingeben (date und time in der autoexec.bat aufgerufen).

MfG