指针如何允许硬件访问?

时间:2013-06-20 20:59:23

标签: c++ c pointers

C中的指针非常强大且效率很高。但是如何使用指针可以访问硬件?

我对此的想法是将指针的值设置为等于硬件的关联对象,而不是通过指针操作它。但是,如果你已经有足够的访问硬件的对象和属性来使用指针,指针在哪里发挥作用?也许我想象一些错误的东西?

我在Windows 7上运行。

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:7)

在独立环境(如微控制器)中,硬件平台没有 拥有Memory Management Unit(某些ARM微处理器)或操作系统 不支持硬件保护(如DOS)指针为您提供硬件的原始访问 通过memory mapped I/O的魔力。程序中运行的指针 像Windows或Linux(或几乎任何现代操作系统)这样的系统都是指针 一个virtual address space。这些指针不允许您直接访问 硬件

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

答案 2 :(得分:2)

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

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