我知道这必须是可能的,因为有一些程序可以控制硬件(例如键盘上的 LED 灯或 CPU 风扇),我想知道我必须做什么才能与之交互这个硬件。
更具体地说,我想(作为一个学习项目)控制笔记本电脑(Sony Vaio Flip SVF14N13CXB)的背光键盘何时亮起。我想知道每个字母/段的 LED 是否可以单独控制,如果可以的话,做一些只点亮被按下区域的编码会很酷(例如,如果每个键都有自己的 LED,当我按下“W”键时,只有“W”键的 LED 会亮起)。我主要是作为一个学习项目来做这件事,但给出了一些例子,这样你就可以知道我想要什么。我希望你明白我在问什么。谢谢。
最佳答案
我不知道您控制硬件的不同组件的确切目的是什么。我建议您使用 C 语言和汇编语言。推荐C的理由有:
它直接在硬件抽象层上运行并给出 硬件的大部分控制。
大多数硬件制造驱动程序都是用 C 语言编写的,因为它提供了 它们具有更大的灵 active 。
它可以移植到多个 O/S,并且它们的代码变化很小 根据硬件要求。
我会简要介绍一下您所了解的有关控制硬件的知识,但这需要非常谨慎和技巧。因为有时做错了也会损坏硬件。
如何控制它们?
每个设备都是通过写入和读取其寄存器来控制的。大部分的 时间一个设备有多个寄存器,并且它们在连续的地址被访问, 在内存地址空间或 I/O 地址空间中。
虽然一些 CPU 制造商在他们的芯片中实现了单一地址空间,但其他制造商认为外围设备不同于内存,因此应该有一个单独的地址空间。 I/O 端口是驱动程序与许多设备通信的方式,至少在部分时间是这样。 I/O 指令在本质上高度依赖于处理器。因为它们处理处理器如何处理数据移入和移出的细节,所以很难隐藏系统之间的差异。
I/O 内存只是设备提供的类似 RAM 位置的区域 通过总线到处理器。该内存可用于多种用途, 例如保存视频数据或以太网数据包,以及实现设备寄存器 其行为就像 I/O 端口(即,它们具有与读取相关的副作用 并写下它们)。
访问 I/O 内存的方式取决于计算机体系结构、总线和 正在使用的设备,尽管原则在任何地方都是相同的。
关于c - 如何直接与硬件交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25438437/