• 4291阅读
  • 2回复

[提问]写了个用qt访问串口的程序,出现些问题,有没有人能帮忙看看。 [复制链接]

上一主题 下一主题
离线caffee_1989
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-23
我把代码贴上来:
serial.h:

#ifndef COLLECT_H
#define COLLECT_H

#include <qwidget.h>

class QLabel;
class QString;
class QPushButton;

class MainWidget : public QWidget
{
    Q_OBJECT
public:
    MainWidget(QWidget *parent = 0, const char *name = 0);
    int fd;
    char buf[255];
    
private:
    QLabel *label;
    
protected:
    void timerEvent( QTimerEvent * event );
    int timer_ID;
};
#endif


serial.cpp:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <strings.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#include <qlabel.h>
#include "serial.h"

#define BAUDRATE B115200
#define MODEMDEVICE "/dev/ttySAC0"
#define _POSIX_SOURCE 1

MainWidget::MainWidget(QWidget *parent, const char *name): QWidget(parent, name)
{
     setCaption(tr("serial"));
     label = new QLabel( this);
     label->setBackgroundColor(Qt::white);
     showMaximized () ;
     timer_ID = startTimer( 2000 );    
}


void MainWidget::timerEvent(QTimerEvent * event)
{  
int fd, res;
struct termios oldtio,newtio;
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );

if (fd <0) {perror(MODEMDEVICE); exit(-1); }

tcgetattr(fd,&oldtio);
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;

newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME]    = 0;
newtio.c_cc[VMIN]     = 5;

tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
tcsetattr(fd,TCSANOW,&oldtio);

  res = read(fd,buf,255);  
  buf[res]=0;    
  printf("%s:%d\n", buf, res);
  tcsetattr(fd,TCSANOW,&oldtio);
  label->setText(buf);
  ::close(fd);
}

main.cpp:

#include <qapplication.h>

#include "serial.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWidget *widget = new MainWidget;
    app.setMainWidget(widget);
    widget->show();
    return app.exec();
}

我把它下到arm板后,打开界面后就没法响应了,想关闭窗口都不行。

离线caffee_1989
只看该作者 1楼 发表于: 2011-04-24
我把res = read(fd,buf,255);   屏蔽就能关窗口,应该读那里有问题吧。
离线caffee_1989
只看该作者 2楼 发表于: 2011-04-24
有没有人知道是什么问题?
快速回复
限100 字节
 
上一个 下一个