mikrocontroller.net

Forum: Compiler & IDEs Problem mit Funktion


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk R. (dira)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Thomas (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.