Коллеги, поделитесь пожалуйста советами, как реализовать мою задачу на BASH-е с максимальной эффективностью и быстродействием ? Суть скрипта состоит в чтении _бинарного_ файла и передаче его содержимого в COM-порт, добавляя в процессе передачи управляющие двоичные коды. Данную задачу реализовал как смог:
#!/bin/bash
COUNTER=0
FILE=$1
FILESIZE=$(stat -c%s "$FILE");
echo -en "\xFE\xFE\xFE\xFE" > /dev/ttyUSB0 # Синхронизируем поток данных. После исполнения устройство готово принять старший байт адреса
while [ "$COUNTER" -lt $FILESIZE ]
do
let HR=COUNTER/256
let LR=COUNTER%256
hLR=`printf "%02X" $LR`
hHR=`printf "%02X" $HR`
hBT=`dd if=$FILE bs=1 count=1 skip=$COUNTER 2>/dev/null | hexdump -v -e '/1 "%02X"'`
echo -en "\xFF\x$hHR\x$hLR\xFF\x$hBT" > /dev/ttyUSB0 # Паттерн чтения/записи байта в адрес $hHR$hLR
let COUNTER=COUNTER+1
done
echo -en "\xFE" > /dev/ttyUSB0 # Перевести контроллер в состояние запрета записи данных
тапёра не бейте играет как умеет :))
P.S. Понимаю, что у меня производится много лишних и ненужных преобразований типа бинарные данные в текстовый HEX-формат, затем обратно в бинарные и т.д, что очень сильно тормозит обработку, но в силу редкого использования shell-а для меня затруднительно выбрать оптимальный путь.