STM32获取最大堆栈空间

news/2024/11/15 0:40:36/

参考

  1. stackflow相关讨论

原理

  1. 通过参考链接,可知探测Stack的最大深度是先在stack中填充不常用的特定值,然后实时检测这些值哪些发生了变化,变化的表示使用到了这个空间,如果程序完全遍历后,有些值还是没变,则表示这些空间是没有使用到的。
  2. 本文是针对没有使用RTOS的情况下使用的,即查看的是系统stack空间的使用情况。不过使用RTOS的任务栈也可以通过这种方式确认任务栈的使用情况,但是一般RTOS都已经集成了这个功能,不需要自己实现。

实现

  1. 先实现如下代码:
// 在ARM-MDK中测试了,其他IDE应该也是可以直接用的;
// ARM-MDK 平台需要开启 MicroLib 选项
void stack_fill(void)
{#define STACK_SIZE (0x600)extern uint32_t __initial_sp;uint8_t buf[STACK_SIZE];memset(buf, 0x57, STACK_SIZE);LOG_DBG("stackTop[%p] bufAddr[%p] stack_area[last] = [%d]\n", &__initial_sp, &buf, buf[STACK_SIZE-1]);
}
  1. 在初始化完成后调用以上函数,编译成功后烧录并进入仿真,通过watch memory实时查看内存数据:
    在这里插入图片描述
  2. 然后全速运行程序,查看还有哪些数据没有被改变,就可以相应调整stack大小了;比如:
    在这里插入图片描述

注意

  1. stack_fill()函数中,需要根据实际需求更改STACK_SIZE的值,要尽可能得填充所有当前剩余的栈空间,但是不能超出剩余的栈空间。可以把这个函数先放在LOG使能后的地方,查看一下__initial_sp栈顶地址是多少,然后根据在startup.s文件中定义的stack size,定义一个合理的STACK_SIZE值;
  2. 如果想要获得最大的栈使用空间,就需要保证所有的代码都被遍历。这种方式只能看到已经运行代码的最大栈使用空间!

http://www.ppmy.cn/news/1229976.html

相关文章

Hibernate 函数 ,子查询 和原生SQL查询

一. 函数 聚合函数:count(),avg(),sum(),min(),max() 例:(1)查询Dept表中的所有的记录条数。 String hql" select count(*) from Dept "; Long count(Long)session.createQuery(hql).uniqueResult(); 当不确定返回的是…

IObit Unlocker丨解除占用程序软件

更多内容请收藏:https://rwx.tza-3.xyz 官网:IObit Unlocker “永远不用担心电脑上无法删除的文件。” 界面简单,支持简体中文,一看就会,只需要把无法删除/移动的文件或整个U盘拖到框里就行。 解锁率很高,…

PC3329L DC-DC降压 10V-100V输入3A大流输出带EN功能实现零功耗只需极少元器件

1. PC3392L特性  通过使能脚关断实现零功耗  宽电压输入范围 10V 至 100V  最大输出电流 3A  集成功率 MOS 管  外围器件少  输出短路保护  温度保护  逐周期限流  输出电压灵活可靠  ESOP8 2. 描述 PC3392L 一款宽电压范围降压型 DC-DC 电源管…

HTTP四种请求方式,状态码,请求和响应报文

1.get请求 一般用于获取数据请求参数在URL后面请求参数的大小有限制 2.post请求 一般用于修改数据提交的数据在请求体中提交数据的大小没有限制 3.put请求 一般用于添加数据 4.delete请求 一般用于删除数据 5.一次完整的http请求过程 域名解析:使用DNS协议…

mysql 集群恢复

准备使用集群的时候发现集群起不来, 发现抱错集群各个节点都是readonly 状态,找了很多资料,由于集群处于不一致的情况需要防止不同的节点数据写入脏数据 取消节点readonly 方法如下: MySQL 取消 super read only 直接关闭read…

Python如何实现原型设计模式?什么是原型设计模式?Python 原型设计模式示例代码

什么是原型(ProtoType)设计模式? 原型模式(Prototype Pattern)是一种创建型设计模式,旨在通过复制现有对象来创建新对象,而无需通过标准的构造方式。它允许我们基于现有对象创建新对象&#xf…

Django DRF权限组件

在Django的drf框架内的权限组件,如果遇到多个权限认证类,是需要所有的权限类都要通过验证,才能访问视图。 一、简单示例 1、per.py 自定义权限类 from rest_framework.permissions import BasePermission import randomclass MyPerssion(B…

Vue3--Vue Router详解--学习笔记

1. 认识vue-router Angular的ngRouter React的ReactRouter Vue的vue-router Vue Router 是Vue.js的官方路由: 它与Vue.js核心深度集成,让Vue.js构建单页应用(SPA)变得非常容易;目前Vue路由最新的版本是4.x版本。 v…