This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Cast converted volatile access not generating buggy code

I have a code snippet as given below

static unsigned int ticks;

void IRQ_SomeTimer(void) {
   ticks ++;
}

int main()
{
  int sav_ticks;
  sav_ticks = ticks;
  while (sav_ticks + TIME_TO_WAIT > *(volatile unsigned int *)&ticks);
  /* Do somethine here */
  return 0;
}

This compiles and runs on ARM-Mx targets up to optimization level O2, at optimization level O3 the code generated for

while (sav_ticks + TIME_TO_WAIT > *(volatile unsigned int *)&ticks);

is the same as the code generated for

while (sav_ticks + TIME_TO_WAIT > ticks);

Hence the code generated by O3 never comes out of the while loop!! Is this a BUG in Keil armcc(?) I am using Keil U-Vision (MDK ARM 4.73).

0