如果我打开一个串口:
% 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,我在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
,或者它们指向两个我不理解的不同的东西。
虽然Tcl可以请求在串行端口上更改设置,但实际上由OS来更改它们:它可以自由地约束值,因为它认为合适(或抛出错误)。您需要查看the Windows documentation实际可以设置的值(它不是便携式设置之一)。
-buffersize
选项控制通道系统通用层中Tcl自己的输出缓冲区的大小,而不是操作系统级别的任何内容;在-buffering full
模式下,它会在写出之前尝试累积(至少)那么多字节。您可能不希望对串行端口使用完全缓冲,因为它的速度有多慢。您可能希望使用非阻塞串行端口(-blocking 0
)并运行事件循环:然后Tcl将输出流出到串口,尽可能快地在后台流动(或者您可以使用可写的fileevent
来获取更多控制)。