環境:主機:fedora12
開發軟體:qt
目標板:mini6410
實現功能:
目標板接收pc串列埠傳過來的資訊並在終端輸出,目標板串列埠接收資訊用select機制
源**:
widget.h:
[cpp]view plain
copy
#ifndef widget_h
#define widget_h
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "qthread"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "sys/select.h"
#include "termios.h"
namespace ui
class widget : public qwidget
; //埠資訊定義
typedef
struct _port_info
*port_info;
//開啟串列埠
int open_port(char *port);
//關閉串列埠
void close_port(int fd);
//根據波特率獲得波特率設定引數
int get_baud_rate(unsigned long baud_rate);
//設定埠引數
int set_port(port_info p_info);
//通過串列埠傳送資料,只能寫compress_byte長度資料,傳送時加檔案頭"jdh"
int send_data(int fd,char *data,int data_len);
#endif // widget_h
widget.c:
[cpp]view plain
copy
#include "widget.h"
#include "ui_widget.h"
int fd_com;
#define com "/dev/ttysac1"
char buffer_com[1024 + 10];
char buffer_read_com[1024];
int send_index;
//開啟串列埠
int open_port(char *port)
} //關閉指定串列埠
void close_port(int fd)
//根據波特率獲得響應的波特率設定引數
int get_baud_rate(unsigned long baud_rate)
} //設定埠
int set_port(port_info p_info)
case
'1':
case
'2':
} //設定資料位
new_opt.c_cflag &= ~csize;
switch (p_info->data_bits)
case
'6':
case
'7':
case
'8':
default:
} //設定奇偶校驗位
switch (p_info->parity)
case
'1':
case
'2':
} //設定停止位
if (p_info->stop_bit == '2')
else
//修改輸出模式,原始資料輸出
new_opt.c_oflag *= ~opost;
//修改控制字元,讀取字元最小個數為1
new_opt.c_cc[vmin] = 1;
//修改控制字元,讀取第乙個字元等待等待1 *(1/10)s
new_opt.c_cc[vtime] = 1;
//如果發生資料溢位,接收資料,但是不再讀取
tcflush(p_info->port_fd,tciflush);
int result;
result = tcsetattr(p_info->port_fd,tcsanow,&new_opt);
if (result == -1)
tcgetattr(p_info->port_fd,&old_opt);
return result;
} widget::widget(qwidget *parent) :
qwidget(parent),
ui(new ui::widget)
int err = 0;
struct timeval wait_time;
fd_set read_fds;
int len_com = 0;
char *data = "jdh";
int len = write(fd_com,data,3);
if (len != 3)
while (1)
else
} //讀取串列埠音效卡
//判斷音效卡是否允許讀,不允許讀退出
if (fd_isset(fd_com,&read_fds))
} qdebug() << "end";
} widget::~widget()
說明:
串列埠在驅動中有乙個快取區,收到的資料會存放在裡面,如果一次傳送資料很多,而讀取間隔很短,則每次讀取都是整個資料報的片段.
Linux下基於QT串列埠程式設計測試一
linux下基於qt串列埠程式設計測試一 環境 主機 fedora12 開發軟體 qt 目標板 mini6410 實現功能 目標板接收pc串列埠傳過來的資訊並在終端輸出,目標板串列埠接收資訊用select機制 源 widget.h ifndef widget h define widget h in...
Linux下基於QT串列埠程式設計測試一
linux下基於qt串列埠程式設計測試一 環境 主機 fedora12 開發軟體 qt 目標板 mini6410 實現功能 目標板接收pc串列埠傳過來的資訊並在終端輸出,目標板串列埠接收資訊用select機制 源 widget.h ifndef widget h define widget h in...
Linux下基於QT串列埠程式設計測試二
linux下基於qt串列埠程式設計測試二 環境 主機 fedora12 開發軟體 qt 目標板 mini6410 實現功能 目標板接收pc串列埠傳過來的資訊並在終端輸出,輸出是每次讀8個位元組,然後輸出.說明 這一次採用的是開源類qextserialbase提供的串列埠功能,感謝原作者。以下是他的 ...