Re: Probleme mit capture... release Kategorie: Programmierung (von André H. - 30.04.2003 12:05) | |
Als Antwort auf Probleme mit capture... release von rüdi - 28.04.2003 21:58
| |
Hallo Rüdi, Das Capture funzt einwandfrei. Jedoch mu� man bei bereits gecaptureten Funktionen, wie das z.B. bei hwcom der Fall ist, aufpassen. Wird von mehreren Threads jeweils eine Ausgabe gemacht, gibt's kein Problem. z.B. beiden senden einen String. (unterschiedliche Variablen !!) Wenn aber die Threads mehrere Ausgaben machen, z.B. mit put(), send() und/oder print(), ist nicht die gesamte Ausgabe gecaptured, sondern nur die einzelne Funktion. D.h. zwischen den Aufrufen kann der nächste Thread Laufzeit bekommen. Eine Lösung wäre hier ein verschachteltes Capture (siehe Modul cap.c2). Auch mu� beachtet werden, da� das Senden im Hintergrund geschieht. string s; ... s="Irgentetwas"; hwcom.print(s); s="etwas anderes"; hwcom.print(s); Dies hier führt z.B. zu Fehlern, da die Ausgabe des Strings s noch nicht komplett gesendet wurde, als in s ein neuer String geschrieben wird. Hier mu� entweder auf hwcom.ready() gewartet oder abwechselnd eine zweite String-Variable benutzt werden.(Das selbe gilt auch für Arrays) Jedoch würde ich generell die serielle Kommunikation nur über einen einzigen Thread laufen lassen. Ich kann mir sonst nicht vorstellen, da� diese sonst einwadfrei funzt und der Empfänger (z.B. PC) die Daten im richtigen Format bekommt. In meinen Projekten gibt es dafür immer einen eigenen Thread, der z.B. nur die Komunikation über hwcom übernimmt. MfG André H. > Hallo Leute, > > alles im grünen Bereich in der Entwicklergemeinde?! > Das hoff ich doch und Ihr könnt mir vielleicht weiterhelfen:-) > > Ich und mein Projektteam sind uns nicht ganz sicher, ob die Semaphor - Implementation: > capture... > release; > richtig funktioniert. Bei dem Versuch 2 Threads parallel laufen zu lassen, die jeweils beide > über hwcom.c2 Funtionen Ausgaben über die RS232 Schnittstelle Ausgaben auf dem > Hyperterminal des angeschlossenen Rechners erzeugen, ist folgender Fehler aufgetreten: > > Die Ausgabe ist korrupiert, d.h., das nict alle Zeichen auf dem Hyperterminal ankommen. > Wir haben 2 Theorien: >  1.Die capture-release Anweisung funktioniert nicht richtig und schützt die kritischen Bereiche >    nicht vollständig. >  2.Die Hardware Register der RS232 Schnittstelle werden von den Threads gegenseitig >    überschrieben, bevor der angeschl. Rechner die Register komplett abfragen kann. > > Wäre super, wenn einer von Euch weiss, was da vor sich geht. Wenn Punkt 2 der Fall sein sollte, > ist das vielleicht bei allen externen Einheiten so? > > Mit freundlichem Gru� > rüdi*** > Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | |
Antwort schreiben Antworten: Re: Probleme mit capture... release (von rüdi und kone - 2.05.2003 21:42) |