iar 堆栈设置_IAR开发STM32堆栈设置

本文介绍了如何在IAR开发环境中分析STM32微控制器的堆栈使用情况,以避免因堆栈溢出导致的问题。通过定时器中断获取栈指针SP的值和启用IAR的栈使用分析功能,可以评估并合理设置堆栈大小。同时,建议避免在函数中使用大容量的局部数组,以减少栈空间的消耗,提倡使用动态内存分配作为替代方案。
摘要由CSDN通过智能技术生成

一、前言

关于堆栈的定义在此就不赘述,详细内容可以看这篇博客。

堆栈溢出会导致野指针,返回地址错误等问题,通常程序已经无法正常运行,进入 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 < max_stack_usage)

{

max_stack_usage = (uint32_t)&a;

}

}

uint32_t get_max_stack_usage()

{

return max_stack_usage;

}

由于这个函数是周期执行的,必然对程序的运行性能产生影响,不过这只是为了分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值