Ciao a tutti, ho questo codice che si comporta in modo strano:
Questo codice è contenuto in una funzione e non fa altro che ricevere dei dati via bluetooth fino ad arrivare alla lunghezza del pacchetto.
Fatto questo, calcola il checksum e verifica se corrisponde con quello presente nel pacchetto.
Se corrisponde scrive quanto ricevuto in una editbox, altrimenti scrive quanto ricevuto in una edibox aggiungendo il checksum calcolato per poterlo confrontare.
La cosa strana è che finchè lavoravo in modalità debug entrava nella if (If ((Data(Data.Length-1) <> crc_h) Or (Data(Data.Length-2) <> crc_l))...) sempre nonostante il checksum corrispondesse, ma se mettevo un breakpoint dentro alla if tutto funzionava a regola d'arte.
Quindi ho trasformato la "if" da com'era prima:
"If Data(Data.Length-1) <> crc_h Or Data(Data.Length-2) <> crc_l Then" a com'è adesso "If ((Data(Data.Length-1) <> crc_h) Or (Data(Data.Length-2) <> crc_l)) Then" e tutto ha iniziato a funzionare regolarmente.
Ora che ho compilato e caricato in modalità release, mi si presenta lo stesso problema.
Non capisco se mi sta sfuggendo qualcosa o se sono alle prese con un bug dell'ambiente di sviluppo.
Avete qualche idea?
Grazie.
B4X:
Dim bc As ByteConverter
Dim msg As String
Dim t(1) As Byte
Dim crc As Int
If PacketLen = 0 And Data.Length >= 2 Then
PacketLen = Bit.And(Data(1), 0xFF)
PacketLen = Bit.ShiftLeft(PacketLen, 8)
PacketLen = PacketLen + Bit.And(Data(0), 0xFF)
PacketLen = Bit.And(PacketLen, 0xFFFF)
Message.Clear
If PacketLen > 256 Then PacketLen = 0
End If
Message.Append(Data)
If Message.Length = PacketLen Then
msg = bc.HexFromBytes(Message.ToArray)
crc = CRC16Calc(Message.ToArray)
Dim crc_l As Short
Dim crc_h As Short
crc_l = Bit.And(crc, 0xFF)
crc_h = Bit.And(Bit.ShiftRight(crc, 8), 0xFF)
t(0) = crc_h
Log("CRC H: " & bc.HexFromBytes(t))
t(0) = crc_l
Log("CRC L: " & bc.HexFromBytes(t))
If Data.Length >= 2 Then
If ((Data(Data.Length-1) <> crc_h) Or (Data(Data.Length-2) <> crc_l)) Then
t(0) = crc_l
bc.HexFromBytes(t)
msg = msg & CRLF & " >>>>>> CRC calcolato: " & bc.HexFromBytes(t)
t(0) = crc_h
msg = msg & " " & bc.HexFromBytes(t) & " <<<<<<"
edittext1.SetColorAnimated(1000, Colors.Red, Colors.White)
End If
End If
If msg.Length <> 0 Then UpdateEditText("Received: " & msg & CRLF & CRLF)
PacketLen = 0
PingReceived = True
End If
Questo codice è contenuto in una funzione e non fa altro che ricevere dei dati via bluetooth fino ad arrivare alla lunghezza del pacchetto.
Fatto questo, calcola il checksum e verifica se corrisponde con quello presente nel pacchetto.
Se corrisponde scrive quanto ricevuto in una editbox, altrimenti scrive quanto ricevuto in una edibox aggiungendo il checksum calcolato per poterlo confrontare.
La cosa strana è che finchè lavoravo in modalità debug entrava nella if (If ((Data(Data.Length-1) <> crc_h) Or (Data(Data.Length-2) <> crc_l))...) sempre nonostante il checksum corrispondesse, ma se mettevo un breakpoint dentro alla if tutto funzionava a regola d'arte.
Quindi ho trasformato la "if" da com'era prima:
"If Data(Data.Length-1) <> crc_h Or Data(Data.Length-2) <> crc_l Then" a com'è adesso "If ((Data(Data.Length-1) <> crc_h) Or (Data(Data.Length-2) <> crc_l)) Then" e tutto ha iniziato a funzionare regolarmente.
Ora che ho compilato e caricato in modalità release, mi si presenta lo stesso problema.
Non capisco se mi sta sfuggendo qualcosa o se sono alle prese con un bug dell'ambiente di sviluppo.
Avete qualche idea?
Grazie.
Last edited: