tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
289
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Harry64 Tutorials.de Gastzugang
    Hallo zusammen,

    folgendes Szenario. Ich verwende 2 COM-Ports, über die byteweise Daten ankommen. Allerdings kommen die Daten in Frames, d.h. es gehört immer eine definierte Anzahl an Bytes zu einem Paket. Diese Daten sollen kontinuierlich gespeichert werden. D.h. in der Reihenfolge, wie sie eintreffen. Wenn allerdings an COM1 gerade ein Frame kommt, sollen die Daten, die an COM2 ankommen zwischengespeichert und nach dem Ende des Frames auf COM1 als nächstes behandelt werden. Kommen unterdessen an COM1 Daten an, sollen diese wieder zwischengespeichert werden.

    Beispiel:

    An COM1 kommt der Frame AA BB CC DD an. Zum Zeitpunkt t1 kommt also AA an. Zum Zeitpunkt t1 und t2 gibt es auf COM2 keine Daten. Der Frame für COM2 ist EE FF. Kommt bei t3 EE an COM2 an, dann soll der Wert zwischengespeichert werden und erst zum Zeitpunkt t4 an die Ergebnisliste angehängt werden, die dann AA BB CC DD EE FF lautet, obwohl EE eigentlich vor DD ankam. Hoffe das war halbwegs verständlich.

    Hat jemand eine Idee, wie man das synchronisieren kann?

    viele Grüße

    Harry
     

  2. #2
    merano merano ist offline Mitglied Bronze
    Registriert seit
    Mar 2008
    Beiträge
    29
    Ich würde vorschlagen für jeden Port einen Thread zu starten.

    Wenn der Port der als erster ein Byte empfängt auch zuerst bedient werden soll
    -also nicht der der als erster sein Paket fertig hat müsste man sowohl einen lokalen
    Zwischenspeicher (Ringpufffer ?) pro Port alsauch eine gemeinsame Liste haben.
    Vermutlich wäre es etwas günstiger wenn der Port der als erstes ein vollständiges
    Packet empfangen hat zum Zuge kommt.

    Die gemeinsame Liste müsste dann für beide Threads, über eine Mutex-
    Semapore gesichert, die Daten in chronologischer Abfolge erfassen.

    Das Hauptprogramm, oder ein weiterer Thread kümmern sich dann um die
    weitere Verarbeitung der Daten.

    --

    Als Variante könnte man die Daten auch als Message an den verarbeitenden Thread
    senden und sich so die Liste inklusive Semaphoren sparen. Die Message würde
    dann die Synchonisierung sicherstellen. Allerdings muss sich dann der veararbeitende
    Thread merken wer zurst war und für jeden Port jeweils getrennt speichern bis das Paket
    komplett ist. Das versenden der Message muss natürlich so programmiert werden, das
    alle Daten die anfallen auch gesendet werden können, ohne das der Aufruf blockiert.

    Frage:
    Was passiert wenn ein Packet nicht komplett empfangen wird - dann würde alles hängen, oder ?
     

Ähnliche Themen

  1. mehrere Threads für Cache synchronisieren!
    Von Fulk im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 11.02.09, 11:47
  2. Tomcat mehrere Ports auf verschiedene Contexte weiterleiten
    Von dajos im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 26.04.07, 11:35
  3. Gleiche Ports für mehrere Benutzer öffnen
    Von metno im Forum Netzwerke
    Antworten: 5
    Letzter Beitrag: 24.10.05, 06:33
  4. Mehrere Ordner mit iPaq synchronisieren
    Von Bernd_Munich im Forum Handy, PDA & mobile Welt
    Antworten: 4
    Letzter Beitrag: 29.09.05, 09:14
  5. Antworten: 1
    Letzter Beitrag: 30.05.04, 22:02