Problem mit Funktion

Gast #895025
Lesenswert?

Hi,
ich benuzte AVR und in meiner Version ist die Funktion fork() nicht 
definiert.Gibt es eine andere Funktion, die als die fork() 
funktionniert?
Fork:der aktuelle Prozesserzeugt eine Kopie von sich selbst, welche dann 
als sogenannter Kindprozess des erzeugenden Programmes dient.

Danke
Gast #895049
Lesenswert?

Tut mir Leid, aber bist du auch ein Troll? Auf dem AVR läuft doch 
überhaupt kein Betriebssystem, welches Multitasking, ja Prozesse 
überhaupt unterstützt?! Wo soll denn da dann fork() herkommen?

Parallelisierung macht am wohl am effizientesten über Interrupts.
#897573
Lesenswert?

Thomas wrote:
> Hallo,
> ich verstehe ich nicht eure Antwort. Eigentlich geht es um die
> Programmierung von Mikrocontroller.Ich möchte überprüfen, ob ich zwei
> Prozesse gleichzeitg laufen kann.
Wenn Du zwei Mikrocontroller hast, dann kannst Du auch zwei Funktionen 
gleichzeitig laufen lassen...
Moderator Persönliche Seite #897655
Lesenswert?

Du hast's immer noch nicht begriffen: Dinge wie fork() gehören zur
recht komplexen Multitasking-Umgebung eines unixoiden Betriebssystems.
Sowas hat auf einem 8-bit-AVR keinen Sinn.  (Auf einem AVR32 AP7000
sieht die Sache natürlich ganz anders aus.)

Es gibt zwei gängige Wege dafür, eine derartige Simultanität zu
erreichen.  Entweder suchst du dir eins der bestehenden sogenannten
Echtzeitkerne oder Echtzeitbetriebssyteme (real-time operating
system, RTOS) aus und schaust, ob das deinen Anforderungen gerecht
wird.  Diese sind beim AVR aber in der Regel auf Kleinheit getrimmt,
also das Äquivalent zu fork() wirst du dort so nicht finden, sondern
deren Programmierung ist komplett anders als bei einem unixoiden
Betriebssystem.  In aller Regel machen diese auch kooperatives
Multitasking, d. h. ein Prozess muss die Steuerung freiwillig
abtreten, sowie er ein Stück seiner Arbeit erledigt hat.

Die zweite Variante ist, dass man das Ganze mittels Interrupts und
einer eigenen Verwaltung (bspw. einer state machine) selbst ,,zu
Fuß'' implementiert.  Sowohl die UART als auch der CAN-Bus-Controller
können ja einen Interrupt generieren, sowie bei ihnen Daten
eingetroffen sind.  Die Hauptschleife wartet einfach, bis irgendwas
passiert (solange gar nichts zu tun ist, kann die CPU dabei im idle
sleep warten und Strom sparen), und sowie an einer der beiden
Quellen Daten angekommen sind, werden diese verarbeitet.  Anschließend
wird wieder auf ein Ereignis gewartet.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren