串口通信缓冲区大小上限是多少?默认是512字节。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口通信缓冲区大小上限是多少?默认是512字节。相关的知识,希望对你有一定的参考价值。

int MAX_SIZE = 512;
m_ctrlComm.SetInBufferSize(MAX_SIZE); //设置输入缓冲区大小
就是这个MAX_SIZE最大可以设置多少?并且能发送成功,默认不设置的话是512字节。
还有m_ctrlComm.SetOutBufferSize(MAX_SIZE); //设置输出缓冲区大小

2.8G(理论值,实际达不到。),也就是32位CPU所能管理最大的内存值。
WINDOWS 串口通信API 没有对输入、输出缓冲的大小做硬性规定, 你可以自己根据需要分配大小。
SetInBufferSize、SetOutBufferSize最终将调用SetupComm(WINAPI)设置缓冲大小,你可以参考SetupComm的MSDN文档
参考技术A WINDOWS 串口通信API 没有对输入、输出缓冲的大小做硬性规定, 你可以自己根据需要分配大小

SetInBufferSize、SetOutBufferSize最终将调用SetupComm(WINAPI)设置缓冲大小,你可以参考SetupComm的MSDN文档

StreamWriter 的默认缓冲区大小是多少

【中文标题】StreamWriter 的默认缓冲区大小是多少【英文标题】:What is the default buffer size for StreamWriter 【发布时间】:2015-06-07 09:31:09 【问题描述】:

对于public StreamWriter(Stream stream) 构造函数,MSDN 表示

为指定的 StreamWriter 类初始化一个新实例 使用 UTF-8 编码和默认缓冲区大小进行流式传输。

我想使用其他构造函数重载之一,但想使用默认缓冲区大小。默认缓冲区大小是多少? MSDN 没有说任何地方。 Rubens Farias' 回答 here 说它是“4 KiB”(不管这意味着什么......我猜是 KB?)但没有链接可以证实这一点。

【问题讨论】:

This post 建议默认缓冲区大小为 1024 字节。 啊当文档失败时,反编译。我总是忘记这一点!谢谢:) Here it is @SriramSakthivel -- 谢谢! @roryap: 1KiB = 1024B(而不是 1KB,这可能意味着 1000B 或 1024B)。见***.com/a/1200253/18192。 【参考方案1】:

啊,当文档失败时,反编译。我总是忘记这一点!

好吧,不要那样做。没有必要了,你可以看看微软程序员写的实际源代码。总比反编译的代码好,它有 cmets。

访问Reference Source 网站。它大约在一年前更新,现在它有一个非常流畅的浏览器界面,实际上比反编译器更快。只需在搜索框中键入 StreamWriter。最多花费你十几秒钟的时间来发现:

    // For UTF-8, the values of 1K for the default buffer size and 4K for the
    // file stream buffer size are reasonable & give very reasonable
    // performance for in terms of construction time for the StreamWriter and
    // write perf.  Note that for UTF-8, we end up allocating a 4K byte buffer,
    // which means we take advantage of adaptive buffering code.
    // The performance using UnicodeEncoding is acceptable.  
    internal const int DefaultBufferSize = 1024;   // char[]
    private const int DefaultFileStreamBufferSize = 4096;

因此,StreamWriter 的默认值为 1024 个字符。而且,如果您写入文件而不是流,那么会有一个带有 4096 字节缓冲区的 FileStream,无法更改。它确实暴露了 cmets 的一个经典问题,它们有不被维护和不匹配代码的诀窍。关于“自适应缓冲”的讨论实际上并没有实现。 KiB 是一种有 1024 个脚趾的动物,而不是 1000 个。

【讨论】:

重新 4096 字节的文件缓冲区。如果您使用正确的 FileStream 构造函数,您可以更改它。然后,您可以将该 FileStream 传递给 StreamWriter 构造函数。 我还没有测试是否有必要将较大的缓冲区大小传递给两个构造函数(StreamWriter 和 FileStream),或者是否足以将其仅传递给 FileStream 之一。但我看不出将相同的大尺寸传递给两者有什么害处。

以上是关于串口通信缓冲区大小上限是多少?默认是512字节。的主要内容,如果未能解决你的问题,请参考以下文章

SGI-STL简记-序列容器(deque)

单片机串口通信的带宽是多少

stm32 串口发送数组 cpu可以工作吗

udp Socket 发送缓冲区 最大可以为多大

512*512 256色值的索引图像的大小是多少?

ARM9 串口fifo大小