STM32获取最大堆栈空间

参考

  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.rhkb.cn/news/198955.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络运维与网络安全 学习笔记2023.11.19

网络运维与网络安全 学习笔记 第二十天 今日目标 STP工作原理、STP高级配置、MSTP工作原理 MSTP配置案例、MSTP负载均衡 STP工作原理 单点故障 PC之间的互通链路仅仅存在1个 任何一个设备或链路出现问题,PC之间都会无法通信 解决方案 增加冗余/备份设备 增加冗…

9 HDFS架构剖析

问题 100台服务器,存储空间单个200GB 20T 5T文件如何存储? 128MB一块 128MB81GB 1288*10241TB 5T数据分成的128MB的块数 8192 * 5 客户端(client)代表用户通过与namenode和datanode交互来访问整个文件系统。 HDFS集群有两类节点: 一个na…

成为电车销量的“中坚力量”,微小型车不能只有“低价”?

日常交通中,越来越多的汽车开始“绿牌出行”,市场的最新销量也不断验证着新能源车抢占更多市场的事实。 11月初,国内多家车企公布10月销量数据,其中新能源汽车销量增长仍然亮眼。根据中国工业和信息化部数据,我国汽车…

Nessus扫描结果出现在TE.IO或者ES容器结果查看问题解决方案

Nessus扫描结果出现在TE.IO或者ES容器结果查看问题解决方案 也是昨天晚上折腾了一个晚上到凌晨四点多,实在没有头绪,在论坛,贴吧,各种求助查贴,没有什么人解决.后面请教了一个安全圈的大佬朋友给解决了. 我的问题是在kali上的,所以只写了kali 的解决方案: 修改插件: vim /opt/…

Hadoop-- hdfs

1、HDFS中的三个进程:NameNode(NN)、DataNode(DN)、SecondNameNode(SNN) 2、NameNode(NN) 1、作用: 1、接收客户端的一个读、写的服务,在namenode上存储了数据文件和datanode的映射的关系。 …

【Q1—45min】

1.epoll除了边沿触发还有什么?与select区别. epoll 是Linux平台下的一种特有的多路复用IO实现方式,与传统的 select 相比,epoll 在性能上有很大的提升。 epoll是一种当文件描述符的内核缓冲区非空的时候,发出可读信号进行通知&…

划片机新手教程:从准备工作到注意事项全解析!

随着科技的飞速发展,划片机已成为半导体行业不可或缺的一部分。对于新手来说,如何正确操作划片机显得尤为重要。以下是新手操作划片机的步骤和建议。 一、准备工作 在开始操作划片机之前,首先需要准备好以下工具和材料: 1. 划片机…

Java(三)(static,代码块,单例设计模式,继承)

目录 static 有无static修饰的成员变量 有无static修饰的成员方法 static的注意事项 代码块 静态代码块 实例代码块 单例设计模式 饿汉式单例写法 懒汉式单例写法 继承 基本概念 注意事项 权限修饰符 单继承 object 方法重写 子类方法中访问其他成员(成员变量…

Flume学习笔记(3)—— Flume 自定义组件

前置知识: Flume学习笔记(1)—— Flume入门-CSDN博客 Flume学习笔记(2)—— Flume进阶-CSDN博客 Flume 自定义组件 自定义 Interceptor 需求分析:使用 Flume 采集服务器本地日志,需要按照日志…

交易机器人-微信群通知

微信公众号:大数据高性能计算 1 背景 背景是基于人工去做交易本身无法做到24小时无时无刻的交易,主要是虚拟币本身它是24小时交易,人无法做到24小时盯盘,其次就是如果你希望通过配置更加复杂的规则甚至需要爬取最新的信息走模型进行量化交易的时候,就需要自己去做一些量化…

Linux 环境搭建

✨个人主页: Anmia.🎉所属专栏: C Language 🎃操作环境: Visual Studio 2019 版本 本章概要 1. 认识 Linux, 了解 Linux 的相关背景 2. 学会如何使用云服务器 3. 掌握使用远程终端工具 xshell 登陆 Linux 服务器 1. Li…

语义检索系统【全】:基于milvus语义检索系统指令全流程-快速部署版

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

学生邮箱白嫖/免费安装JetBrains全家桶(IDEA/pycharm等) —— 保姆级教程

🧸欢迎来到dream_ready的博客,📜相信您对博主首页也很感兴趣o (ˉ▽ˉ;) 博主首页,更多redis、java等优质好文以及各种保姆级教程等您挖掘! 目录 前言 JetBrains全家桶介绍 申请过程: 获取学…

C++类与对象(2)—构造函数析构函数

目录 一、类的6个默认成员函数 二、构造函数 1、定义 2、特征 三、析构函数 1、定义 2、特征 四、默认生成构造&析构 1、定义 2、内置类型 3、自定义类型 4、声明处给默认值 5、总结 下一篇 一、类的6个默认成员函数 如果一个类中没有定义任何成员&#xff0…

Idea2023 Springboot web项目正常启动,页面展示404解决办法

Idea2023 Springboot web项目正常启动,页面展示404解决办法 问题: 项目启动成功,但是访问网页,提示一直提示重定向次数过多,404 解决方法 在IDEA的Run/Debug Configurations窗口下当前的Application模块的Working directory中添…

python 对图像进行聚类分析

import cv2 import numpy as np from sklearn.cluster import KMeans import time# 中文路径读取 def cv_imread(filePath, cv2_falgcv2.COLOR_BGR2RGB): cv_img cv2.imdecode(np.fromfile(filePath, dtypenp.uint8), cv2_falg) return cv_img# 自定义装饰器计算时间 def…

vue中使用echarts渐变柱状图 Cannot read properties of undefined (reading ‘graphic‘)解决方法

在使用渐变颜色时报错,Cannot read properties of undefined (reading ‘graphic’) echarts也下载了,引入了,就是报错,用不了new charts, 结果换了一个版本号就可以了,本来用的"echarts": "…

7.docker运行redis容器

1.准备redis的配置文件 从上一篇运行MySQL容器我们知道,需要给容器挂载数据卷,来持久化数据和配置,相应的redis也不例外。这里我们以redis6.0.8为例来实际说明下。 1.1 查找redis的配置文件redis.conf 下面这个网址有各种版本的配置文件供…

02-1解析xpath

我是在edge浏览器中安装的xpath,需要安装的朋友可以参考下面这篇博客最新版edge浏览器中安装xpath插件 一、xpathd的使用 安装lxml pip install lxml ‐i https://pypi.douban.com/simple导入lxml.etree from lxml import etreeetree.parse() 解析本地文件 htm…

linux镜像的下载,系统下载(个人使用)

文章目录 一、系统之家二、国内镜像源三、Centos官网四、安装成功截图五、镜像类型的区别参考文档 一、系统之家 系统之家官网 二、国内镜像源 下载镜像地址: 1、官网地址:https://www.centos.org/ 2、阿里镜像站:https://mirrors.aliyu…