9

C 中的指针非常强大并且看起来很高效。但是如何使用指针可以让您访问硬件?

我的想法是将指针的值设置为等于硬件的关联对象,而不是通过指针来操作它。但是,如果您已经对硬件的对象和属性有足够的访问权限,可以在其上使用指针,那么指针在哪里发挥作用呢?也许我在想象有什么不对?

我在 Windows 7 上运行。

一个基本示例以及为什么需要指针来操作该硬件属性的解释会很棒。

4

3 回答 3

7

指针保存一个内存地址。并不是所有的内存寻址范围都单独指向 RAM 区域。内存地址有范围,一些范围映射到硬件寄存器。通过写入这些寄存器,我们可以访问硬件。当然,这也取决于哪个操作系统和哪个硬件。这是一个例子

于 2013-06-20T21:04:38.500 回答
7

在独立环境(如微控制器)中,没有内存管理单元的硬件平台(某些 ARM 微处理器)或不支持硬件保护的操作系统(如 DOS)指针使您可以通过以下方式对硬件进行原始访问内存映射 I/O的魔力。在 Windows 或 Linux(或几乎任何现代操作系统)等操作系统上运行的程序中的指针是虚拟地址空间中的指针。这些指针不允许您直接访问硬件。

内存映射 I/O 的工作方式是保留某些物理内存地址用于与系统中的设备通信。当访问属于设备的地址时,数据将被路由到设备的适当寄存器。在 x86 平台上,此转换由北桥完成。

于 2013-06-20T21:36:24.273 回答
2

大多数硬件都是内存映射的。这意味着它将一系列硬件寄存器(或其他硬件实体)公开为内存区域。可以像访问任何其他内存一样访问这些内存位置。您可以使用内存地址对其进行读取和写入 - 这些读取和写入使事情发生在硬件中。举个例子,对硬件寄存器(内存地址)的写入可能会导致 LED 亮起,或机器人电机开始转动。所有硬件操作都通过此类内存映射寄存器等公开。

现在,指针是允许您访问内存位置的语言实体。您将地址粘贴到指针中并取消引用它以从(或向)该地址读取(或写入)。所以,基本上你操作硬件的方式是通过指针访问它的地址空间。

于 2013-06-20T21:28:55.703 回答