2012-09-01 52 views
0

我正在從Linux下的虛擬串行端口讀取數據(所連接的設備是xbee模塊)是Linux上的ttyUSB0等虛擬串行端口的IRQ嗎?

當前讀取是使用檢查端口緩衝區的線程完成的。 但是在許多設備的情況下,這並不好,因爲一個端口上的數據可能每隔一秒就出現一次,所以它成爲CPU的負擔。

我想知道是否有類似的中斷,即觸發事件恩,只有當新的數據是可用的(我知道這主要適用於微控制器)。

如何在C++中做到這一點?

我不知道如何使用這些信息,因爲從我身邊缺乏瞭解。如果我有這樣的事情:

while(1){ 

    int n= PollComport(comport_number, buf, 4095); 
    if(n>0){ 
    //make somemthing with the new data 
    } 
} 

我想刪除while循環。我在哪裏以及如何使用epoll_wait?

+0

如果你能代替'PollComport'與確實做到了你想要的功能,將這一職能做正是? –

回答

2

這不是你的問題。操作系統這樣做。只要使用閱讀阻塞或某種形式的I/O複用的(如selectepoll_wait)。沒有什麼特別的你需要做。

+0

我更新了問題 –

+0

如果你想阻塞語義,只需刪除'|來自'OpenComport'的O_NDELAY'。 –

+0

我發現,我一直在尋找:關鍵詞是evend基於串口的dirver:http://sourceforge.net/projects/qspd/ –