- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: "Multithreading" mit C ?

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Anzeige

    E-Bike
    Also geht geht bei mir darum, dass sich Servos gleichzeitig bewegen sollen. Wie würdet ihr das machen? Vielleicht einen Timer und immer wenn so ein Overflow-Interrupt kommt überprüfen ob alle an der gewünschten Position sind, und wenn nicht jeden einen Step in die richtige Richtung machen lassen.
    Würde das funktionieren? Ich brauche halt ne Möglichkeit, die meinen momentanen Fähigkeiten entspricht. Felix G's Vorschlag halte ich momentan für zu kompliziert (Stack und RAM usw.. bääää!!!! )

    mfg
    jagdfalke

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Um das Bewegungsmässig zu optimieren, müsste man vorher wissen wie weit jeder Servo von seiner Sollposition weg ist. Denn wenn alle gleich ankommen sollen muss der Servo der den kurzeren Weg hat sich langsamer bewegen, der mit dem weiten Weg entsprechned schneller !
    Wenn so ein Verhalten gewünscht ist, muss man vorher die einzelnen Schrittweiten ausrechnen.

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2005
    Alter
    71
    Beiträge
    157
    Hi jagdfalke,

    also erst einmal kein "Delay()". Während der Ausführung von Delay verlierst du die Kontrolle, dann gehen nur noch Interrupts.

    Eigentlich sollte es so gehen:

    Aufgabe 1: Synchrones Ende der Bewegung.
    ----------------------------------------------------
    Am einfachsten wird es sein, wenn du abschätzt, wie lange die einzelnen geforderten Bewegungen dauern werden, das Zeitmaximum ermittelts und die Geschwindigkeit der anderen Achsen nach diesem Maximum ausrichtest. Diesen Vorgang kannst du dann während der Ausführung immer wieder durchführen und die Geschwindigkeiten nachregeln. Manche Mototen haben Mindestgeschwindigkeiten. Hier klappt's dann nicht perfekt.

    Verbesserung: Geschwindigkeit kurz vor der Endestellung herabsetzen um Überlaufen über die Zielstellung hinaus zu verhindern.


    Aufgabe 2: Gleichzeitiges bewegen.
    -----------------------------------------------------
    Alle Motoren mit der o.g. Geschwindigkeit in Gang setzen.

    Aufgabe 3: Mit der Bewegung in der Zielstellung stoppen
    --------------------------------------------------------------------
    Alle Sensoren abfragen und auf Zielstellung prüfen. Ist Sensor in Zielstellung, Geschwindigkeit auf 0.

    Aufgabe 4: Fetstellen, dass die Bewegung erledigt ist
    --------------------------------------------------------------
    Alle Achsen ins Zielstellung

    Aufgabe 5: alles Zusammenbauen
    --------------------------------------------------------
    Am besten schreibst du für die o.g. genannten Aufgaben kleine Funktionen und rufst diese in einer Schleife auf. Nicht immer sind alle Ziele erreichbar, weil sie sich widersprechen oder Rahmenbedingungen verletzen (s. z.B. "Aufgabe 1"). Hier muss man sich für eine Variante oder eine Kompromisss entscheiden. Die endgültige Lösung hängt sehr von diesen Entscheidungen ab.

    Diese packst du dann sinnvollerweise ebenfalls in eine Funktion.

    Ein Timer und eine Interruptroutine ist nur dann notwendig, wenn z.B. noch weitere Vordergrundprozesse durchgeführt werden sollen oder Abläufe in exakt einzuhaltenden zeitabständen ausgelöst werden müssen. Dann könnstest du den o.g. Ablauf z.B. jede Millisekunde einmal anstossen. Interrupt-Programmierung hat allderdings ein paar Haken und Ösen....

    Gruß RedBaron

  4. #14
    Erfahrener Benutzer Roboter Genie Avatar von UlrichC
    Registriert seit
    14.11.2005
    Beiträge
    1.043
    Multitask und Echtzeit auf einem Prozessor werden im Betriebssystem auch nur Simuliert.

    Echtzeit ist ja nur die definition für "schnell genug"

    Das mit den Tasks und Timern ist eigentlich ganz Simpel...

    Aufgabe: Servo soll von A nach Z fahren.

    Die synchrone Programmierung:
    PROGRAMSCHLEIFE BEGIN
    [SERVO1 fahre von A nach Z]
    [SERVO2 fahre von A nach Z]
    PROGRAMSCHLEIFE LOOP

    Die asynchrone Programmierung:
    PROGRAMSCHLEIFE BEGIN
    [SERVO1 fahre eins weiter]
    [SERVO2 fahre eins weiter]
    PROGRAMSCHLEIFE LOOP

    Sie asynchrone Programmierung ist meistens etwas verhackter … denn da müssen mehr Stats abgefragt und gesetzt werden. (Wie Wo steht das Servo gerade? Kann ich weiterfahren oder soll ich doch besser etwas anderes tun?)

    In Größeren Programmen (many servos) verwendet man dann meist Tasks die durch Timer die in verschiedenen MSec Abständen gesetzt sind zum steuern. (also man bastelt künstliche PROGRAMSCHLEIFEN = Multithread like)

  5. #15
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zitat Zitat von UlrichC
    Echtzeit ist ja nur die definition für "schnell genug"
    *ROFL*
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Zitat Zitat von jagdfalke
    Ich brauche halt ne Möglichkeit, die meinen momentanen Fähigkeiten entspricht. Felix G's Vorschlag halte ich momentan für zu kompliziert (Stack und RAM usw.. bääää!!!! )
    Bei meinem Vorschlag (das Codebeispiel von oben) musst du dich eben nicht mit Registern und Stack auseinandersetzen...
    Das müsstest du nur wenn du preemptive Multitasking (ähnlich wie in Windows) brauchst, und das alles selber programmieren willst.
    (= Steffens Vorschlag, nur eben ohne ein fertiges OS zu verwenden)


    @PickNick
    hast du eine bessere Definition?
    So viele Treppen und so wenig Zeit!

  7. #17
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zitat Zitat von Felix G
    hast du eine bessere Definition?
    Eben nicht, das ist die beste, die ich seit langem gehört habe. Klingt so herrlich pragmatisch und überhaupt nicht Uni-style
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #18
    Erfahrener Benutzer Roboter Genie Avatar von UlrichC
    Registriert seit
    14.11.2005
    Beiträge
    1.043
    Zitat Zitat von PicNick
    Zitat Zitat von UlrichC
    Echtzeit ist ja nur die definition für "schnell genug"
    *ROFL*
    Mhhh...
    Mal anders "Verarbeitung von Daten, die ohne nennenswerte Zeitverzögerung geschieht."
    also "schnell genug"...

    Die definition ist eigentlich sogar noch härter ... oder denkst Du man kann mit Echtzeit die Zeit verkehren ...

    Bist Du vielleicht ein Quantentheoretiker der Tasks der Zukunft in der Vergangenheit ausführen kann?

    Soll ich nun noch meine undiplomatische informatische profilneurotische Informatikerantwort dazu schreiben?

    Jemanden der lediglich zwei Servos gleichzeitig beswegen möchte mit mutithread, process events,interupts und ähnlichem Käse zuquatschen?

    Jedenfalls sollte man den Begriff "Echtzeitanwendungen" hier nicht im UNVERSTAND oder unpassenden Kommentaren ausweiten.

  9. #19
    Erfahrener Benutzer Roboter Genie Avatar von UlrichC
    Registriert seit
    14.11.2005
    Beiträge
    1.043
    Zitat Zitat von PicNick
    Zitat Zitat von Felix G
    hast du eine bessere Definition?
    Eben nicht, das ist die beste, die ich seit langem gehört habe. Klingt so herrlich pragmatisch und überhaupt nicht Uni-style
    Tja Munition zurück
    Sorry kam nicht so an ...

  10. #20
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zitat Zitat von UlrichC
    Sorry kam nicht so an ...
    Meine Schuld. War mißverständlich.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen