home *** CD-ROM | disk | FTP | other *** search
- //: 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
- } ///:~
-