42 单片机栈溢出及程序栈大小设定

Keil STM32查看堆栈使用量及调用链.htm文件 htm 静态调用图文件 Keil编译成功之后在Output 目录下。 **有一个以工程文件命名的后缀为 .bulid_log.htm 及 .htm 文件 如”Template_F4VE.bulid_log.htm”及”Template_F4VE.htm”,使用浏览器打开。其中 *.build_log.htm 是工程的构建过程日志,而 *.htm 是链接器生成的静态调用图文件。 在静态调用图文件中包含了整个工程各种函数之间互相调用的关系图,而且它还给出了静态占用最深的栈空间数量以及它对应的调用关系链。 阅读详情

一、背景

最近自己在开发单片机应用程序,开发过程并不顺利,问题在当我在工程里添加了好几个模块的代码之后,发现程序不正常工作了,进入一个函数卡死在里面,但是30s后居然又跑出来了,真是奇怪。

然后同一个函数,在不同地方调用居然产生不同的结果。

第一个:调用函数层数不多,就3层。

第二个:调用层数达到6层

两个都是调用同一个函数TPDU_Exchange,但是结果行为不一样。没办法,第一次遇到这事,想不明白,就能扔一边,然后跟同事一起去吃个饭,然后一拍大腿,是不是栈溢出了!!!! 没想到这拍的真准!! 

因为函数调用层数多了后,需要保存到栈的信息变多,栈溢出了,不够空间保存着信息,肯定不正常,然后回去看了一下程序栈大小真的有发现。

二、单片机栈程序栈大小在哪查看呢?

我是使用keil开发工具的,在keil如何查看当前编译的程序所需要的栈大小的呢?去生成的固件xxx.bin文件夹,找到xxx.html文件,点击打开,就可以看到里面的信息,程序所需栈的大小。如下图示。

嵌入式C程序内存布局与动态管理实战解析 内存管理是嵌入式系统开发的核心技术,特别是在资源受限的单片机环境中。C程序运行时内存通常划分为栈、堆、全局/静态数据区和代码区,每个区域有特定的管理机制和使用场景。栈采用先进后出的自动管理策略,适合函数调用和局部变量存储;堆则通过malloc/free手动管理,适用于动态内存需求。理解内存布局原理对优化STM32等嵌入式系统的内存使用至关重要,能有效预防内存碎片和栈溢出等问题。通过分析.map文件、使用编译器栈分析工具以及实时监控堆使用情况,开发者可以掌握内存动态变化规律,在物联网设备和实时控制系统中实现高 阅读详情

相关推荐

STM32内存管理实战:从栈溢出到.map文件分析,解决HardFault死机

在嵌入式开发中,内存管理是确保程序可靠性与资源高效利用的核心基础。其原理涉及编译链接过程中代码与数据在物理内存中的逻辑组织,包括.text、.data、.bss段以及堆栈的分配。理解内存映射对于优化MCU性能和稳定性具有重要技术价值,尤其在资源受限的场景下,能有效预防栈溢出、内存碎片等问题。应用场景广泛覆盖从简单外设驱动到复杂RTOS系统的嵌入式项目。本文聚焦STM32平台,通过分析链接脚本和.map文件,深入探讨了栈溢出等典型问题的诊断与解决,并介绍了如何利用分散加载技术进行高级内存优化。

weixin_30819085的博客 636

Ubuntu、stm32中的程序内存分配问题

通过运行结果可以发现,Ubuntu在栈区和堆区的地址值都是从上到下增长的,stm32的栈区的地址值是从上到下减小的,堆区则是从上到下增长的。从每个区来看,地址值是从上到下逐步减小的,即栈区的地址是高地址,代码区的地址是处于低地址。参考链接:https://blog.youkuaiyun.com/qq_46467126/article/details/121875496。

m0_64363794的博客 177

STM32F1基本汇编工程

基于Keil5,STM32F103RCT6芯片可使用的最基本的汇编工程,可通过本工程对搭载STM32F103RCT6芯片的开发板或其它进行调试,也可对本工程进行扩展,加入其它模块的.s文件以通过汇编语言进行硬件开发,或基于本工程实现其它芯片的汇编工程实现。 本工程的基本文件介绍可参考以下文章:https://blog.youkuaiyun.com/weixin_47447179/article/details/124006442

量子通信:初识量子城域网

对量子城域网的概念、作用、拓扑、建设内容等进行了较为全面的初步介绍。

量子领域相关话题 3348

SFF-8654接口引脚定义全解析:从SAS到U.2的高速硬件连接核心

在高速数据存储与传输领域,接口标准是连接主机与存储设备、确保信号完整性与协议互通性的物理基础。其核心原理在于通过精确定义的物理引脚和电气特性,承载不同的高速串行通信协议,如SAS和PCIe。这类高密度连接器的技术价值在于以紧凑的形态支持多协议兼容与高速率传输,满足了企业级存储、高性能计算对带宽和可靠性的苛刻要求。典型的应用场景包括服务器硬盘背板连接、NVMe U.2固态硬盘直连以及外部存储扩展。本文聚焦于SFF-8654(亦称Mini SAS HD)这一关键接口,深入剖析其引脚定义、信号分区(如高速数据通道

weixin_29188043的博客 711

基于单目视觉的四旋翼定点降落——如何通过mavros控制pixhawk(二)

    一直拖了这么久没有更新,怪我太懒啦~~~ 今天要特别感谢舒仔仔同学,我的好队友帮我写了这篇博文。这篇文章主要讲了如何通过mavros来控制pixhawk。硬件逻辑是这样子,我们先搞一个odroid(土豪上TX2),再用usb线将odroid与pixhawk连接。所以,odroid发送控制指令来控制pixhawk飞行。pixhawk与外界的通信协议是mavlink。ROS下面有个包叫mavr...

zhengyuxin0507的博客 1万+

在 Ubuntu 22.04 上配置 SonarQube 与 CI/CD 流水线实现自动化代码审查

本文详细介绍了在Ubuntu 22.04系统上配置SonarQube并与CI/CD流水线集成的完整流程,实现自动化代码审查。从环境准备、数据库配置到核心参数调优,再到与Jenkins和GitHub Actions的深度集成,提供了实战技巧和性能优化建议,帮助团队提升代码质量监控效率。

weixin_28829325的博客 260

Hypermesh二次开发实战:Tcl命令分类与常用函数详解(附避坑指南)

本文深入解析Hypermesh二次开发中Tcl命令的三大核心类别:界面命令、查询命令与修改命令。重点剖析了*createmark集合管理与hm_getvalue信息查询等关键函数的实战用法,并提供了避免Mark覆盖、生命周期管理等常见陷阱的实用指南,旨在帮助CAE工程师构建高效可靠的自动化前处理流程。

weixin_29233333的博客 240

【A_Star三维路径规划】基于matlab A_Star算法结合B样条平滑三维地形路径规划(含雷达威胁)【含Matlab源码 3527期】

A_Star算法结合B样条平滑三维地形路径规划(含雷达威胁) 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 741

在 SAP HANA 与 HANA Cloud 中,用 SQL DDL 创建数据库视图:从设计时工件到运行时对象的全链路实践

本文介绍了在SAP HANA中通过HDI容器使用DDL定义视图的方法。主要内容包括:1)采用.hdbview设计时工件存储视图定义,构建时自动转换为运行时视图,实现版本控制和权限隔离;2)开发前需准备HDI容器、MTA项目及配置.hdiconfig文件;3)详细说明.hdbview语法结构,重点讲解WITH READ ONLY和WITH STRUCTURED PRIVILEGE CHECK的使用场景;4)提供了从创建文件到构建验证的完整流程示例;5)强调跨容器访问时需通过.hdbgrants为#OO用户授予

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 275

基于Simulink建模仿真的滑模控制的磁悬浮轴承稳定控制仿真

磁悬浮轴承(Magnetic Bearing)利用电磁力来支撑和定位转子,无需机械接触,因此在高速旋转设备中具有广泛应用。滑模控制(Sliding Mode Control, SMC)是一种鲁棒性强的非线性控制方法,适用于磁悬浮轴承的精确控制。以下是基于Simulink的磁悬浮轴承滑模控制系统的详细设计与仿真步骤。通过上述步骤,设计并实现了基于 Simulink 和 Control System Toolbox 的磁悬浮轴承滑模控制系统。

MHD0815的博客 780

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 41 Windows VS封库及库引用
下一篇: 43 ME3616物联网模块连接OneNet平台
Chasing_Chasing
博客等级 码龄10年 233粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值