Hi Han, On Tue, Feb 2, 2010 at 4:57 AM, Han Hoekstra <han.hoeks...@wirelessvalue.nl> wrote: > However, what I don't understand is that the while loop does not cause some > stack overflow, because I have decreased the array to be only a single > element, so app_TXIncomming is always 0, so the while loop should therefore > never loop.
Since the code size changes, lots of things that are stored on the stack will also change (i.e. return addresses, addresses of global variables etc). So the content of uninitialized variable may change as well. It's also possible to have a stack overwrite which doesn't affect all bytes of the stack. For example, let's suppose I declared a local (i.e. stack variable) char buf[20]; And the last two bytes happened to line up with your 2 checker bytes. If you never actually wrote to those bytes (maybe you only use the first 10 bytes of buf), you still have a stack overflow, but not one that is detected. Changing the code size will cause the location of your checker bytes to also change, and that may be enough to have it now collide. You may wish to try filling all of the stack space with a fill byte, and then checking to see how many fill bytes are untouched. It still suffers from the problem I mentioned above, but it can often tell you if you're getting close to filling the stack. -- Dave Hylands Shuswap, BC, Canada http://www.DaveHylands.com/ _______________________________________________ AVR-GCC-list mailing list AVR-GCC-list@nongnu.org http://lists.nongnu.org/mailman/listinfo/avr-gcc-list