亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1852 | 回復(fù): 0
打印 上一主題 下一主題

[Linux] 串口讀寫性能優(yōu)化的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-05-22 10:36 |只看該作者 |倒序?yàn)g覽
本帖最后由 tang_m_cong 于 2015-05-22 10:40 編輯

        2個(gè)程序分別對2個(gè)互連的串口進(jìn)行讀寫,我使用的是select來判斷IO的讀寫,程序大致如下:

寫串口的程序:
  1. while (1)
  2. {
  3.     FD_ZERO(&writefds);
  4.     FD_SET(wfd, &writefds);
  5.     to.tv_sec = 5;
  6.     to.tv_usec = 50000;

  7.     if ( select(wfd, &writefds, NULL, NULL, &to) )
  8.     {
  9.         if ( FD_ISSET(wfd, &writefds) )
  10.         {
  11.                 n = write(wfd, buf, 1024);
  12.                 if (n<0)
  13.                 {
  14.                     perror("write");
  15.                     return -1;
  16.                 }
  17.         }
  18.     }
  19. }
復(fù)制代碼

讀串口:
  1. while (1)
  2. {
  3.     FD_ZERO(&readfds);
  4.     FD_SET(rfd, &readfds);
  5.     to.tv_sec = 5;
  6.     to.tv_usec = 50000;

  7.     if ( select(rfd, &readfds, NULL, NULL, &to) )
  8.     {
  9.         if ( FD_ISSET(rfd, &readfds) )
  10.         {
  11.             do{
  12.                     n = read(rfd, (char *)&buf+offset, 1024);
  13.                     offset += n;
  14.                 }while (n > 0 );
  15.               
  16.             if ( offset == 1024)
  17.             {
  18.                  offset = 0;
  19.             }
  20.         }

  21.     }

  22. }
復(fù)制代碼

我發(fā)現(xiàn)的問題是盡管我在讀動作時(shí),采用了do while結(jié)構(gòu),把數(shù)據(jù)讀盡為止,但是實(shí)際上是,我寫入1024個(gè)字節(jié),并且我在寫時(shí)也打印過實(shí)際寫入的字節(jié)數(shù),是1024,但讀的函數(shù)部分卻出現(xiàn)了無法讀盡的現(xiàn)象。比如第一次跳出do while循環(huán)時(shí)offset的值會小于1024,我得多次進(jìn)入do while才能讀完數(shù)據(jù)。
我的猜想是:因?yàn)槲易x寫的是串口,波特率是115200,那么1024個(gè)字節(jié)寫完需要 (8+2) * 1024 /115200 = 0.088 s,也就是88毫秒,而讀的速度遠(yuǎn)大于數(shù)據(jù)傳輸?shù)乃俣,這樣就導(dǎo)致讀到某個(gè)位置時(shí)n為0了。

我感覺這樣影響了數(shù)據(jù)的傳輸速度,有什么辦法優(yōu)化嗎?按照理論值,115200波特率的傳輸速率大約是11KB/S左右,但是實(shí)際上我測試大概只有3KB/S。我整個(gè)程序類似于一個(gè)xmodem傳輸協(xié)議,采用1k-mode,排除應(yīng)答,校驗(yàn)計(jì)算耗時(shí),我想應(yīng)該速度不會這么差。


您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP