一、前言关于堆栈的定义在此就不赘述，详细内容可以看这篇博客。堆栈溢出会导致野指针，返回地址错误等问题，通常程序已经无法正常运行，进入 HardFault 异常中断。为了避免这种情况，一般会分配较大的空间用做栈ÿ…
一、前言
关于堆栈的定义在此就不赘述,详细内容可以看这篇博客。
堆栈溢出会导致野指针,返回地址错误等问题,通常程序已经无法正常运行,进入 HardFault 异常中断。为了避免这种情况,一般会分配较大的空间用做栈,可是如果仅仅为了安全就分配大空间的栈势必导致内存浪费。本文介绍两种获取栈最大消耗的方法,以方便合理设置栈的大小。
二、方法
1、方法一
栈指针 SP 指向的位置可以反应出当前栈的消耗量。在STM32 中,栈是向下生长的,如果我们定期的获取栈指针 SP 的值,比较后得到一个最小值,就代表了栈的最大消耗量。而如何才能定期去获取栈指针 SP 的值呢?可以使用定时器产生一个周期性的中断,在中段函数中获取栈指针 SP 的值。最简单的方法就是在系统滴答定时器(SysTick)的中断函数中调用栈分析函数。具体可以参看如下的函数。在程序运行结束后,再去获取最大栈消耗量。
static uint32_t max_stack_usage = 0xffffffff;
void stack_parse()
{
int a = 0;
if((uint32_t)&a