串口sysbuffer outSize超过fconfigure指定的值

问题描述 投票:0回答:1

如果我打开一个串口:

% set serial_com6 [open com6 r+]
file1a21465b4a0

并设置其outSizeinSize通过

% 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,我在Scilab / ScosLab中使用Tcl 8.5

P.S.2。我可能刚刚找到了解决方案。来自here

%fconfigure $serial_com6 -buffersize
4096

给我最大缓冲区大小,我也可以设置它:

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

显然,Windows不使用sysbuffer,或者它们指向两个我不理解的不同的东西。

serial-port tcl buffer buffer-overflow serial-communication
1个回答
1
投票

虽然Tcl可以请求在串行端口上更改设置,但实际上由OS来更改它们:它可以自由地约束值,因为它认为合适(或抛出错误)。您需要查看the Windows documentation实际可以设置的值(它不是便携式设置之一)。

-buffersize选项控制通道系统通用层中Tcl自己的输出缓冲区的大小,而不是操作系统级别的任何内容;在-buffering full模式下,它会在写出之前尝试累积(至少)那么多字节。您可能不希望对串行端口使用完全缓冲,因为它的速度有多慢。您可能希望使用非阻塞串行端口(-blocking 0)并运行事件循环:然后Tcl将输出流出到串口,尽可能快地在后台流动(或者您可以使用可写的fileevent来获取更多控制)。

© www.soinside.com 2019 - 2024. All rights reserved.