Я разрабатываю контроллер ориентации. У меня есть плата разработки, которая связывается с датчиком (компасом) через I2C. Поскольку плата довольно ограничена (без ОС), я разработал простую программу для получения таких вещей, как: (1) «get 0» для чтения регистра датчика 0; (2) «установить 0 10», чтобы установить регистр датчика 0 со значением 10. Для каждого из этих случаев плата возвращает: (1) «Готово: 10.» (регистр 0 имеет значение 10); (2) «Готово»; и (3) «error: ...» в случае ошибки. При этом я пытаюсь разработать сценарий оболочки (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) вызывается для чтения/записи конфликт между «головой» и «эхо», но я не знаю, почему и Я понятия не имею, как его решить.
Другая проблема в (№ 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
EDIT: Я не хочу, интерактивный терминал. Я хочу использовать эту процедуру по мере необходимости. Эта процедура является необходимой основой контроллера (регистров датчика чтения/записи), который позже будет реализован на плате.
Вы видели следующее сообщение? http://unix.stackexchange.com/questions/22545/how-to-connect-to-a-serial-port-as-simple-as-using-ssh – jpe
Почему бы вам просто не подождать $ head? –
@jpe: Мне не нужна интерактивная оболочка. Я хочу использовать эту процедуру только тогда, когда это необходимо. –