[問題] Linux RS-232程式設計~

看板C_and_CPP作者 (David_Yu)時間13年前 (2011/10/17 21:37), 編輯推噓1(1014)
留言15則, 3人參與, 最新討論串1/1
各位大大好,我想請問一下就是說 我現在要用RS-232來做一個資料的傳送, 然而我預計要傳送29筆資料出去,但是接收端卻只能接收前8筆資料或前9筆資料, 之後的資料就都不見了,所以想請問這大概會是哪裡有問題,謝謝! 收資料方面利用終端機收。 以下是我的傳送端程式碼,開發環境是QT撰寫。 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

10/17 21:39, , 1F
檢查看看 write 函式的回傳值是多少
10/17 21:39, 1F

10/17 22:08, , 2F
回傳值是10
10/17 22:08, 2F

10/17 22:12, , 3F
把 write 寫成這樣的迴圈 http://codepad.org/MtvDsW4M
10/17 22:12, 3F

10/17 22:12, , 4F
因為write沒辦法一次把29全部寫出去,要多跑幾次
10/17 22:12, 4F

10/17 22:13, , 5F
10/17 22:13, 5F

10/17 22:16, , 6F
可能是 baudrate 的限制 XD?
10/17 22:16, 6F

10/17 22:43, , 7F
int a=29; res=write(fd, s2 ,a);
10/17 22:43, 7F

10/17 22:44, , 8F
用以上方法 write 可以回傳29,但是接收端扔然只能收到
10/17 22:44, 8F

10/17 22:45, , 9F
前面幾筆資料!
10/17 22:45, 9F

10/17 22:48, , 10F
你接收端的read有用迴圈包起來嗎?
10/17 22:48, 10F

10/17 23:01, , 11F
沒有
10/17 23:01, 11F

10/17 23:07, , 12F
如果你要貼接收端的程式碼,建議按大寫E修改這篇文章
10/17 23:07, 12F

10/18 01:11, , 13F
謝謝大大的提醒
10/18 01:11, 13F

10/19 18:10, , 14F
謝謝各位大大的指教! 在最後一行中的 TCSANOW 改成
10/19 18:10, 14F

10/19 18:11, , 15F
TCSAFLUSH問題就解決了!!!
10/19 18:11, 15F
文章代碼(AID): #1Ed2-K5S (C_and_CPP)