我正在开发一个方向控制器。我有一个通过 I2C 与传感器(指南针)通信的开发板。因为电路板非常有限(没有操作系统),我开发了一个简单的程序来接收以下内容:(1)“获取 0”来读取传感器的寄存器 0;(2) 'set 0 10' 将传感器的寄存器 0 设置为值 10。对于每种情况,板返回:(1) 'Done: 10'。(寄存器 0 的值为 10);(2) “完成”;(3) 'error: ...' 如果出现错误。有了这个,我正在尝试开发一个 shell 脚本(bash)来发送命令和检索数据,以便了解传感器并开发控制器。
我的问题是以下代码:
# 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)是由“head”和“echo”之间的读/写冲突引起的,但我不知道为什么,也不知道如何解决它。
另一个问题是在 (#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
编辑:我不想要交互式终端。我想根据需要使用这个例程。该例程是控制器(读/写传感器的寄存器)的必要基础,稍后将在板上实现。