gpt4 book ai didi

c++ - 如何从 C 或 C++ 语言级别安全地访问内存映射硬件寄存器?

转载 作者:太空狗 更新时间:2023-10-29 23:20:25 25 4
gpt4 key购买 nike

在 C 和 C++ 中,我通常使用众所周知的模式访问内存映射硬件寄存器:

typedef unsigned int uint32_t;
*((volatile uint32_t*)0xABCDEDCB) = value;

据我所知,C 或 C++ 标准唯一保证的是对 volatile 变量的访问严格按照抽象机的规则求值。

  1. 我如何确定编译器不会为 32 位处理器的访问生成撕裂存储?例如,允许编译器发出两个 16 位存储而不是一个 32 位存储,不是吗?
  2. gcc在这方面有什么保证吗?

最佳答案

在谈到 MCU 时,据我所知并没有这样的保证。更重要的是,访问硬件寄存器的每种情况都可能是特定于设备的,并且通常可能有自己的序列、规则和/或汇编指令集。它也取决于编译器的实现。这里唯一对我有用的是阅读有关具体设备/编译器的数据表并按照示例进行操作。

关于c++ - 如何从 C 或 C++ 语言级别安全地访问内存映射硬件寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41190028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com