据我所知,PS/2 键盘是中断驱动的,而 USB 是轮询的。通常,在 Windows 上为 PS/2 键盘分配了 IRQ_1。
我不是硬件专家,但乍一看似乎 PS/2 键盘更高效。所以这里是我的问题:
USB 需要主动轮询。因此,CPU 必须将其某些周期专用于扫描按键,这意味着可用于其他任务的周期数较少。这会导致 CPU 频率上升,因此功耗会更高。一个有趣的案例:假设我们将两台相同的计算机并排放置,一台使用 PS/2 键盘,另一台使用相同型号的 USB 键盘,我们将它们打开一整天。如果我们白天只按一个键,PS/2 键盘所需的 CPU 时间比 USB 键盘低得多。因此,在具有极端动态频率缩放的 CPU 中,USB 键盘总体上需要更多功率。另外,USB协议需要管理多个设备,
这些是我在 #2 中提出的考虑因素,考虑到整个 PC,而不仅仅是键盘从 5 V 输入中吸收了多少。
看来轮询的东西只能到USB 2.0,根据维基百科,USB 3.0摆脱了轮询:
提高总线利用率 - 添加了一项新功能(使用数据包 NRDY 和 ERDY),让设备异步通知主机其准备就绪(无需轮询)
(到目前为止,USB 3.0 键盘很少见。我只知道今年在COMPUTEX 上展示的技嘉键盘,我怀疑它使用 USB 3.0 …
我是一名程序员,写得非常快(虽然不是特别快)。在我工作的戴尔笔记本电脑中,我经常遇到两个错误,我怀疑这与一些底层的 Windows 键盘驱动程序有关(“底层”,因为这些错误也发生在完全不同品牌的键盘上)。它不是键盘的物理属性,我试过更换键盘本身。两个USB键盘,顺便说一句。
这些是奇怪的问题:
Ctrl当我快速键入时,密钥会挂起 - 但它不会在物理上挂起 - “释放密钥代码”似乎永远不会到达操作系统。这种情况经常发生,比如我在该区域时每 20 到 120 秒发生一次。解决的方法是1)实现控制键被系统认为是按下的,2)按下右键再 Ctrl松开。左键Ctrl不能修复错误(我知道他们发送不同的扫描码)。
在Shift关键的“挂起”以同样的方式,但也没有办法得到它解锁按下并松开Shift键,似乎有一个内部计数器,它挂起。这种情况可能每 10 到 20 天发生一次。要解决我 1) 必须意识到 Shift键处于按下状态(无法使用Shift按下的键工作 ,简单地在 Explorer.exe 中选择另一个文件变得不可能,更不用说尝试在 Eclipse 中编写代码)并修复我 2) 运行我为 AutoHotkey 编写的脚本,该脚本发送{SHIFT UP}到系统。在我写脚本之前,我不得不重新启动计算机......
我对此感到恼火。是什么原因造成的,我该如何解决这些问题?
编辑:这是我的 AHK 文件:
RShift::LShift
^!+r::
; Show a black "splash" to reveal script reloading.
Run %windir%\system32\cmd.exe /c
Reload
return
^!+e::
Edit
return
; Send shift-up.
#^!+s::
; Send shift-up to "fix" my office laptop …Run Code Online (Sandbox Code Playgroud)