Ich versuche derzeit, den PIC32UBL Qt/Linux/Mac-Port über den seriellen Port arbeiten zu lassen. Bisher bekomme ich immer Zeitlimits beim Lesen der seriellen Schnittstelle.Lese-Timeout immer erhalten
Hier ist das vollständige Open Source-Projekt PIC32UBL-qt.
Ich verwende /dev/ttyUSB0
als serielle Schnittstelle, dieser Adapter wurde getestet. Außerdem habe ich verifiziert, dass die Zielschaltung Daten mit einem Logikanalysator an das Host-Programm (PIC32UBL-qt) empfängt/sendet. Außerdem funktioniert es vollständig mit der Windows-Version des PIC32UBL.
Der defekte Teil ist bei comport.cpp:156
unsigned short CComPort::ReadComPort(char* buffer, int MaxLen)
{
if (serialPort != NULL)
{
SerialPort::DataBuffer dataBuffer;
// Added a catch for timeouts
try
{
serialPort->Read(dataBuffer, MaxLen,10);
std::copy(dataBuffer.begin(), dataBuffer.end(), buffer);
}
catch(std::exception &e)
{
}
return dataBuffer.size();
}
return 0;
}
So ist die Read
immer ein Timeout wirft, verschiedenes Timing versucht (100, 1000): immer Timeout, und auch versucht, unendlich (0): nie raus.
Konnte das Problem damit zusammenhängen, dass die libserial
mit Signalhandler arbeitet und ich einen seriellen/usb FTDI-Adapter verwende?
1) Was versucht nur 1 zu lesen Byte? (Was ist 'maxlen') 2) Zuversichtlich Daten empfangen Daten der richtigen Baud, Stopp-Bits, etc? Indem die Ausgangsdaten dieses Ports als eigener Eingang zurückgeschleift werden, kann diese Potentialdifferenz eliminiert werden. – chux
@chux Danke für Ihren Zeiger, geändert für das Lesen von einem Byte zu einer Zeit und es funktioniert perfekt, wird die Antwort einschließlich Arbeitscode Version für diese Funktion. –