指针如何允许硬件访问
How do pointers allow Hardware access?
C中的指针非常强大,看起来很高效。但是,使用指针怎么能让你访问硬件呢?
我的想法是将指针的值设置为等于硬件的相关对象,然后通过指针对其进行操作。但是,如果你已经有足够的权限访问硬件的对象和属性,可以在上面使用指针,那么指针在哪里发挥作用呢?也许我想象出了什么不对劲?
我在7号窗户上跑步。
一个基本的例子,以及为什么需要指针来操作硬件属性的解释将是很好的。
指针包含一个内存地址。并不是所有的存储器寻址范围都指向RAM区域。内存地址有范围,有些范围映射到硬件寄存器。通过写入这些寄存器,我们可以访问硬件。当然,这也取决于哪种操作系统和哪种硬件。下面是一个例子。
在独立环境(如微控制器)中具有内存管理单元(某些ARM微处理器)或操作系统不支持硬件保护(如DOS)指针提供对硬件的原始访问通过内存映射I/O的魔力。在操作上运行的程序中的指针像Windows或Linux(或几乎任何现代操作系统)这样的系统是虚拟地址空间。这些指针不允许您直接访问硬件
内存映射I/O的工作方式是某些物理内存地址保留用于与系统中的设备通信。当属于设备被访问,数据被路由到设备的适当寄存器。在x86上这个翻译是由北桥完成的。
大多数硬件都是内存映射的。这意味着它公开了一系列硬件寄存器(或其他硬件实体)作为内存区域。这些存储器位置可以像任何其他存储器一样被访问。您可以使用内存地址对其进行读写操作,而这些读写操作可以在硬件中实现。举个例子,对硬件寄存器(存储器地址)的写入可能会导致LED亮起,或机器人电机开始转动。所有硬件操作都是通过这种存储器映射寄存器等暴露的。
现在指针是允许您访问内存位置的语言实体。你把一个地址插入一个指针,然后取消对它的引用,从(或到)那个地址读(或写)。因此,操作硬件的基本方式是通过指针访问其地址空间。
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何访问 QNX 中的硬件?
- 如何从C或C 语言级别安全访问内存映射的硬件寄存器
- 如何拦截 I/O 端口访问以虚拟化硬件
- 如何在没有硬件抽象层的情况下直接访问 x64 硬件
- 当我访问数组的元素时,在硬件级别会发生什么
- 指针如何允许硬件访问
- 与g++-7.0中的constexpr函数不同的行为/访问硬件
- 我如何在Qt访问和控制硬件
- 如何在Windows上使用c++访问底层硬件I/O函数
- 使用Python访问USB硬件(带有本地c++ API的压力传感器矩阵)