一、前言 关于堆栈的定义在此就不赘述,详细内容可以看这篇博客。...本文介绍两种获取栈最大消耗的方法,以方便合理设置栈的大小。 二、方法 1、方法一 栈指针 SP 指向的位置可以反应出当前栈的消耗量。...
一、前言
关于堆栈的定义在此就不赘述,详细内容可以看这篇博客。
堆栈溢出会导致野指针,返回地址错误等问题,通常程序已经无法正常运行,进入 HardFault 异常中断。为了避免这种情况,一般会分配较大的空间用做栈,可是如果仅仅为了安全就分配大空间的栈势必导致内存浪费。本文介绍两种获取栈最大消耗的方法,以方便合理设置栈的大小。
二、方法

1、方法一

栈指针 SP 指向的位置可以反应出当前栈的消耗量。在STM32 中,栈是向下生长的,如果我们定期的获取栈指针 SP 的值,比较后得到一个最小值,就代表了栈的最大消耗量。而如何才能定期去获取栈指针 SP 的值呢?可以使用定时器产生一个周期性的中断,在中段函数中获取栈指针 SP 的值。最简单的方法就是在系统滴答定时器(SysTick)的中断函数中调用栈分析函数。具体可以参看如下的函数。在程序运行结束后,再去获取最大栈消耗量。
static uint32_t max_stack_usage=0xffffffff;voidstack_parse(){int a=0;if((uint32_t)&a