Страница 1 из 1

Задержка при закрытии vi

Добавлено: 02 авг 2019, 23:06
Select
Всем привет,
покритикуйте пожалуйста мой код в целом, видимая проблема в задержке при закрытии :vi:

Re: Задержка при закрытии vi

Добавлено: 03 авг 2019, 00:03
IvanLis
Select писал(а):видимая проблема в задержке при закрытии :vi:
На мой взгляд проблема не только в этом, но и в неоднозначной последовательности записи и чтения.

Что касается задержки, то ...
чтение окончится по одному из трех тригеров:
1. timeout (10sec)
2. набрано в буфер 1000 byte
3. принят termination char

например у Вас устройство не отвечает, 2 и 3 отбрасываем
остается задержка 10 сек

Re: Задержка при закрытии vi

Добавлено: 03 авг 2019, 12:51
Select
Select писал(а):Всем привет,
покритикуйте пожалуйста мой код в целом, видимая проблема в задержке при закрытии :vi:
Логика заключается в передаче из стринга из п.2, что открывает в устройстве команду на передачу данных - считывание в буфер.
Насколько верно я понял совет:

Re: Задержка при закрытии vi

Добавлено: 04 авг 2019, 11:32
Select
В принципе разобрался

Re: Задержка при закрытии vi

Добавлено: 12 авг 2019, 22:47
Borjomy_1
Неправильно. Использование Bytes at Port это как использование goto в C.
Во-первых. при инициализации вы указали по умолчанию терминальный символ. Он там действительно есть?
Во-вторых. если при вычислении Bytes at Port, еще не пришла вся посылка, то вы некорректно ее примете. И дальше будет ерунда. Вам это надо???
Если используется терминальный символ, то для Visa Read указывается максимальный размер строки. Но приоритет за терминальным символом. Т.е функция читает строками и предварительно смотреть размер принятой посылки нет никакой необходимости. Просто указываете максимально возможный размер плюс запас, тогда гарантировано будет возвращена строка до терминального символа.