amozi
21.10.2009, 00:12
Hallo Kollegen,
ich benötige wiedermal euer Rat um einen Fehler zu beheben.
Es geht um einen Code-Abschnitt. Dieser liefert eine einwandfreie Funktionsweise, wenn er mit der V1.11.7.7 compiliert wird. Sobald ich aber höhere Versionen als 1.11.8.8 anwende(Zwischenversionen nicht bekannt), kann ich das selbe Ergebnis nicht erzielen(näheres im Codeabschnitt beschrieben). Ich muss die höheren Versionen einsetzen, da ich Projekte auch mit m1280 habe.
Call Get_line(27 , 7 , Bok) 'Funktionsaufruf
Sub Get_line(byval Bstart As Byte , Byval Wlaenge As Word , Timeout As Byte)
Dim Fi As Byte , Counttime As Word 'temporäre Variable
Dim Wanzahl As Word 'Zeichen-Zähler
Dim Zeichen As Byte , Bwaittime As Byte 'Zwischenspeicher
Dim Oldtime As Long , Newtime As Long 'Variablen für die Zeit
Zeichen = 0 ' bei Null Startzeichen überspringen
Wanzahl = 0 ' Zeichenzähler
Tmpbuffer = "" 'Zeichenpuffer löschen
Bwaittime = 3
Counttime = 0
Timeout = 0
Test = 0
' Zuerst wartet die Routine auf das Auftreten eines des Startzeichens
' wenn es auf 0 gesetzt ist, wird es übersprungen
' Problemschleife
While Zeichen <> Bstart ' Noch nicht erkannt bzw. überspringen
Fi = Ischarwaiting()
If Fi <> 0 Then ' Eingangpuffer nicht leer
Zeichen = Inkey() ' holt ein Zeichen
'Ergebnis der Printausgabe
'Obwohl der erwartende Wert 27 übern Uart empfangen wird, springt
'er aus der While-Schleife nicht raus
'Erst mit einem Timeout
Else
If Counttime > 10 Then
Timeout = 0
Exit Sub
Else
Waitms 50
Counttime = Counttime + 1
End If
End If
Waitms 3
Wend
Counttime = 0
' Das Startzeichen wurde erkannt bzw. ignoriert
' weiter geht es
While Wlaenge <> Wanzahl ' Solange sammeln bis Ende gekommen ist
Fi = Ischarwaiting()
If Fi <> 0 Then ' Eingangpuffer nicht leer
Zeichen = Inkey() ' holt ein Zeichen
Wanzahl = Wanzahl + 1 ' Zeichenzähler erhöhen
Tmpbuffer = Tmpbuffer + Chr(zeichen) ' Zeichen in Buffer$ übertragen
Counttime = 0
Else
If Counttime > 5 Then
Timeout = 0 ' als Fehlermeldung eine 0
Exit Sub ' und zurück
Else
Waitms 50
Counttime = Counttime + 1
End If
End If
Waitms 3
Wend ' Endekennung
Timeout = 1 ' alles ausser 0 ist OK
Test = 1
' End If
End Sub 'SUB Get_Line
Das Problem scheint mir wie ein Optimierungsfehler des Compilers auszusehen oder auch ein generelles Problem.
Andere Schleifenarten wie Do() oder höheres Timeout haben auch nichts gebracht.
Würde mich um eine Analyse eurerseits freuen:-)
ich benötige wiedermal euer Rat um einen Fehler zu beheben.
Es geht um einen Code-Abschnitt. Dieser liefert eine einwandfreie Funktionsweise, wenn er mit der V1.11.7.7 compiliert wird. Sobald ich aber höhere Versionen als 1.11.8.8 anwende(Zwischenversionen nicht bekannt), kann ich das selbe Ergebnis nicht erzielen(näheres im Codeabschnitt beschrieben). Ich muss die höheren Versionen einsetzen, da ich Projekte auch mit m1280 habe.
Call Get_line(27 , 7 , Bok) 'Funktionsaufruf
Sub Get_line(byval Bstart As Byte , Byval Wlaenge As Word , Timeout As Byte)
Dim Fi As Byte , Counttime As Word 'temporäre Variable
Dim Wanzahl As Word 'Zeichen-Zähler
Dim Zeichen As Byte , Bwaittime As Byte 'Zwischenspeicher
Dim Oldtime As Long , Newtime As Long 'Variablen für die Zeit
Zeichen = 0 ' bei Null Startzeichen überspringen
Wanzahl = 0 ' Zeichenzähler
Tmpbuffer = "" 'Zeichenpuffer löschen
Bwaittime = 3
Counttime = 0
Timeout = 0
Test = 0
' Zuerst wartet die Routine auf das Auftreten eines des Startzeichens
' wenn es auf 0 gesetzt ist, wird es übersprungen
' Problemschleife
While Zeichen <> Bstart ' Noch nicht erkannt bzw. überspringen
Fi = Ischarwaiting()
If Fi <> 0 Then ' Eingangpuffer nicht leer
Zeichen = Inkey() ' holt ein Zeichen
'Ergebnis der Printausgabe
'Obwohl der erwartende Wert 27 übern Uart empfangen wird, springt
'er aus der While-Schleife nicht raus
'Erst mit einem Timeout
Else
If Counttime > 10 Then
Timeout = 0
Exit Sub
Else
Waitms 50
Counttime = Counttime + 1
End If
End If
Waitms 3
Wend
Counttime = 0
' Das Startzeichen wurde erkannt bzw. ignoriert
' weiter geht es
While Wlaenge <> Wanzahl ' Solange sammeln bis Ende gekommen ist
Fi = Ischarwaiting()
If Fi <> 0 Then ' Eingangpuffer nicht leer
Zeichen = Inkey() ' holt ein Zeichen
Wanzahl = Wanzahl + 1 ' Zeichenzähler erhöhen
Tmpbuffer = Tmpbuffer + Chr(zeichen) ' Zeichen in Buffer$ übertragen
Counttime = 0
Else
If Counttime > 5 Then
Timeout = 0 ' als Fehlermeldung eine 0
Exit Sub ' und zurück
Else
Waitms 50
Counttime = Counttime + 1
End If
End If
Waitms 3
Wend ' Endekennung
Timeout = 1 ' alles ausser 0 ist OK
Test = 1
' End If
End Sub 'SUB Get_Line
Das Problem scheint mir wie ein Optimierungsfehler des Compilers auszusehen oder auch ein generelles Problem.
Andere Schleifenarten wie Do() oder höheres Timeout haben auch nichts gebracht.
Würde mich um eine Analyse eurerseits freuen:-)