【问题标题】:How to interact directly with hardware?如何直接与硬件交互?
【发布时间】:2014-10-15 19:13:57
【问题描述】:

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

【问题讨论】:

  • 运行的是哪个系统?你懂什么语言?
  • 我使用的是 32 位 Windows 8.1 Professional,我会一点 C、Visual Basic 和 Java。我愿意学习其他语言,更多这些语言,无论如何。
  • 我无法轻松找到有关您的笔记本电脑型号使用的键盘的任何信息。官方的公开规格文件并没有透露太多信息。我将从一个更简单的任务开始,您可以轻松地在网上找到材料,以便人们能够帮助您。对许多程序员来说,深入研究底层的东西是令人兴奋的:-)

标签: c windows controls hardware


【解决方案1】:

我不知道您控制硬件不同组件的确切目的是什么。我会推荐你​​使用语言 C 和汇编语言。推荐C的原因有:

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

  2. 大多数硬件制造商驱动程序都是用 C 编写的,因为它提供 他们更灵活。

  3. 它可以移植到多个操作系统并且它们几乎不需要更改代码 根据硬件要求。

我会简要介绍一下您对控制硬件的了解,但这需要非常小心和技巧。因为有时做错也会损坏硬件。

如何控制它们?

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

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

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

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

【讨论】:

  • 好的,非常感谢!这完美地回答了我的问题,但给了我另一个问题。我可以使用什么来读取和写入这些地址空间?我可以使用 WinHex 或...之类的东西吗?另外,我在 Intel i5-4200u 上使用 Windows 8.1 Professional 32 位(是的,我知道它是 64 位处理器,我不小心安装了 32 位版本的 Windows)。
  • 这些端口非常重要,因此大部分由操作系统处理。轻松提供读取访问权限,而不是写入端口是困难的。有两种方法可以通过驱动程序来控制它,另一种是从启动到创建自己的操作系统。
猜你喜欢
  • 2013-07-07
  • 1970-01-01
  • 2022-06-20
  • 2011-10-06
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多