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.


Code:
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