`const volatile`类型限定符的实时应用是什么?

时间:2016-02-26 10:01:31

标签: c embedded

const volatile类型限定符的实时应用是什么?在哪种情况下,人们会使用它。我知道volatile关键字&的应用程序const限定符,但我不理解const volatile的使用情况。请分享你的想法。

2 个答案:

答案 0 :(得分:3)

constvolatile可以通过三种方式组合,以达到不同且有用的效果。例子:

  1. 声明硬件寄存器的常量地址:

    uint8_t volatile* const p_led_reg = (uint8_t *) 0x80000;
    
  2. 声明一个只读的处理器间共享内存,其他处理器是编写器:

    int const volatile comm_flag;
    
    uint8_t const volatile comm_buffer[BUFFER_SIZE];
    
  3. 声明只读硬件寄存器:

    uint8_t const volatile* const p_latch_reg = (uint8_t *) 0x10000000;
    
  4. 请注意,每种情况下的类型限定符都是:

    • 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编译器虽然程序不能修改实时时钟,但实时时钟可以改变,因此在优化引用它的代码时必须谨慎对待。