【问题标题】:What are the real-time applications of `const volatile` type qualifier?`const volatile` 类型限定符的实时应用有哪些?
【发布时间】:2016-06-09 11:41:12
【问题描述】:

const volatile类型限定符的实时应用有哪些?在哪种情况下会使用它。我知道volatile关键字和const限定词的应用,但是我不明白const volatile一起的用法。请分享你的想法。

【问题讨论】:

  • volatileconst 限定符都与实时无关。
  • @Olaf - 也许他的意思是“真实世界”?
  • 这些限定词一起使用有三种情况;这些并没有真正在“重复”中得到解决(即使答案适用,这也不是真正的重复)。
  • @Clifford:猜测。关于 RT 的含义有太多的困惑。这个词甚至在广告中被误用。我们不是千里眼。

标签: c embedded


【解决方案1】:

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;
    

请注意,每种情况下的类型限定符是:

  • volatile* const - 可变易失数据的常量地址。
  • const volatile - 只读易失性数据。
  • const volatile* const - 只读易失性数据的常量地址。

Michael Barr 的 Embedded.com 文章 Combining C's volatile and const keywords 中提供了这些用法的完整描述

【讨论】:

    【解决方案2】:

    C 标准(ISO/IEC 9899:2011 §6.7.3 类型限定符)举了一个例子:

    示例 1 声明的对象

    extern const volatile int real_time_clock;
    

    可由硬件修改,但不能分配、递增或递减。

    这告诉 C 编译器,虽然程序不能修改实时时钟,但实时时钟可以改变,因此在优化引用它的代码时必须谨慎对待。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2020-06-09
      • 2012-12-28
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 2021-10-18
      相关资源
      最近更新 更多