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

StackOverflow Hook in Keil RTX

Hello,

I m using Keil RTX on STM32F411. My IDE is Keil too.

I have a task to maintain and upgrade previous code where RTX is being used.

I need to debug a Stack Overflow (seen in System and Thread Viewer) and for that I need to identify the first overflow event to dig in that thread.

We can learn about hooks in freeRTOS here: https://www.youtube.com/watch?v=vBoP4Q6rf5g&list=PLnMKNibPkDnFeFV4eBfDQ9e5IrGL_dx1Q&index=20

The idea of having a callback when a Stack Overflow event happens is great.

Can some one give me a Tip, how to implement Hook in RTX or any approach to deal with Stack Overflow in RTX?

Another question is, I see a lot of Stack Overflows in " System and Thread Viewer" but would expect my System to fail totally, but instead the majority (not all) of Threads keep running.

I mean, this code shouldn't be running, one stack overflow would be enough to ruin the application. Is " System and Thread Viewer" info reliable?

br

 

Parents
  • I assume you are using RTX5 and not the older version 4.

    If you set OS_STACK_CHECK at build time, then on any context switch, RTX will check that the thread that is being de-scheduled has not gone off the end of its stack.  Of course in some respects, that check is too late.  You really want the system to alert you to the first instruction that blows the stack. You could try using the MPU (if your cpu has it, it is optional) and use it to make non-writable the memory area below your thread stack(s).  You'd need to have a very clear picture of the memory layout of the system, but you can get that from the linker script (scatter file).

Reply
  • I assume you are using RTX5 and not the older version 4.

    If you set OS_STACK_CHECK at build time, then on any context switch, RTX will check that the thread that is being de-scheduled has not gone off the end of its stack.  Of course in some respects, that check is too late.  You really want the system to alert you to the first instruction that blows the stack. You could try using the MPU (if your cpu has it, it is optional) and use it to make non-writable the memory area below your thread stack(s).  You'd need to have a very clear picture of the memory layout of the system, but you can get that from the linker script (scatter file).

Children