使用 (DR)STRACE 比较 Windows 程序执行

Using (DR)STRACE to compare Windows program execution

我在这里提出一个直接与 this issue 有关的问题 github for node-serialport。简而言之,过去在库的 v4.x 中正常工作的东西在库的 v6.x 中不再起作用。我认为这一定与库打开 COM 端口的方式(选项或其他)有关,我 怀疑 它在当前版本中人为地限制了通过 USB 传输的功率图书馆。

我写了最简单的脚本来重现问题(问题中发布的脚本)使用:

根据存储库维护者的建议,我研究并找到了一个名为 drstrace 的 windows 实用程序,它允许我捕获这些脚本中的每一个执行一段时间的日志(这些日志作为附件发布在所引用的问题中。

现在我被卡住了,因为我不知道如何制作 drstrace 日志的正面或反面,尽管我确信在比较这三个文件时差异可能很明显。我只是不太了解如何阅读 drstrace 日志和 windows 驱动程序和系统调用来突破。

我意识到在这里发布这个问题是一种绝望的行为,但我认为值得一试。希望很明显,我并没有缺乏自己追求这个的努力,在这一点上我只是在我的头上,并且可以使用帮助来取得进一步的进展。任何指导将不胜感激。最棒的是精通这种诊断水平的人,看看它并阅读茶叶。如果能回馈如此重要的开源库,那就太好了。

2017 年 11 月 10 日更新

我联系了 FTDI 支持人员询问:

I use the FT231X in many of my products. I need some help with understanding how the Windows FTDI driver manages power. More to the point, I'm hoping you can help me understand how to direct the driver to allow the full 500mA allowed by USB to be delivered to my product by a Windows computer.

回复是:

Just use our FT_Prog utility to set the max VBUS current to 500 mA:

This drive current becomes available after the FT231X enumerates.

我还没有尝试过这个建议,但我想与阅读本文的任何人分享。事实仍然是 node-serialport 6.0.4 行为不同于 node-serialport 4.0.7 行为和 pyserial 行为。

我阅读了更多关于 windows 驱动程序以及它们如何管理的信息,我只发现它与硬件制造商有关,我认为它不是串行端口本身的故障,因为它真正使用它的驱动程序self 它在该级别上没有添加任何额外内容。

我是 SerialPort 的贡献者,可以告诉您它只提供操作系统到节点的绑定,这意味着它不执行任何操作,它只为您提供 API 从微软那里阅读以下内容说你应该问你的硬件供应商

串行端口驱动程序中的电源管理(Windows CE 5.0)

Windows CE 5.0 发送反馈 串口驱动程序可以提供的最小电源管理是使用 HWPowerOff 函数将串口硬件置于其最低功耗状态,并使用 HWPowerOn 函数将串口硬件完全重新打开。这两个功能都是在下层实现的。除了这个最小的处理之外,串行端口驱动程序可以通过保持端口断电来更有效地节省电力,除非应用程序打开了串行端口。如果驱动程序不需要检测可移动串行端口设备的对接事件,则驱动程序可以更进一步,在没有应用程序使用该端口的情况下,从串行端口的通用异步接收器-发送器 (UART) 芯片中断开电源。 大多数串行端口硬件甚至可以在不向串行线路驱动器供电的情况下支持读取端口的输入线路。请查阅串行端口硬件的文档,以确定可以有选择地打开和关闭串行端口电路的哪些部分,以及哪些部分必须为各种使用条件供电。

来源: https://msdn.microsoft.com/en-us/library/aa447559.aspx

关于串行端口 v4 => 6 的变化

  • 新的流接口
  • 但是核心的端口开启方式没有变化
  • 打开端口的绑定也没有任何变化
  • node serialport 是用 c++ 编写的绑定的集合

这是您可以研究的另一种理论:

Windows 与 V6.x 交互可能会以不同方式与流量控制设置交互,这可能会导致您的设备以意外状态响应,从而导致测试失败。