как замедлить вставку текста в последовательный терминал?

вы можете указать источник файла и использовать значение переменной

. /etc/os-release
echo $ID
echo $VERSION

или попробуйтеawk

awk -F= '$1=="ID" { print $2 ;}' /etc/os-release

где

  • -F=указать awk использовать = в качестве разделителя
  • $1=="ID"фильтр по ID
  • { print $2 ;}распечатать значение
3
28.02.2020, 13:28
2 ответа

Я обнаружил, что screenимеет функцию медленной пасты!https://gist.github.com/jandahl/8436cd6a99d56efd9ff4

  1. экран установки

  2. создайте файл.screenrc, если у вас его нет:


startup_message off

hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'

defslowpaste 20 ## It is the value to the left that is the central one for your happiness
  • если у вас уже есть .screenrc, просто добавьте последнюю строку :defslowpaste 20

  1. начальный экран с соответствующим последовательным портом (raspberry pi, первое поколение, по умолчанию 115200 бод ):screen /dev/ttyUSB3 115200

  2. Удачи!

1
28.04.2021, 23:21

I can only guess the paste function of my PC (xubuntu 16.04) is pushing the data too fast (the serial baud is 115200).

Это предположение неверно. Драйвер терминала всегда будет записывать данные из своей очереди вывода с настроенной скоростью передачи данных, а write(2)на терминал либо возвращает короткий счет, либо блокируется, если в очереди вывода больше нет места (или вместо блокировки вернет -1 и установит errnoв EAGAIN, если терминал установлен в неблокирующий -режим ). Последовательный драйвер не будет «адаптировать» скорость передачи данных к тому, сколько данных он должен передать.

Вы можете легко проверить это, если у вас есть две машины, которые можно соединить через последовательную линию (или вы можете соединить одну и ту же машину саму с собой, например. 2 USB ->последовательные адаптеры, два последовательных порта, подключенные нуль-модемным кабелем -и т. д. ).

Напр. если /dev/ttyUSB0на машине A подключен к /dev/ttyUSB1на машине B:

На машине А:

# stty -F /dev/ttyUSB0 speed 50 raw; cat /dev/ttyUSB0

На машине B:

stty -F /dev/ttyUSB1 speed 50 raw opost onlcr; cat >/dev/ttyUSB1
<paste>

Теперь вставьте какой-нибудь большой текст в командную строку на машине Bи посмотрите, как он плавно перетекает со скоростью ~5 символов в секунду на машине A.

Настоящая проблема заключается в программаторах, которые игнорируют статус выхода write(2)или предполагают, что, хотя он может возвращать ошибку, он никогда не вернет счетчик меньше требуемого. Решение состоит в том, чтобы починить или прекратить использование их хлама, а не использовать ленточные -вспомогательные средства, которые не являются ни надежными, ни очень эффективными.

Кроме того, если кабель/соединения плохие/шумные, вам придется снизить скорость передачи данных, иначе данные превратятся в двоичный мусор, а некоторые последовательные адаптеры -могут сильно заблокироваться и их придется сбрасывать.

Скорость передачи также должна быть снижена, если одно из устройств не может работать со своей номинальной скоростью передачи данных и не поддерживает какое-либо аппаратное или программное управление потоком (xon/xoff ).

1
28.04.2021, 23:21

Теги

Похожие вопросы