看板 C_and_CPP 關於我們 聯絡資訊
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 這幾天在改一個序列埠 (RS232) 接收資料的 Qt4 程式, 從 Linux 搬到 Windows 上 我在 Linux 上用 QextSerialPort 來讀寫序列埠 設定 QSocketNotifier 當資料進來時觸發讀取 這部份用很久了, 確定沒問題 現在改用 Windows 就不能用 QSocketNotifier 我找到 QextSerialPort 官網有 1.2 版本, 在 Linux 編不過但 Windows 可以 裡面新增了一些功能, 包括可以用 event driven 所以我就拿來試試 結果...程式是可以跑, 序列埠也可以開, slot 也會被觸發 但是收到的東西完全不對 感覺也沒什麼規則, 7E 7F 7D 5x 之類的, 確定不是鮑率設錯 目前只看得出來我送 8 bytes 進去, 只讀得到 1 byte (而且是錯的) 我 Windows 序列埠只會最基本的開關讀寫, 這部份的原碼確定過了沒問題 官方有附一個 event driven 的範例不過我連怎麼跑都不知道 把 console 打開打 open 之後什麼顯示也都看不到... 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) 在 Windows XP 上是用 MinGW (4.4.0) 的開源版 Qt 4.6.3 有問題的code: (請善用置底文標色功能) SerialController::SerialController(QString portName, QObject *parent) : QObject(parent) { port = new QextSerialPort(portName, QextSerialBase::EventDriven); port->setBaudRate(BAUD9600); port->setFlowControl(FLOW_OFF); port->setParity(PAR_NONE); port->setDataBits(DATA_8); port->setStopBits(STOP_1); port->open(QIODevice::ReadOnly); qDebug() << "Opening " << portName << "..."; QObject::connect(port, SIGNAL(readyRead()), this, SLOT(readData())); } void SerialController::readData() { char bytesIn[1024] = {0}; int readResult = port->read(bytesIn, 1024); qDebug() << "readResult = " << readResult; byteIn[1023] = '\0'; for (int i = 0; i < readResult; i++) { qDebug() << "Read: 0x" << hex << (unsigned int)((unsigned char)bytesIn[i]); } } 最後輸出那邊的寫法就不要管了...我只是想印出東西, 原本之後還要處理的 -- "問おう、貴方が私のマスターか?" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.81.146