微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C语言中的变量可以既是常量(const)又是易失(volatile)?

是的,可以同时使用常量和易失性。 volatileconst 关键字的最大用途之一是在访问 GPIO 寄存器时。 在 GPIO 的情况下,如果它被配置为输入,它的值可以通过“外部因素”(如果开关或任何输出设备连接到 GPIO)来更改。 在这种情况下, volatile 起着重要作用,并确保编译器始终从 GPIO 地址读取值并避免做出任何假设。
使用 volatile 关键字后,无论何时访问端口,都将获得正确的值,但这里还有一个问题,因为指针不是 const 类型,因此可能是程序更改了指针的指向地址。 所以必须用 volatile 关键字创建一个常量指针。

声明的语法:

int volatile * const PortRegister;

如何阅读以上声明:

int volatile * const PortRegister;
 |     |     |   |    |
 |     |     |   |    +------> PortRegister is a
 |     |     |   +-----------> constant
 |     |     +---------------> pointer to a
 |     +---------------------> volatile
 +---------------------------> integer

考虑下面一个简单的例子:

#define PORTX 0x00020000 // Address of the GPIO
uint32_t volatile * const pcPortReg = (uint32_t *) PORTX;

pcPortReg 是一个指向易失性无符号整数的常量指针,使用 *pcPortReg 可以访问内存映射寄存器。

*pcPortReg = value; // Write value to the port
value = *pcPortReg; // Read value from the port

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐