Volatile type qualifier – Altera Nios II C2H Compiler User Manual
Page 59

Altera Corporation
9.1
3–19
November 2009
Nios II C2H Compiler User Guide
C-to-Hardware Mapping Reference
demonstrates another case of non equivalent pointers.
is similar to
, but a value is written to address
some_other_pointer
between the reads from address
(packed_data + i)
.
Example 3–12. Nonequivalent Pointers Due to Potential Aliasing
void nonequivalent_pointers(char *packed_data,
int *some_other_pointer,
int len)
{
int i = 0;
while (i < len)
{
char ms_nibble = *(packed_data + i) >> 4;
char ls_nibble;
*some_other_pointer = i;
ls_nibble = *(packed_data + i) & 0x0f;
...
}
}
In this code, the C2H Compiler cannot determine if
some_other_pointer
and
packed_data
overlap addresses (known
as aliasing), which would affect the result of the second evaluation of
*(packed_data + i)
. Therefore, the C2H Compiler creates a separate
master port for each dereference, creating a total of three master ports. For
details on how to inform the C2H Compiler that two pointers do not alias,
see section
“Pointer Aliasing” on page 3–32
Volatile Type Qualifier
The C2H Compiler does not consolidate or optimize pointers for
dereferenced types that use the
volatile
type qualifier. The
volatile
type qualifier forces the variable to be evaluated strictly according to the
rules of the language.
volatile
is normally used to access non-memory
peripherals, such as timers and communication devices.
1
The
volatile
type qualifier overrides the
_ _ restrict_ _
pointer qualifier. For further information, see