IAR 8051 C compiler overlay mechanism


The IAR 8051 C compiler has an overlay mechanism whereby function parameters and non-static local variables are not stored on the stack (due to very small processor stack) but instead are stored in shared RAM (either on-chip RAM or external RAM). The RAM locations used for the local variables of one function might be the same locations as for another function, if the linker determines that those functions are never "active" at the same time i.e. that one doesn't directly or indirectly call the other.

For functions that are called by interrupts, the compiler appears to realise that the shared RAM used by these functions must be separate from the shared RAM used by non-interrupt functions. The compiler help file I have doesn't describe this very well though.

My question is : if one interrupt service routine can interrupt another (because they have different priorities), does the compiler/linker realise that each interrupt service routine must have separate shared RAM from any other interrupt service routine (regardless of whether the reentrant keyword is used or not).

Also, is it safe to assume that the IAR 8051 C compiler won't re-order accesses to non-local variables "across a function call" if the function being called is in another module?


Reply to
Loading thread data ...


  1. Try on a simple piece of code and look at the compiler output.
  2. Ask IAR
  3. Ask at
    formatting link


Reply to
Ian Bell

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.