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

variable overlays

have you ever noticed that when you comment out a piece of code, so it is ignored for variable overlay, that ALL other code that was part of the same overlay now will not overlay?

for instance, I had 4-5 functions that used local arrays of chars

when I commented one of them out of main so it never executed suddenly instead of only using up space for 1 array I had all the arrays in their own space (more memory than the teeny uP had)

when I put the code back in the memory usage actually shrunk

Parents
  • Yes. This is expected behavior.

    Any code that the compiler (well, linker, actually) cannot identify as being part of a call tree serves as the root of its own call tree. Normally, main() serves as the root of a call tree, along with each interrupt handler. (If you have a preemptive RTOS, each task would be the root of a call tree.) Code that's not called can't be proven to belong to any of those, so there will be a number of other call trees.

    Each call tree has to have its own region of memory for overlaid variables. Within a call tree, the compiler can reuse memory for different paths down the tree. Between call trees, it's not safe to do so.

    Starting with 7.50a, there's a "removeunused" option for the linker that will remove unused code from the load entirely.

    There's more details in the manuals in the sections that talk about the overlay analysis.

Reply
  • Yes. This is expected behavior.

    Any code that the compiler (well, linker, actually) cannot identify as being part of a call tree serves as the root of its own call tree. Normally, main() serves as the root of a call tree, along with each interrupt handler. (If you have a preemptive RTOS, each task would be the root of a call tree.) Code that's not called can't be proven to belong to any of those, so there will be a number of other call trees.

    Each call tree has to have its own region of memory for overlaid variables. Within a call tree, the compiler can reuse memory for different paths down the tree. Between call trees, it's not safe to do so.

    Starting with 7.50a, there's a "removeunused" option for the linker that will remove unused code from the load entirely.

    There's more details in the manuals in the sections that talk about the overlay analysis.

Children
No data