我正在開發一個方向控制器。我有一個通過I2C與傳感器(指南針)通信的開發板。由於該板非常有限(沒有OS),我開發了一個簡單的程序來接收諸如以下內容:(1)'取0'讀取傳感器的寄存器0; (2)'設置0 10'將傳感器的寄存器0設置爲10.對於這些情況中的每一個,電路板返回:(1)'完成:10'。 (寄存器0的值爲10); (2)'完成';和(3)'錯誤:......'如有錯誤。有了這個,我正在嘗試開發一個shell腳本(bash)來發送命令並檢索數據,以便了解傳感器並開發控制器。通過shell腳本控制串口
我的問題是用下面的代碼:
# read device output in the background.
head -n 1 /dev/ttyUSB0 &
head=$!
# (#1): without the following stmt I get:
# head: cannot open `/dev/ttyUSB0' for reading: : Protocol error
sleep 0.1
# send command to the device.
echo "get 0" > /dev/ttyUSB0
# (#2) wait for head.
while kill -0 $head 2>/dev/null ; do : ; done
我猜(#1)通過讀引起/寫「頭」和「迴響」之間的衝突,但我不知道爲什麼和我不知道如何解決它。
另一個問題是在(#2)中,我想使用超時。我試過類似的東西:
timeout 1 bash -c "while kill -0 $head 2>/dev/null ; do : ; done"
但我得到:Timeout: aborting command ``bash'' with signal 9
和程序卡住了。
順便說,上面的代碼被執行之前,我做初始化串口:
stty -F /dev/ttyUSB0 9600 cs8 -cstopb
編輯:我不想要一個交互終端。我想根據需要使用這個例程。該例程是控制器(讀/寫傳感器的寄存器)的必要基礎,稍後將在板中實現。
你見過以下帖子嗎? http://unix.stackexchange.com/questions/22545/how-to-connect-to-a-serial-port-as-simple-as-using-ssh – jpe
爲什麼你不只是'等'頭'? –
@jpe:我不想要一個交互式shell。我只想在必要時使用這個例程。 –