Ich programmiere gerade eine Kommunikationssoftware zwischen einem Gambas-Client unter Linux Mint 18 und einem ATmega128. Ich möchte damit eines meiner selbstgebauten Amateurfunkgeräte steuern (Projektbeschreibung). Die Kommunikation mit der seriellen Schnittstelle funktioniert soweit, ich kann Daten an das Funkgerät senden und von ihm empfangen. Grundsätzlich zumindest. Denn der Empfang über RS232 macht sporadisch Probleme. Ich erhalte teilweise einen NULL-Zeiger von der Funktion zurück, welche Daten vom angeschlossenen COM-Device ( comRS232.PortName = "/dev/ttyUSB0") erhält. Vor dem Lesen aus der Schnittstelle wird dem Funkgerät mitgeteilt, welche Daten man erhalten will.
Hier die Empfangsfunktion:
gambas code
Function GetTRXData(strRequest As String) As String Dim strRX As String TransmitData(strRequest & " " & gb.Cr) 'Anforderung der Daten aus dem Transceiver comRS232.Begin() comRS232.Drop Sleep 0.025 Read #comRS232, strRx, Lof(comRS232) If Error Then Return "-1" Endif If Len(strRx) > 1 Then Return strRX End If Return "-1" EndDer String, der zurückkommt enthält dann idealerweise den Puffer der RS232-Schnittstelle. Manchmal kommt aber NULL zurück, was ich mir nicht erklären kann, denn ich gebe entweder die Variable zurück oder eine Konstante (-1). Den NULL-Pointer versuche ich dann abzufangen in der aufrufenden Funktion. Diese lädt (derzeit noch manuell) Daten, nachdem die Schnittstelle geöffnet wurde:
gambas code
Public Sub cmdLoadData_Click() Dim intRval As Integer Dim strRval As String strRVal = GetTRXData("GET BAND") 'Print strRVal If IsNull(strRVAl) = False Then intRVal = Val(strRVal) If intRVal >= 0 And intRVal <= 5 'Print intRVal cmbBand.Index = intRVal cmbBand.Refresh Endif Endif EndIn der 6. Zeile frage ich auf IsNull() ab, trotzdem bringt die nächste Zeile, wo mit Val() eine Typumwandlung durchgeführt werden soll, den Fehler, dass dort ein NULL angekommen ist.
Wie kann das sein?
Viele Grüße
Peter