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

Overlays and optimizations on the 8051

Is there anyway to "skip" an optimization level on Keil C51 ver 5.20?

I continually get linker warnings about recursive calls. I have read app note 129 (many projects ago, and now do what it suggests as second nature). If I drop the optimizations down to "Dead Code Elimination" (the one below "Data Overlay"), all my linker warnings go away. As I have more RAM than I'll ever need in this project, I'd like to just skip overlay entirely, and avoid its problems. Unfortunately, code space is limited, and I cannot do without the other optimizations.

I know I can do optimizations on a file by file basis (and have), but I'd like to avoid this if possible, and it still leaves that one file unoptimized.

BTW: What exactly does the "enable variable overlay" under the linker menu do anyway... I cannot tell any difference from the map file.

-nelson

Parents Reply Children
  • Except...xdata overlaying is not supported in V5. It is only available in V6 and later.

    I assume that mean that my increase in xdata usage when I set compiler optimizations to below "data overlay" is because of moving idata variables to xdata?

    Regardless, it sounds like my initial question's answer is NO, there is no way to skip an optimzation level. If I want to avoid the compiler warning, I'll have to do a #pragma optimize() around each function/file that is causing the problem.... unless someone has a better solution?

    It also sounds like version 6 might handle this issue better... Neglecting uVision, how much better is v6 over v5? I usually maintain the philosophy to avoid changing revs in the middle of a project, if I -do- convince my client to upgrade, am I going to run into any upgrade problems (ie, the code works fine as is, just for the annoying overlay issue).

    legal issue: If you upgrade instead of purchase a new license, does that "legally" prevent you from using the older version?

    Thanks,
    -nelson

  • For what it's worth, when I switched from v5.5 to 6.0 on my 60KB of code project, I so no bugs as a result of the switch. I used less code and the compiles were twice as fast, but no ill effects.

    - Mark

  • I assume that mean that my increase in xdata usage when I set compiler optimizations to below "data overlay" is because of moving idata variables to xdata?

    The compiler doesn't move IDATA vars to XDATA in any optimization (or lack of optimization) step. :-)

    There must be some other optimization that isn't making more efficient use of XDATA.

    Regardless, it sounds like my initial question's answer is NO, there is no way to skip an optimzation level.

    That's correct. There is no way to "skip" an optimization level.

    If I want to avoid the compiler warning, I'll have to do a #pragma optimize() around each function/file that is causing the problem.... unless someone has a better solution?

    I'd suggest using the linker optimize directive to remove the resursive reference to the function. This is discussed in App Note 129.

    It also sounds like version 6 might handle this issue better...

    I'm not too sure about that. The V6 optimizer is nearly identical to the V5 optimizer for the first 6 levels. The V6 tools, offer 3 new optimization levels. Also, V6 offers XDATA overlaying.

    Neglecting uVision, how much better is v6 over v5?

    Numerous customers report cutting application sizes by as much as 40%. We've consistently seen 30% on real applications (over 16K).

    I usually maintain the philosophy to avoid changing revs in the middle of a project,

    I tend to agree with you.

    legal issue: If you upgrade instead of purchase a new license, does that "legally" prevent you from using the older version?

    No. As long as it's the same user on the same machine. You can't give your old V5 compiler away to a friend. (Well, unless you also give him your V6 updated compiler as well :-)

    Jon