Forum: Compiler & IDEs Problem mit Funktion


von Thomas (Gast)


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

von Sven P. (Gast)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Naja, der Prozessor einer PDP-11 dürfte deutlich langsamer gewesen
sein als ein ATmega1281, und mit externem RAM hat man sicher ähnlich
viele Ressourcen, wie sie die PDP-11 seinerzeit hatte... und auf
der ist UNIX entstanden. ;-)

von Thomas (Gast)


Lesenswert?

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.

von Dirk R. (dira)


Lesenswert?

Na ja, Prozesse wollen verwaltet werden und so etwas ist unteranderem 
die Aufgabe von Betriebssystemen... ich denke das wollte gesagt werden.
µC können kein echtes Multitasking Du bräuchtest so etwas wie eine 
Prozessverwaltung und und und....

von Johannes M. (johnny-m)


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...

von Thomas (Gast)


Lesenswert?

Hallo,
ich habe nur einen Mikrocontroller. Die Daten können sowohl über 
serielle Schnittstelle als auch von CAN-Bus ankommen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Thomas (Gast)


Lesenswert?

hallo
alles klar ich werde mit Interrupt arbeiten.Ich habe schon eine Ahnung 
wie es funktioniert.
Ich danke euch

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.