2016-03-10 56 views
0

當我嘗試讀取我的linux設備上的串行接口時,出現問題。 這是我打開我的端口:從Linux下的C++中的串行接口讀取字節的問題

string port = /dev/ttyMFD1; 
struct termios tio; 
struct termios stdio; 
fd_set rdset; 

memset(&stdio, 0, sizeof(stdio)); 
stdio.c_iflag = 0; 
stdio.c_oflag = 0; 
stdio.c_cflag = 0; 
stdio.c_lflag = 0; 
stdio.c_cc[VMIN] = 1; 
stdio.c_cc[VTIME] = 0; 
tcsetattr(STDOUT_FILENO, TCSANOW, &stdio); 
tcsetattr(STDOUT_FILENO, TCSAFLUSH, &stdio); 
fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); 

memset(&tio, 0, sizeof(tio)); 
tio.c_iflag = 0; 
tio.c_oflag = 0; 
tio.c_cflag = CS8 | CREAD | CLOCAL; 
tio.c_lflag = 0; 
tio.c_cc[VMIN] = 1; 
tio.c_cc[VTIME] = 2; 

serial_port = open(port.c_str(), O_RDWR | O_NONBLOCK);  
cfsetospeed(&tio, B115200); 
cfsetispeed(&tio, B115200); 
tcsetattr(serial_port, TCSANOW, &tio); 

現在我寫下面的代碼端口(載於「STR」十六進制值):

char str[] = { 0xAA, 0x00, 0x3D, 0x01, 0x0C, 0x00 }; 
write(serial_port, str, strlen(str)); 

現在我想要得到的迴應從我的UART連接芯片:

while(1) 
{ 
    unsigned char theByte; 
    int n = 0; 
    n = read(serial_port, theByte, 1); 
    cout << theByte << "\n" ; 
    usleep(100000); 
} 

當我調試時,返回值是沒有用的。當我與調試終端連接,並做了

OD -x <的/ dev/ttyMFD1

然後在控制檯上的輸出是好的。但我沒有得到任何打印的十六進制值如果我在調試時查看「theByte」。

回答

0

變化

n = read(serial_port, theByte, 1); 

n = read(serial_port, &theByte, 1); 

否則你不會得到任何結果...

+0

謝謝!我愛指針:-( – Christoph

+0

@Christoph,你可能會考慮接受答案,如果它解決了你的問題。 –