如何直接与硬件交互?

Abb*_*ant 5 c windows hardware controls

我知道这是必须的,因为有些程序可以控制硬件(例如键盘上的LED灯或CPU风扇),而我想知道的是与该硬件进行交互所要做的事情。
更具体地说,我想(作为一个学习项目)控制笔记本电脑的(Sony Vaio Flip SVF14N13CXB)背光键盘何时点亮。我想了解每个字母/段的LED是否可以单独控制,如果可以的话,做一些编码仅照亮被按下的区域的代码就很酷(例如,如果每个键都有自己的LED,当我按“ W”键时,仅“ W”键的LED会点亮)。我主要是作为一个学习项目来做这件事,但是给出了例子,这样您就可以知道我想要什么。我希望你能理解我的要求。谢谢。

Vin*_*982 3

我不知道您控制硬件不同组件的确切目的是什么。我建议您选择 C ​​语言和汇编语言。推荐C的理由有:

  1. 它直接运行在硬件抽象层上,并给出硬件的大部分控制权。

  2. 大多数硬件制造驱动程序都是用 C 语言编写的,因为它赋予它们更大的灵活性。

  3. 它可移植到多个操作系统,并且它们根据硬件要求更改了很少的代码。

我将简要介绍您所了解的有关控制硬件的知识,但这需要极大的谨慎和技能。由于操作不当有时也会损坏硬件。

如何控制它们?

每个设备都通过写入和读取其寄存器来控制。大多数情况下,一个设备有多个寄存器,并且在连续的地址上访问它们,或者在内存地址空间中,或者在 I/O 地址空间中。

虽然一些 CPU 制造商在其芯片中实现了单一地址空间,但其他制造商认为外围设备与内存不同,因此应该有一个单独的地址空间。I/O 端口是驱动程序与许多设备(至少在部分时间)进行通信的方式。I/O 指令本质上是高度依赖处理器的。因为它们涉及处理器如何处理数据移入和移出的细节,所以很难隐藏系统之间的差异。

I/O 内存只是一个类似于 RAM 的位置区域,设备通过总线向处理器提供该区域。该存储器可用于多种用途,例如保存视频数据或以太​​网数据包,以及实现与 I/O 端口类似的设备寄存器(即,它们具有与读写相关的副作用)。

访问 I/O 内存的方式取决于计算机体系结构、总线和所使用的设备,尽管原理在任何地方都是相同的。