05.11.2013 Aufrufe

est Bewegung durch eine 3D-Landschaft mit ... - David Zaadstra

est Bewegung durch eine 3D-Landschaft mit ... - David Zaadstra

est Bewegung durch eine 3D-Landschaft mit ... - David Zaadstra

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Projektarbeit 2002, BKIK 2/1<br />

<strong>David</strong> <strong>Zaadstra</strong>, Alexander Fuchs<br />

<strong>Bewegung</strong> <strong>durch</strong> <strong>eine</strong> <strong>3D</strong>-<strong>Landschaft</strong> <strong>mit</strong> Fernbedienung<br />

Elektronikschule Tettnang<br />

Das Problem ist, dass es standardmäßig beim Lesen und Schreiben auf die Schnittstelle<br />

k<strong>eine</strong>n Timeout gibt. D.h. wenn wir ein Byte lesen wollen, aber k<strong>eine</strong>s vorhanden ist, bleiben<br />

wir in der ReadFile-Funktion hängen bis ein Byte kommt. Dies ist natürlich nicht erwünscht.<br />

Deshalb setzen wir den Timeout so, dass ein Byte zurückgeliefert wird, sofern es vorhanden<br />

ist. Ansonsten soll es direkt weitergehen <strong>mit</strong> dem Programm.<br />

Der Timeout wird folgendermaßen verändert:<br />

CODE:<br />

COMMTIMEOUTS timeout;<br />

if(!GetCommTimeouts(com, &timeout))<br />

{<br />

// hier Fehlerbehandlung einfügen<br />

}<br />

timeout.ReadTotalTimeoutConstant = 1;<br />

timeout.ReadTotalTimeoutMultiplier = 0;<br />

timeout.ReadIntervalTimeout = 1;<br />

if(!SetCommTimeouts(com, &timeout))<br />

{<br />

// hier Fehlerbehandlung einfügen<br />

}<br />

Der ReadIntervalTimeout gibt an, wie viel Zeit zwischen der Ankunft von 2 Bytes<br />

verstreichen darf, die ReadTotalTimeoutConstant gibt an, wie lange der Lesevorgang<br />

insgesamt dauern darf.<br />

Optimal wäre natürlich ein Wert von 0. Dieser ist jedoch reserviert und bedeutet, dass es<br />

k<strong>eine</strong>n Timeout gibt. Deshalb werden beide Werte auf 1 gesetzt. Da<strong>mit</strong> hätten wir aber immer<br />

noch 1ms Wartezeit, was zwar nicht sehr viel ist, den Programmfluss aber dennoch<br />

verlangsamt. Deshalb wird der ReadTotalTimeoutMultiplier auf 0 gesetzt. Wie am Namen<br />

unschwer zu erkennen ist, stellt diese Variable <strong>eine</strong>n Vervielfacher dar. So<strong>mit</strong> werden die<br />

Timeout-Werte <strong>mit</strong> 0 multipliziert, wo<strong>durch</strong> wir das gewünschte Verhalten erzielt haben: Ist<br />

ein Zeichen da, lesen wir es, ansonsten wird die Funktion direkt verlassen.<br />

- 48 -

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!