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
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.
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. ;-)
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.
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....
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...
Hallo, ich habe nur einen Mikrocontroller. Die Daten können sowohl über serielle Schnittstelle als auch von CAN-Bus ankommen.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.