Difference between revisions of "Const and volatile type qualifiers"
From Teknologisk videncenter
m |
m (→Example 1) |
||
Line 6: | Line 6: | ||
=Memorymapped access to a register= | =Memorymapped access to a register= | ||
==Example 1== | ==Example 1== | ||
− | In the example below the register 32 bit register located at address 0x40000 can be accessed through the | + | In the example below the register 32 bit register located in memory at address 0x40000 can be accessed through the uartreg pointer. |
<source lang=c> | <source lang=c> | ||
Line 13: | Line 13: | ||
*uartreg |= 0x80881119; | *uartreg |= 0x80881119; | ||
</source> | </source> | ||
+ | |||
=Links= | =Links= | ||
*[http://publications.gbdirect.co.uk/c_book/chapter8/const_and_volatile.html Const and volatile] | *[http://publications.gbdirect.co.uk/c_book/chapter8/const_and_volatile.html Const and volatile] |
Revision as of 11:05, 31 August 2011
const
const means that something is not modifiable, so a data object that is declared with const as a part of its type specification must not be assigned to in any way during the run of a program.
volatile
The use of volatile ensures that the compiler always carries out the memory accesses, rather than optimizing them out (for example if the access is in a loop).
Memorymapped access to a register
Example 1
In the example below the register 32 bit register located in memory at address 0x40000 can be accessed through the uartreg pointer.
unsigned int volatile * const uartreg = (unsigned int *) 0x40000;
*uartreg |= 0x80881119;