2011-03-25 66 views
0

我正在調試使用QtCreator在Qt/C++中開發的應用程序。我的應用程序使用QextSerialPort從串行端口讀取數據,串行端口連接到Rhino Mark IV控制器。Qt調試錯誤:「解析目標庫列表時:不正確(無效標記)」

int bytesRead; 
char buffer[BUFFER_SIZE]; 
if (_serialPort->bytesAvailable() > 0 
    && (bytesRead = _serialPort->read(buffer, BUFFER_SIZE)) > 0) 
{ 
    _comBuffer.append(buffer, bytesRead); 
    buffer[bytesRead+1] = 0; // for debugging purposes 
    qDebug(buffer);   // for debugging purposes 
} 

我有這個麻煩,因爲我嘗試讀一些ASCII數據,但我進入緩衝區有一些奇怪的字符。例如,數字零('0')的ASCII碼被調試器顯示的另一個代碼替代,並由qDebug打印爲'°'。

此外,我在應用輸出選項卡中獲得以下消息:while parsing target library list: not well-formed (invalid token)

我不知道爲什麼我沒有得到與QextSerialPort相應的ASCII碼。這是QextSerialPort還是Rhino Mark IV控制器的問題?我正在通過兩臺顯示器上的串行端口查看通信量,並且ASCII字符在顯示器上正確顯示。因此,我得出結論,這不是控制器或通信信道的問題。

是什麼消息while parsing target library list: not well-formed (invalid token)意味着和爲什麼它造成的呢?

回答

1

你在你的應用程序正確地配置串行端口(即波特率,停止位等)?

而且,你不應該加1 bytesRead時零終止緩衝區,允許在字符串結束的單一不需要字節。

這通過gdb,不產生Qt的錯誤消息。它可能與使用非latin1編碼名稱的文件/文件夾有關。

+0

我補充說,1〜'bytesRead'用於調試的目的,只是爲了輕鬆地打印存儲在緩衝區中的字符串,因爲我知道,在我的測試中,我將永遠不會有溢出(因爲我做了測試,我知道,在這些測試中,緩衝區永遠不會被填滿)。 我確實設置了正確的波特率,但我不確定其他參數是否設置正確。但是,我可以從端口讀寫(實際上,通過串行連接發送命令完全可行),但問題是從端口讀取的字節似乎沒有正確的字符編碼。 – Genba 2011-03-25 21:44:31

+0

最後,我意識到我配置串口的方式根本不正確。一些設置是正確的,但不是全部。我沒有在設備手冊中找到這些信息,但是在一本與正確設備不同的手冊中,這非常煩人。 – Genba 2011-04-13 12:12:40

相關問題