volatile.cpp

来自「Think in C++ 2nd」· C++ 代码 · 共 42 行

CPP
42
字号
//: C08:Volatile.cpp

// From Thinking in C++, 2nd Edition

// Available at http://www.BruceEckel.com

// (c) Bruce Eckel 1999

// Copyright notice in Copyright.txt

// The volatile keyword



class Comm {

  const volatile unsigned char byte;

  volatile unsigned char flag;

  static const int bufsize = 100;

  unsigned char buf[bufsize];

  int index;

public:

  Comm();

  void isr() volatile;

  char read(int index) const;

};



Comm::Comm() : index(0), byte(0), flag(0) {}



// Only a demo; won't actually work

// as an interrupt service routine:

void Comm::isr() volatile {

  if(flag) flag = 0;

  buf[index++] = byte;

  // Wrap to beginning of buffer:

  if(index >= bufsize) index = 0;

}



char Comm::read(int index) const {

  if(index < 0 || index >= bufsize)

    return 0;

  return buf[index];

}



int main() {

  volatile Comm Port;

  Port.isr(); // OK

//!  Port.read(0); // Error, read() not volatile

} ///:~

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?