c - 如何直接与硬件交互?

标签 c windows controls hardware

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

最佳答案

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

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

  2. 大多数硬件制造驱动程序都是用 C 语言编写的,因为它提供了 它们具有更大的灵 active 。

  3. 它可以移植到多个 O/S,并且它们的代码变化很小 根据硬件要求。

我会简要介绍一下您所了解的有关控制硬件的知识,但这需要非常谨慎和技巧。因为有时做错了也会损坏硬件。

如何控制它们?

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

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

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

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

关于c - 如何直接与硬件交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25438437/

相关文章:

c - 需要有关简单 C 命令行参数的帮助

c - 为什么 main 函数总是要返回一些东西?

c++ - 这是将一个类的私有(private) HWND 分配给另一个类的正确方法吗?

c# - 覆盖 ComboBox 的 DrawItem

C# 重新排序/渲染多层面板

c - 这个C程序有什么错误?

.NET 秒表类限制

c++ - 将 NULL 分配给 x64 指针

c# - 如何在不实际调整大小的情况下触发 Control.Resize 事件?

c - 二维字符数组(将带有空格键的文本存储在一个字符数组元素中?)