도와주세요!!
글 수 15,339
2006.06.27 12:19:51 (*.141.98.17)
6671
안녕하세요..
저희가 qt 프로그램은 해 보지 않았어 정확한 답변을 드리기가 힘드네요..
> //if(fd < 0)
> //{
> // perror(MODEMDEVICE);
> // exit(-1);
> //}
에서 에러가 발생한다는 것은 시리얼 장치 파일을 열때 에러가 발생하는 것 같습니다.
정말로 장치파일의 반환값이 0보다 작은지 확인해 보세요..
if(fd < 0)
{
qDebug("Error %s",strerror(errno));
return;
}
이렇게 해서 Error 메세지가 뜨면 시리얼 장치 파일을 열때 문제가 발생한것입니다.
즉, open함수를 뭔가 잘못 사용하고 있는 것입니다.
QT에서 open 할때 다음과 같이 하나요??
fd = ::open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
터치스크린의 장치파일을 open할때하고 다르네요... 다음과 같이 한번 해 보세요..
fd = open( "/dev/ttyS00", O_RDWR | O_NOCTTY | O_NONBLOCK);
그럼 수고하세요..
>현재 ez-x5보드위에 qte-3.3.3을 올려서 터치를 구동시켰는데요..
>
>제가 시리얼 통신을 짜서 arm용으로 컴파일해서
>
>올리면 시리얼 통신이 되질 않습니다..
>
>qtx로 했을때는 잘되됐습니다..
>
>그리고 qvfb로 호스트에서 테스트 했을때도 잘됐는데..
>
>arm용으로 해서 보드에 올리니 아예 포트에서 신호가 나가질않습니다..
>
>상대방에서 아예 안받는다는거죠..
>
>셋팅은 /dev/ttyS00으로 하구요
>
>보드레이트는 9600입니다..
>
>혹시나 해서 소스한번 올려봅니다...
>
>======헤더부분입니다..
>
>#ifndef TAB_H
>#define TAB_H
>
>
>#include <sys/types.h>
>#include <sys/stat.h>
>#include <fcntl.h>
>#include <termios.h>
>#include <stdio.h>
>#include <qpushbutton.h>
>#include <qapplication.h>
>#include <qwidget.h>
>#include <unistd.h>
>#define BAUDRATE B115200
>#define MODEMDEVICE "/dev/ttyS0"
>#define _POSIX_SOURCE 1
>
>#define FALSE 0
>#define TRUE 1
>
>#include <qtabdialog.h>
>#include <qstring.h>
>//#include <qfileinfo.h>
>class TabDialog : public QTabDialog
>{
> Q_OBJECT
>
>public:
> TabDialog(QWidget *parent, const char *name, const QString &_filename );
>
>
>protected:
> // QString filename;
> // QFileInfo fileinfo;
>
> void setupTab1();
> void setupTab2();
> void setupTab3();
>private slots:
> void slotClicked1();
> void slotClicked2();
>};
>
>
>
>#endif
>
>===cpp파일입니다.....
>
>#include "tab.h"
>
>#include <qvbox.h>
>#include <qlineedit.h>
>#include <qdatetime.h>
>#include <qapplication.h>
>#include <qpushbutton.h>
>#include <qbuttongroup.h>
>
>//윗부분생략..
>//버튼을 클릭하면 0x31이라는 신호가 가는 프로그램
>
>void TabDialog::slotClicked1()
>{
> int fd, res;
> struct termios oldtio, newtio;
> unsigned char rx_buff[1] = {0x31};
>
> fd = ::open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
> //if(fd < 0)
> //{
> // perror(MODEMDEVICE);
> // exit(-1);
> //}
> fcntl(fd, F_SETFL,FASYNC);
> tcgetattr(fd, &oldtio);
>
>
> newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
> newtio.c_iflag = IGNPAR | ICRNL;
> newtio.c_oflag = 0;
> newtio.c_lflag = ICANON;
>
> tcflush(fd, TCIFLUSH);
> tcsetattr(fd, TCSANOW, &newtio);
>
> res =::write(fd, rx_buff,1);
>
>
> ::close(fd);
>}
>
>
>그런데 컴파일 도중
>
>exit undeclared 오류가 나더군요..
>
>그래서 그 부분을 주석 처리햇습니다..
>
>fd가 열리지 않으면 빠져나오는 거니까요...
>
>그래도 마찬가지 이길래..
>
>그냥 exit가 들어있는 if문 전체를 주석처리해봤더니
>
>그랬더니...
>
>버튼한번만 클릭하면 아예 프로그램을 빠져나가버리더군요...
>
>어떤 오류인지 모르겠습니다...
저희가 qt 프로그램은 해 보지 않았어 정확한 답변을 드리기가 힘드네요..
> //if(fd < 0)
> //{
> // perror(MODEMDEVICE);
> // exit(-1);
> //}
에서 에러가 발생한다는 것은 시리얼 장치 파일을 열때 에러가 발생하는 것 같습니다.
정말로 장치파일의 반환값이 0보다 작은지 확인해 보세요..
if(fd < 0)
{
qDebug("Error %s",strerror(errno));
return;
}
이렇게 해서 Error 메세지가 뜨면 시리얼 장치 파일을 열때 문제가 발생한것입니다.
즉, open함수를 뭔가 잘못 사용하고 있는 것입니다.
QT에서 open 할때 다음과 같이 하나요??
fd = ::open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
터치스크린의 장치파일을 open할때하고 다르네요... 다음과 같이 한번 해 보세요..
fd = open( "/dev/ttyS00", O_RDWR | O_NOCTTY | O_NONBLOCK);
그럼 수고하세요..
>현재 ez-x5보드위에 qte-3.3.3을 올려서 터치를 구동시켰는데요..
>
>제가 시리얼 통신을 짜서 arm용으로 컴파일해서
>
>올리면 시리얼 통신이 되질 않습니다..
>
>qtx로 했을때는 잘되됐습니다..
>
>그리고 qvfb로 호스트에서 테스트 했을때도 잘됐는데..
>
>arm용으로 해서 보드에 올리니 아예 포트에서 신호가 나가질않습니다..
>
>상대방에서 아예 안받는다는거죠..
>
>셋팅은 /dev/ttyS00으로 하구요
>
>보드레이트는 9600입니다..
>
>혹시나 해서 소스한번 올려봅니다...
>
>======헤더부분입니다..
>
>#ifndef TAB_H
>#define TAB_H
>
>
>#include <sys/types.h>
>#include <sys/stat.h>
>#include <fcntl.h>
>#include <termios.h>
>#include <stdio.h>
>#include <qpushbutton.h>
>#include <qapplication.h>
>#include <qwidget.h>
>#include <unistd.h>
>#define BAUDRATE B115200
>#define MODEMDEVICE "/dev/ttyS0"
>#define _POSIX_SOURCE 1
>
>#define FALSE 0
>#define TRUE 1
>
>#include <qtabdialog.h>
>#include <qstring.h>
>//#include <qfileinfo.h>
>class TabDialog : public QTabDialog
>{
> Q_OBJECT
>
>public:
> TabDialog(QWidget *parent, const char *name, const QString &_filename );
>
>
>protected:
> // QString filename;
> // QFileInfo fileinfo;
>
> void setupTab1();
> void setupTab2();
> void setupTab3();
>private slots:
> void slotClicked1();
> void slotClicked2();
>};
>
>
>
>#endif
>
>===cpp파일입니다.....
>
>#include "tab.h"
>
>#include <qvbox.h>
>#include <qlineedit.h>
>#include <qdatetime.h>
>#include <qapplication.h>
>#include <qpushbutton.h>
>#include <qbuttongroup.h>
>
>//윗부분생략..
>//버튼을 클릭하면 0x31이라는 신호가 가는 프로그램
>
>void TabDialog::slotClicked1()
>{
> int fd, res;
> struct termios oldtio, newtio;
> unsigned char rx_buff[1] = {0x31};
>
> fd = ::open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
> //if(fd < 0)
> //{
> // perror(MODEMDEVICE);
> // exit(-1);
> //}
> fcntl(fd, F_SETFL,FASYNC);
> tcgetattr(fd, &oldtio);
>
>
> newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
> newtio.c_iflag = IGNPAR | ICRNL;
> newtio.c_oflag = 0;
> newtio.c_lflag = ICANON;
>
> tcflush(fd, TCIFLUSH);
> tcsetattr(fd, TCSANOW, &newtio);
>
> res =::write(fd, rx_buff,1);
>
>
> ::close(fd);
>}
>
>
>그런데 컴파일 도중
>
>exit undeclared 오류가 나더군요..
>
>그래서 그 부분을 주석 처리햇습니다..
>
>fd가 열리지 않으면 빠져나오는 거니까요...
>
>그래도 마찬가지 이길래..
>
>그냥 exit가 들어있는 if문 전체를 주석처리해봤더니
>
>그랬더니...
>
>버튼한번만 클릭하면 아예 프로그램을 빠져나가버리더군요...
>
>어떤 오류인지 모르겠습니다...