2014-01-16 7 views
3

우리 하드웨어에서 FTDI 직렬 포트 칩을 사용하고 있습니다. 이제 우리는 리눅스에서 작동하는 코드를 가지고 있고 우리는 윈도우 7로 옮겼습니다. 우리는 이상한 문제를 겪습니다.qt 5.2 Windows에서 시리얼 포트 쓰기 문제 발생

문제점 : 우리는 이렇게 다른 콘솔 응용 프로그램을 실행하지 않고 직렬 포트에 데이터를 쓸 수 없습니다 : 모든 읽기와

serial.setPortName("COM3"); 
     if (serial.open(QIODevice::ReadWrite)) { 
      bool success = serial.setBaudRate(QSerialPort::Baud9600) & 
      serial.setStopBits(QSerialPort::OneStop) & 
      serial.setDataBits(QSerialPort::Data8) & 
      serial.setParity(QSerialPort::NoParity) & 
      serial.setFlowControl(QSerialPort::NoFlowControl); 
      qDebug() << "Connected to usb device: " << (success ? "OK" : "FAIL"); 

      while(true) { 
       if(serial.waitForReadyRead(-1)) { 
        QByteArray out = serial.readAll(); 
        for(int i=0; i< out.length(); i++) { 
         qDebug() << (int) out[i]; 
        } 
       } 
      } 
      serial.close(); 

그래서 그 단지 루프를. 하드웨어는 아무것도 보내지 않으므로 읽기는 무한 루프입니다. 쓰기 프로그램을 닫은 후 실행하면 올바르게 실행됩니다.

모든 것을 읽은 후에도 모든 것이 읽히지 만 읽지 않으면 작동하지 않습니다. 우리가 뭘 잘못하고 있니? 감사합니다. .

+0

쓰기 응용 프로그램 (표준 C posix로 작성)과 QtSerialPort 판독기가 있습니까? 그게 다야? 어느 부분을 Windows로 옮깁니 까? "OK"또는 "FAIL"중입니까? 또한 휴식도 Goto도 없으므로 영원히 while 루프를 떠나지 않을 것입니다 ... 설정에 대한 반환 값을 확인하지 않아서 성공했는지 확인하지 않습니까? 그것이 내가 옳은지 확인하는 것이 가장 먼저해야 할 일입니다. 또한 코드가 불완전하므로 수정하십시오. 또한 동기화 작성기 및 독자 예제를 git에서 실행하려고 시도 했습니까? – lpapp

+2

또한 '&&'대신 '&'를 사용했습니다. 이 특별한 경우에 부울을 사용할 수도 있지만 논리식이 아닌 비트 단위 AND를 수행한다는 점에 유의하십시오. – lpapp

+0

예 리더기 용 C posix 및 QtSerialPort입니다. 두 가지 콘솔 응용 프로그램. 비트 단위로 작업하려고하므로 &는 okey입니다. – user257980

답변

1

QT 직렬 포트 SW를 사용하려면 QT 이벤트를 처리해야 작동한다는 것을 알았습니다. 읽기 전에 qApp-> processEvents()를 루프에 넣으면 제대로 작동합니다.

(윈도우 7 QT 4.8.5)

2

우리는 FTDI 칩 보드와 함께 우리의 응용 프로그램에서 비슷한 문제가 있었다. 우리는 실제로 오실로스코프를 사용하여 보았을 때 약 1200 보오/초 였지만 19200 보오/초의 바이트를 쓰려고했습니다. 문제는 바이트를 쓴 직후 직렬 포트를 닫는 것입니다. 포트를 닫기 전에 QThread :: msleep (5)를 사용하여 대기하는 것이 도움이되었습니다. 그것은 장치가 재설정 작업을하는 동안 뭔가를 가져오고 최신 바이트가 잘못된 전송 속도 및 기타 매개 변수와 함께 전송 된 것 같습니다.