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

Writing to ACC with Code Optimization Level-9

This article from Keil's support knowledge database shows that one can directly write to ACC from C51 code.

http://www.keil.com/support/docs/1619.htm

I would like to know if there are any rules when writing to ACC from C code. I have noticed that the following line in my code was entirely commented out when I chose Code Optimization Level-9.


unsigned char data uDataIndex, uDataArray[5];
void main() {
   .
   .
   ACC=uDataArray[uDataIndex%5];
   .
}

Why would a compiler do this?

Parents
  • "Why would a compiler do this?"

    Why would a 'C' programmer want to do this?
    You would not be able to guarantee that your value would still be there for use by any other 'C' statement!

    In general, if you just write to a location and never read from that location, what's the point in writing to it in the 1st place?!
    This is precisely what the compiler thinks - so it optimises-out the apparently useless code.
    This is one of the commonest optimisations found in almost every optimising compiler.
    To prevent it, try the volatile keyword.

Reply
  • "Why would a compiler do this?"

    Why would a 'C' programmer want to do this?
    You would not be able to guarantee that your value would still be there for use by any other 'C' statement!

    In general, if you just write to a location and never read from that location, what's the point in writing to it in the 1st place?!
    This is precisely what the compiler thinks - so it optimises-out the apparently useless code.
    This is one of the commonest optimisations found in almost every optimising compiler.
    To prevent it, try the volatile keyword.

Children
  • Why would a 'C' programmer want to do this?
    To get the parity bit. In fact, this is the only purpose for writing to ACC directly from 'C'.

    You would not be able to guarantee that your value would still be there for use by any other 'C' statement!

    Well said!