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

Strange stack behaviour question.

Hi,

It's about the STM32F103. Due to my previous post my application first fills all (at that moment) free stack memory locations with a value of 0x55555555. This all works fine so does the application. I can monitor the stack behaviour in the Memory1 debug window.

But what I see is that at a certain moment data is placed in the stack at some location leaving some gaps of 2 to 10 times (32-bits) dwords containing 0x55555555.

The stack grows downwards in memory addresses.
For example I see: (highest memory on top)

Address Data
0xnnnnnnnn-0 data start of stack
0xnnnnnnnn-1 data
0xnnnnnnnn-2 data
0xnnnnnnnn-3 0x55555555
0xnnnnnnnn-4 0x55555555
0xnnnnnnnn-5 data
0xnnnnnnnn-6 data
0xnnnnnnnn-7 0x55555555
0xnnnnnnnn-8 data
0xnnnnnnnn-9 data
0xnnnnnnnn-10 0x55555555
0xnnnnnnnn-12 0x55555555
until
0xnnnnnnnn-nn 0x55555555 end of stack

I do use many interrupt handlers.
Is there an explanation for this or is my application buggy?

Thanks

Henk

Parents
  • That was probably not a terribly good idea to begin with. Data objects of that size usually shouldn't be on the stack unless you have very good reasons they need to be there.

    Really? Where else? malloc? static? Many of the 'big' blocks of 255 bytes either or both in either way would not be a great choice on many embedded systems.

    Choosing a sensible stack size is normally a sensible part of a sensible design. As is sensible use of static and malloc.

Reply
  • That was probably not a terribly good idea to begin with. Data objects of that size usually shouldn't be on the stack unless you have very good reasons they need to be there.

    Really? Where else? malloc? static? Many of the 'big' blocks of 255 bytes either or both in either way would not be a great choice on many embedded systems.

    Choosing a sensible stack size is normally a sensible part of a sensible design. As is sensible use of static and malloc.

Children
No data