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

Selectively disable optimization on macro?

I have a macro:

#define EnterCritical()
  do {     SP++;     *(unsigned char idata *)(SP-1) = IE;     EA = 0;   } while (0);

that I call multiple times (along with its complement, ExitCritical()) in a particular function. With C51's optimization level set at 9, the optimizer is turning these in-line macros into a function and calling them -- this obviously won't work, due to the operations on SP.

Is there a way for me to maintain the OPTIMIZE(9,SIZE) settings for the module but ensure that the macro is left in its original in-line state whenever I invoke it?

Thanks,

Parents
  • Hi Jon.

    That's an interesting idea.

    I have to see how that fits into the code, and how elegantly I can incorporate it into the preprocessor.

    Off the top of my head, I know of one place where my code requires attention when using this method. Look at this (inside a pragma-disabled function):

    ...
      for (many iterations) {
        do_something_looooooooong;
        enable interrupts;
        disable interrupts;
      }
    ...
    Here, we let interrupts "sneak in" at the end of each iteration, so that we don't have them disabled for the many iterations. Anyway, I had overlooked the disable pragma, and must give it some thought -- thanks. Andrew

Reply
  • Hi Jon.

    That's an interesting idea.

    I have to see how that fits into the code, and how elegantly I can incorporate it into the preprocessor.

    Off the top of my head, I know of one place where my code requires attention when using this method. Look at this (inside a pragma-disabled function):

    ...
      for (many iterations) {
        do_something_looooooooong;
        enable interrupts;
        disable interrupts;
      }
    ...
    Here, we let interrupts "sneak in" at the end of each iteration, so that we don't have them disabled for the many iterations. Anyway, I had overlooked the disable pragma, and must give it some thought -- thanks. Andrew

Children