windows - 500Hz以上串口数据记录

标签 windows visual-c++ serial-port embedded

您好,我正在尝试从串口读取一些数据并将其记录在硬盘中。我正在使用Visual C++ Express,并使用Windows窗体制作了一个应用程序。

该程序基本上每 t 秒发送一个字节(“s”),这会触发连接到串行端口的设备发回 3 个字节。现在波特率是38400bps。时间t由Visual C++的定时器类控制。

我遇到的问题是,如果我将计时器的滴答时间设置为 1ms,则数据不是每 1ms 记录一次,而是每 15ms 左右记录一次。我读到也许计时器的分辨率设置为 15ms,但不确定。无论如何,如何让计时器事件每 1 毫秒触发一次,而不是每 15 毫秒触发一次?或者有没有其他方法可以更快地读取串口数据?我正在寻找 500Hz 或更高的频率。

连接到串行端口的设备是一个32位微 Controller ,我也可以控制程序,因此我可以轻松地更改它,但只是无法找到另一种方式来进行此传输。

感谢您的帮助!

最佳答案

Windows 不是实时操作系统,无论您的计时器设置为什么时间段,都不能保证它会得到一致的维护。此外,操作系统时钟分辨率取决于硬件供应商的 HAL 实现,并且因系统而异。多媒体定时器的分辨率更高,但实时性仍然没有保证。

除此之外,您还需要对要达到的时间进行一些算术。在 38400,N,8,1 中,您最多只能在 1 毫秒内传输 3.84 个字符,因此无论如何您的时间都很紧张,因为您正在 ping 一个字符并期望返回 3 个字符。如果不增加比特率,您肯定无法更快。

更好的解决方案是让 PC 主机向嵌入式目标发送一次所需的报告周期,然后让嵌入式目标执行自己的计时,以便它在每个周期自动发出数据,直到 PC 请求它停止或发送一个报告。不同时期。您的嵌入式系统更有能力维持硬实时约束。

或者,您可以简单地让设备执行采样并传输三个字符,其时间完全由三个字符的传输时间决定,并不断地传输数据。这将为您提供 781.25us (1280Hz) 的采样周期,无需 PC 进行任何触发,并且它将真正具有周期性且无抖动。如果您想要更快的采样率,只需增加比特率即可。

关于windows - 500Hz以上串口数据记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8340034/

相关文章:

c++ - 从控制台应用程序到 Windows 窗体 GUI 问题

.net - 'System::String^' 在 C++ 中是什么意思?

c++ - std::list 容器充满错误的常见原因

visual-c++ - SandcaSTLe、/doc 和非托管 C++

c - 与 RPi 的 RS-232 通信

c++ - 如何在 Windows 和 Linux 之间移植的 visual studio C++ 中进行串口编程?

windows - Windows 的哪一部分加载 mscoree.dll?

windows - 无法在项目 hadoop-hdfs :1. 上执行目标 maven maven-antrun-plugin : An Ant BuildException around Ant part hadoop-hdfsproject hadoop-hdfs:? 7

windows - 如何设置在启动 perfmon 时运行的默认计数器?

c++ - 两台计算机与 2 个 c++ 程序之间的通信