const volatile
类型限定符的实时应用是什么?在哪种情况下,人们会使用它。我知道volatile
关键字&的应用程序const
限定符,但我不理解const volatile
的使用情况。请分享你的想法。
答案 0 :(得分:3)
const
和volatile
可以通过三种方式组合,以达到不同且有用的效果。例子:
声明硬件寄存器的常量地址:
uint8_t volatile* const p_led_reg = (uint8_t *) 0x80000;
声明一个只读的处理器间共享内存,其他处理器是编写器:
int const volatile comm_flag;
uint8_t const volatile comm_buffer[BUFFER_SIZE];
声明只读硬件寄存器:
uint8_t const volatile* const p_latch_reg = (uint8_t *) 0x10000000;
请注意,每种情况下的类型限定符都是:
volatile* const
- 变量易失性数据的常量地址。const volatile
- 只读易失性数据。const volatile* const
- 只读易失性数据的常量地址。Michael Barr的Embedded.com文章Combining C's volatile and const keywords
提供了对这些用法的完整描述。答案 1 :(得分:1)
C标准(ISO / IEC 9899:2011§6.7.3类型限定符)给出了一个例子:
示例1声明的对象
extern const volatile int real_time_clock;
可以由硬件修改,但不能分配,递增或递减。
这告诉C编译器虽然程序不能修改实时时钟,但实时时钟可以改变,因此在优化引用它的代码时必须谨慎对待。