指针如何允许硬件访问

How do pointers allow Hardware access?

本文关键字:访问 硬件 何允许 指针      更新时间:2023-10-16

C中的指针非常强大,看起来很高效。但是,使用指针怎么能让你访问硬件呢?

我的想法是将指针的值设置为等于硬件的相关对象,然后通过指针对其进行操作。但是,如果你已经有足够的权限访问硬件的对象和属性,可以在上面使用指针,那么指针在哪里发挥作用呢?也许我想象出了什么不对劲?

我在7号窗户上跑步。

一个基本的例子,以及为什么需要指针来操作硬件属性的解释将是很好的。

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

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

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

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

现在指针是允许您访问内存位置的语言实体。你把一个地址插入一个指针,然后取消对它的引用,从(或到)那个地址读(或写)。因此,操作硬件的基本方式是通过指针访问其地址空间。