SPRU514Z July 2001 – October 2023 SM320F28335-EP
The compiler analyzes data flow to avoid memory accesses whenever possible. If you have code that depends on memory accesses exactly as written in the C/C++ code, you must use the volatile keyword to identify these accesses. The compiler does not optimize out any references to volatile variables.
In the following example, the loop waits for a location to be read as 0xFF:
unsigned int *ctrl;
while (*ctrl !=0xFF);
In this example, *ctrl is a loop-invariant expression, so the loop is optimized down to a single memory read. To correct this, declare ctrl as:
volatile unsigned int *ctrl;