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

Problem with optimisation of volatiles

Hi there All,

I have a problem which seemed to be defying explanation, but I have come up with a theory. Could I possibly have some feedback on whether the following is likely, plausible, possible, untrue or downright rubbish?

If one reads the contents of a CAN or ADC chip register at a particular address, then the label volatile is placed upon that address to prevent the compiler optimising out repeat readings of the address. If one reads the contents of the address into a variable, then the compiler would automatically treat the contents of this variable with similar care.

Is it possible that there has been an oversight with statements where the contents of a variable depend on the contents of a volatile by way of an if statement, ie...

normal_var=volatile_var;

...is correctly optimised, but...

normal_var=voltile_var;
if (normal_var=0x00)
   {
   another_normal_var+=1;
   }

...is not correctly optimised all of the time, dependant on the surrounding code, unless normal_var itself is declared to be volatile?

For info - am using optimisation level...

OPTIMIZE(3,SPEED)

...and am using version...

C166 COMPILER V4.11

Any thoughts, or is any or all of the above thoughts and understanding way off the mark?


Yours (grateful for any input),


Richard.

Parents
  • hello,
    the question was not to proof by example that's work! It's clear that one should use Volatile declaration. About "when" and "how" one can read in many helps. The question was how it worked in this concrete case without this declaration and without "may be" or it was a miracle or luck and so on. I would hear it like , it works so because... or it has been read from the same memory location each time, because...
    I would't need common explanation which are clear for everybody, I would need it a little more deeper in the problem.
    Sorry, if somehow straight.
    With best wishes to all and thank you very much.
    S.

Reply
  • hello,
    the question was not to proof by example that's work! It's clear that one should use Volatile declaration. About "when" and "how" one can read in many helps. The question was how it worked in this concrete case without this declaration and without "may be" or it was a miracle or luck and so on. I would hear it like , it works so because... or it has been read from the same memory location each time, because...
    I would't need common explanation which are clear for everybody, I would need it a little more deeper in the problem.
    Sorry, if somehow straight.
    With best wishes to all and thank you very much.
    S.

Children
No data