STM32获取最大堆栈空间

news2024/11/11 8:48:06

参考

  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.coloradmin.cn/o/1230909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux下安装两个版本python

1 python下载: 官网地址:Download Python | Python.org 第一:点击下载如下图: 第二:找到对应的python版本源码包: 点击右键复制下载地址,如下图 例如我的是:https://www.python.org/…

openGauss学习笔记-128 openGauss 数据库管理-设置透明数据加密(TDE)

文章目录 openGauss学习笔记-128 openGauss 数据库管理-设置透明数据加密(TDE)128.1 概述128.2 前提条件128.3 背景信息128.4 密钥管理机制128.5 表级加密方案128.6 创建加密表128.7 切换加密表加密开关128.8 对加密表进行密钥轮转 openGauss学习笔记-12…

docker更换国内源

docker更换国内源 1、编辑Docker配置文件 在终端中执行以下命令,编辑Docker配置文件: vi /etc/docker/daemon.json2、添加更新源 在打开的配置文件中,添加以下内容: {"registry-mirrors": ["https://hub-mirror…

MAC上修改mysql的密码(每一步都图文解释哦)

当你想要连接本机数据库时,是不是有可能突然忘记了自己的数据库密码? 在此文中,我们来详细解决一下如何去修改自己的数据库密码,并使用Navicat来连接测试 1.停止mysql服务 打开终端,键入命令,将mysql服务先停止掉,…

OpenAI内斗剧情反转!微软力保ChatGPT之父回归?

美东时间11月17日下午,全球最热门的聊天机器人ChatGPT开发商OpenAI宣布了一项重磅管理层调整,Sam Altman将辞去CEO一职,并离开公司董事会。 Altman被踢出的消息除了让业界担心会影响该公司未来发展外,OpenAI另一位共同创办人暨总裁…

百分点科技|怎样做数据运营,才能让数据中台真正用起来?

导读:大多数企业用户已完成数据平台初步建设工作,但数据在业务运营和管理中没有发挥应有价值。数据开发工作繁重,数据质量问题严重,IT、数据和业务协作不畅,诸多问题依然困扰着企业用户的IT部门和数据部门。数据运营成…

Apache POI(Java)

一、Apache POI介绍 Apache POI是Apache组织提供的开源的工具包(jar包)。大多数中小规模的应用程序开发主要依赖于Apache POI(HSSF XSSF)。它支持Excel 库的所有基本功能; 文本的导入和导出是它的主要特点。 我们可以使用 POI 在…

5分钟制作可直接导入GPTs知识库中的自动爬虫

它能从一个或多个网址爬取网站内容,然后生成JSON文件格式。这样爬取的内容可以直接导入到GPTs知识库中,方便你创建自定义知识库的GPTs。比如你有自己的网站或者资料库,但是整理起来太麻烦,就可以使用这个工具。 主要功能&#xf…

算法分析与设计课后练习21

某工业生产部门根据国家计划的安排,拟将某种高效率的5台机器,分别分配给A,B,C三个工厂,各工厂在获得不同数量的这种机器后,可以为国家盈利如下表所示。请找出一种5台机器的分配方式,使得这5台机器盈利最大。 使用动态规划,令dp[i][j]=max(dp[i-1][j-k]+profit[i][k])…

【计算机网络学习之路】UDP socket编程

文章目录 前言一. 网络通信本质端口号TCP与UDP网络字节序 二. socket编程接口socket()和sockaddr结构体 三. 简单echo服务结束语 前言 本系列文章是计算机网络学习的笔记,欢迎大佬们阅读,纠错,分享相关知识。希望可以与你共同进步。 一. 网…

【UE】线框材质

一、方式1 新建一个材质,混合模式设置为“已遮罩”,勾选“双面” 勾选“线框” 然后可以随便给一个自发光颜色,这样最基本的线框材质就完成了 二、方式2 新建一个材质,混合模式设置为“已遮罩”,勾选“双面”&#x…

yolo系列模型训练数据集全流程制作方法(附数据增强代码)

yolo系列的模型在目标检测领域里面受众非常广,也十分流行,但是在使用yolo进行目标检测训练的时候,往往要将VOC格式的数据集转化为yolo专属的数据集,而yolo的训练数据集制作方法呢,最常见的也是有两种,下面我…

AC修炼计划(AtCoder Beginner Contest 328)

传送门: Toyota Programming Contest 2023#7(AtCoder Beginner Contest 328) - AtCoder 本章对于自己的提升:dfs的运用,带权并查集,以及状压dp。 A,B,C题比较简单,直接…

Adult数据集预处理

因为adult数据集没有列名,先设置列名 df pd.read_csv(adult.csv, header None, names [age, workclass, fnlwgt, education, education-num, marital-status, occupation, relationship, race,sex, capital-gain, capital-loss, hours-per-week, native-countr…

【Qt开发流程之】布局管理

介绍 一个界面呈现,如果要让用户有更好的观感,布局必不可少。 【Qt之布局】QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout介绍及使用 链接: https://blog.csdn.net/MrHHHHHH/article/details/133915208 qt布局类图: Qt布局是Qt图形…

Jmeter监听器

Jmeter监听器 一、监听器介绍二、监听器的类型三、监听器详解3.1 察看结果树3.2 Summary Report3.3 聚合报告3.4 后端监听器3.5 Aggregate Graph3.6 Comparison Assertion Visualizer(比较断言可视化器)3.7 JSR223 Listener3.8 Response Time Graph3.9 S…

一份WhatsApp矩阵账号营销模式全解,有你不知道的玩法吗?

将WhatsApp营销践行到底,是傲途针对海外Social营销一直在做的事。在WhatsApp全球营销范围越来越广泛、营销模式越来越深入的当下,我们也在实践中积累了一套比较系统而全面的差异化矩阵营销模式,帮助大中小不同类型企业获得了有价值的结果。 …

Linux CentOS7配置网络参数

CentOS6及以前版本中主要使用ifconfig工具,查看、配置网络参数。后来对推荐使用ip命令查看配置网络参数。而centos7中,不再赞成使用ifconfig工具,取而代之的是nmcli工具,服务管理也是以systemctl工具取代了service,这些之前版本的…

HarmonyOS ArkTS语言,运行Hello World(二)

一、认识DevEco Studio界面 进入IDE后,我们首先了解一下基础的界面。整个IDE的界面大致上可以分为四个部分,分别是代码编辑区、通知栏、工程目录区以及预览区。 代码编辑区 1、中间的是代码编辑区,你可以在这里修改你的代码,以…

clickhouse 业务日志告警

一、需求 对入库到clickhouse的业务日志进行告警&#xff0c;达阀值后发送企业微信告警。 方法一、 fluent-bit–>clickhouse(http)<–shell脚本,每隔一分钟获取分析结果 --> 把结果保存到/dev/shm/目录下 <-- node_exporter读取指标入库到prometheus<-- rules…