checkIstack - Interrupt stack information
#include <sys.h>
The checkIstack() function returns the interrupt stack information in the pointer info.
This pointer fields are discribed here: pthread_stackinfo().
To utilize checkIstack(), the interrupt stack must be initalized to known values through the use of the _isrStackFill initialization variable.
This variable is assigned a non-zero value before kernel initialization to enable stack monitoring.
During the initial startup (typically within setup.c), the control flag to fill the interrupt stack may be set to a non-zero value to enable monitoring.
Enabling a flag causes that particular stack area to be filled with a known value ("I" for the interrupt stack) when it is created subsequently by the kernel.
After the kernel has started and the initial user thread is established a call can be made to checkIstack() to fill the interrupt stack information in info stucture.
Additionally, the RTOS Viewer can be used to visualize either stack fills and is aware of the convention.
#include <sys.h>
/* the inital startup function. */
int main()
{
/*disable all interrupt in interrupt controller */
__disable_irq();
/* 1 - fill the task stack with 'S' during initialization for debugging. */
pthreadStackFill = 1;
/* 2 - fill the isr stack with 'I' during initialization for debugging. */
_isrStackFill = 1;
/* ... the rest of the initialization code ... */
}
After the kernel has been established, any arbitrary thread may then call checkIstack() to get interrupt stack information.
/* some arbitarty thread. */
THREAD threadx ()
{
stackinfo_t info;
/* call checkIstack to get interrupt stack information. */
checkIstack (&info);
/* print interrupt stack information. */
xprintf("ISR stack:\n");
xprintf(" base: 0x%x\n", info.si_base);
xprintf(" current: 0x%x\n", info.si_current);
xprintf(" size: %d\n", info.si_size);
xprintf(" used: %d\n\n", info.si_used);
/* ... other code... */
}
The following result (or similar) will be printed:
ISR stack: base: 0x2004FC00 current: 0x2004FFE0 size: 1024 used: 216
None.
There are no errors defined.