Последовательный порт sysbuffer outSize превышает значение, указанное в fconfigure. - PullRequest
0 голосов
/ 13 марта 2019

Если я открою последовательный порт:

% set serial_com6 [open com6 r+]
file1a21465b4a0

и установите его outSize и inSize через

% fconfigure $serial_com6 -sysbuffer {512 512}

пока все выглядит нормально:

% fconfigure $serial_com6 -sysbuffer
512 512

кроме того, что я могу поставить около 4096 байтов без переполнения:

% for {set i 0} {$i < 4096} {incr i} {put $serial_com6 { }}
% fconfigure $serial_com6 -queue
0 4096

Это не делает сцену. Буду признателен, если вы поможете мне узнать, как я могу запросить / установить максимальный размер буфера ввода / вывода для последовательного порта.

P.S.1. Я забыл сказать, что моя ОС - Windows 10, и я использую Tcl 8.5 внутри Scilab / ScosLab

P.S.2. Возможно, я только что нашел решение. с здесь :

%fconfigure $serial_com6 -buffersize
4096

дает мне максимальный размер буфера, и я также могу установить его как:

% fconfigure $serial_com6 -buffersize 512
% fconfigure $serial_com6 -buffersize
512

Так что, очевидно, Windows не использует sysbuffer, или они указывают на две разные вещи, которые я не понимаю.

1 Ответ

1 голос
/ 13 марта 2019

Несмотря на то, что Tcl может запросить изменение настроек на последовательном порту, на самом деле ОС может их изменить: можно свободно ограничивать значения по своему усмотрению (или выдавать ошибки).Вам нужно будет просмотреть документацию Windows , чтобы узнать, какое значение на самом деле можно установить (это не одна из переносимых настроек).

Параметр -buffersize контролирует размер Tcl.собственный выходной буфер на общем уровне системы каналов, а не что-либо на уровне ОС;в режиме -buffering full он пытается накопить (по крайней мере) столько байтов, прежде чем записывать их.Вы, вероятно, не хотите использовать полную буферизацию для последовательного порта, учитывая, насколько он медленный.Возможно, вы захотите использовать неблокирующий последовательный порт (-blocking 0) и запустить цикл обработки событий: тогда Tcl будет транслировать ваш вывод на последовательный порт настолько быстро, насколько это возможно за кулисами (или вы можете использовать записываемый * 1008).* чтобы получить больше контроля).

...