2
我已經編寫了一個從串口讀取數據的Perl腳本。如果數據在設備上可用,用Perl進行測試:: SerialPort
use Device::SerialPort;
$PortObj = new Device::SerialPort ($PortName, $quiet, $lockfile);
$PortObj->read_const_time(500); # timeout waiting for data after 500ms
...
主循環嘗試從串口讀取數據:
while (1) {
($count, $data) = $PortObj->read($frameLength);
process_my_data($data);
do_something_entirely_different_that_needs_being_done;
}
但不具有一個$ PortObj->讀超時(這會消耗大量的時間),我想能夠測試數據是否在緩衝器中可用,這樣我就可以加快循環:
while (1) {
if (test_serial_data_available) { ($count, $data) = $PortObj->read($frameLength); }
do_something_entirely_different_that_needs_being_done;
}
我可以測試數據可用性串行緩衝器?
EDIT1:我已經早上花重寫問題使用串行設備的文件句柄和讀取數據的作品,但它仍然是堵塞循環。這可能會打開新的選項來檢查緩衝區中可用的數據。 在僞的Perl:
use Symbol qw(gensym);
my $handle = gensym();
my $PortObj = tie(*$handle, "Device::SerialPort", $PortName);
while (1) {
my $frameData;
if (test_serial_data_available) { my $readLength = read($handle , $frameData , $frameLength); }
do_something_entirely_different_that_needs_being_done;
}
所以我的問題是:我應該test_serial_data_available
是什麼樣子?
:o)Thnx!在這個問題上我一直在苦苦掙扎。 – jippie 2012-04-28 12:56:32