( *[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