概括
我正在通过 USB 端口读取串行数据,当笔记本电脑正在充电时,COM 端口每秒接收大约 60 次更新,而当笔记本电脑未充电时,COM 端口每秒接收大约 1 次更新。
背景(我不确定哪些信息有用)
我正在做一个项目,其中一组传感器与微处理器通信,微处理器连接到笔记本电脑。因为我需要数据用于实时控制,所以笔记本电脑从微处理器接收信息的速率很重要。
通常情况下,我每秒可以从微处理器获得大约 60 次更新。但是,我经常会遇到无缘无故的减速。今天发生了一次减速,我意识到当笔记本电脑没有主动充电时,每秒的更新速度非常慢,但当笔记本电脑充电时,它会全速接收更新。
请注意,微处理器不是由笔记本电脑供电。
编辑1:我的电源计划设置为平衡。
编辑 2:我做了以下更改以尝试提高性能
- 我将关键流程设置为实时优先级
- 将我的电源计划设置为高性能
- 我将数据快速输出到控制台窗口,因此我减少了控制台打印
- 我禁用了 USB 选择性暂停
- 之前,我已将 COM 端口延迟计时器更改为 1 毫秒,并将接收(字节)更改为 128,以尝试修复此设备的通信问题。
我以为这些已经解决了问题但运行几分钟后,速度再次变慢。
查看任务管理器,当程序正常运行时,CPU 使用率约为 50%,内存使用率约为 50%。当速度变慢时,CPU 利用率下降到 25% 左右,内存使用率保持不变。
任务管理器中显示的线程和句柄数量似乎随着时间的推移稳步增加,最多约为 4000 个线程和 98000 个句柄。当我关闭程序时,线程数下降到约 3000 个,句柄数下降到约 90,000 个。
编辑3:
我进入 BIOS,将 Intel Speedstep 改为禁用,将 C 状态控制改为禁用。这似乎没有解决任何问题。我按照这个网页的建议做了这件事:http://smallbusiness.chron.com/prevent-drops-cpu-speed-70828.html
编辑 4:我使用 Docklight 确认微处理器发送信息的速度足够快。所以问题肯定出在笔记本电脑上