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.
Das Problem scheint mir wie ein Optimierungsfehler des Compilers auszusehen oder auch ein generelles Problem.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
Andere Schleifenarten wie Do() oder höheres Timeout haben auch nichts gebracht.
Würde mich um eine Analyse eurerseits freuen![]()







Zitieren

Lesezeichen