看板 LinuxDev 關於我們 聯絡資訊
各位大大好,我想請問一下就是說 我現在要用RS-232來做一個資料的傳送, 然而我預計要傳送29筆資料出去,但是接收端卻只能接收前8筆資料或前9筆資料, 之後的資料就都不見了,所以想請問這大概會是哪裡有問題,謝謝! 收資料方面利用終端機收。 以下是我的傳送端程式碼 int fd,res=0; struct termios oldtio,newtio; int s1[29]= {0x01,0x10,0x17,0x70,0x0,0xa,0x14,0x0,0x81,0x0,0x81,0x0, 0x83,0x0,0x99,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0xff,0xff, 0xff,0xff,0xb3,0xdd}; char s2[29]={0}; fd = open (MODEMDEVICE, O_RDWR|O_NOCTTY); tcgetattr (fd, &oldtio); bzero(&newtio, sizeof(newtio)); newtio.c_cflag = BAUDRATE | CS8 | CLOCAL |CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; newtio.c_lflag = ICANON; tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &newtio); for (int i=0;i<29;i++) { s2[i]=s1[i]; } res=write(fd, s2 ,29); tcsetattr(fd, TCSANOW, &oldtio); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.182.35
Milk1985:開發環境是使用QT撰寫 10/17 21:38
troylee:檢查看看 write 回傳的值 res 有沒有全部送出去 (=29) 10/17 23:34
Milk1985:我確定res值是29!!! 10/18 13:14
eleghost:有close(fd)嗎?是不是queue在buf內 10/18 22:04
drag:最後一行的tcsetattr()要不拿掉,要不就改為TCSADRAIN或 10/19 14:21
drag:TCSAFLUSH 試試看 10/19 14:21
Milk1985:謝謝各位大大的幫忙! 我改成TCSAFLUSH 就解決問題了!!! 10/19 16:35
drag:QT的話,有個很久沒維護的Qextserial可以參考一下 10/19 18:48
uranusjr:Qxt 也有類似的東西(QxtSerialDevice), 開發也比較積極 10/19 21:56
uranusjr:不過如果沒有跨平台需求, 直接用 Linux API 還比較快... 10/19 21:57
uranusjr:配合 QSocketNotifier 就可以搞定了 10/19 21:57