現在、シリアルポートで動作するPIC32UBL Qt/Linux/Macポートを作成しようとしています。これまでのところ、私はシリアルポートを読んでいる間は常にタイムアウトに陥りました。常にタイムアウトを取得します
ここには完全なPIC32UBL-qtオープンソースプロジェクトがあります。
私は/dev/ttyUSB0
をシリアルポートとして使用しています。このアダプタはテストされています。また、ターゲット回路がロジックアナライザを使用してホストプログラム(PIC32UBL-qt)にデータを送受信していることを確認しました。また、PIC32UBLのWindows版と完全に連携しています。出ることはありません:
不良部品が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;
}
であるのでRead
は常にタイムアウトをスローし、異なるタイミング(100、1000)試してみました:(0)常にタイムアウトを、そしてまた無限みました。
libserial
がシグナルハンドラで動作していて、シリアル/ USB FTDIアダプタを使用していますか? chuxさんのコメントによって
1)どのようなだけ1を読み取ろうとする程度バイト? (maxlenとは何ですか?)2)自信を持ったデータが正しいボー、ストップビットなどのデータを受信していますか?このポートの出力データを独自の入力としてループバックすることで、その電位差を排除することができます。 – chux
@chuxポインタをありがとう、一度に1バイトを読むために変更され、それは完全に動作しています、この関数の作業コードバージョンを含む答えを投稿します。 –