- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 5 von 5

Thema: Compiler-Problem? Ab v1.11.7.7

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.12.2006
    Beiträge
    32

    Compiler-Problem? Ab v1.11.7.7

    Anzeige

    Powerstation Test
    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Da hilft nur Breaks einbauen und debuggen/eingrenzen...
    Ich mach das immer mit Terminal-Ausgaben an neuralgischen Stellen. Irgendwann kommt man drauf wo es hakt und kanns eingrenzen.
    Z.B. wenn eine bestimmte Schleife nie aktiv wird usw.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    27.12.2006
    Beiträge
    32
    Ich habe ja dieses Problem mit Terminal-Ausgabe analysiert, was ich im Codeabschnitt beschrieben und die Stelle kommentiert habe. Ich bekomm den zu erwartenden Wert 27, aber trotzdem wird die While-Schleife nicht beendet.
    Gibt es andere Vorschläge? Oder gibt es für Bascom einen OnBoard-Debugger in Bascom-Sprache?

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    27.12.2006
    Beiträge
    32
    Hallo Leute,

    kriege ich keine weiteren Vorschläge. Ich bin am Verzweifeln

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Hast Du im Compiler die Optimierung mal abgeschaltet? Wie hoch sind Deine Stacks eingestellt? Was steht im Bericht? (STRG+W), Wie groß ist Dein Eingansbuffer? Was sagt die neueste Version dazu?
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test