mcu栈溢出调试方法:
- 、使用栈特性:优先使用栈底(高地址),初始化栈顶区域地址的值,定时打印栈顶信息,看值是否被改变,具体代码如下:
uint32_t *pAddress = (uint32_t*)(0xXXXXXXXX);
static void initStack()
{
for(int i = 0;i <50;++i)
{
*(pAddress+i) = 0xaaaaaaaa;
}
}
void printStack()
{
LOGI("stack:");
for(int i = 0;i < 20;++i)
{
if ( i+1 < 20 )
{
LOGI("%0x-", *(pAddress+i));
}
else
{
LOGI("%0x\r\n", *(pAddress+i));
}
}
}
- 、通过栈寄存器
使用中断定时器记录MSP寄存器使用情况,并定时打印MSP寄存器变化情况。