Keil/MDK(2):STM32堆栈使用情况分析
目录
- 一、概述
- 二、.htm文件
- 三、.s启动文件
一、概述
这一节主要记录下堆栈空间的设置。首先看下堆栈的概念:
栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。
堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。(点击链接)
二、.htm文件
以往只关注了hex、bin、map文件,其实在工程的\Projects\Objects\目录下还有两个htm文件,当然这个目录同样与设置有关:
其中:
xxxxx.build_log.htm
这个文件主要是编译信息,通常不必过多关注。xxxxx.htm
这个文件最大的作用是帮助我们合理设置栈空间大小,关键字段为Maximum Stack Usage:
这里看出最大的栈空间需求为2632字节,再加上一些不知道的部分。这样设置占空间大于2632,并适当留出一些余量即可。此外,我们还可以查看单个函数的栈空间使用情况。在文件内搜索要查看的函数名称即可:
可以看到函数TAMPER_Init,最大栈深度是4字节。函数本身占用代码大小(Thumb指令集)40字节,使用栈4字节。
三、.s启动文件
确定了栈空间大小,就可以在启动文件中进行设置:
Stack_Size是栈空间。我这里设置的是A88,转换为10进制即为2696,大于上面的2632,并且留出了一些余量。
Heap_Size是堆空间。因为程序中并没有使用malloc来动态分配内存,这里直接设置为0。
Keil/MDK(2):STM32堆栈使用情况分析相关推荐
- ARM Keil MDK开发STM32工程模板
使用Keil MDK开发STM32的工程模板 源代码工程 https://github.com/chenhaifeng2016/Band
- KEIL,MDK,STM32
KEIL是公司的名称,有时候也指KEIL公司的所有软件开发工具,目前2005年Keil由ARM公司收购,成为ARM的公司之一. MDK(Microcontroller Development Kit) ...
- vscode 乱码_如何使用VS Code 编辑Keil项目(51/STM32)
Keil作为一个很优秀的集编辑和编译于一体的开发软件,使用起来非常方便,记得10多年前我在大学51单片机的时候,用的就是Keil uvision2,现在已经是Keil uvision5了. 不过,令我 ...
- KEIL MDK 查看代码量、RAM使用情况--Code、RO-data、RW-data、ZI-data的解释
KEIL MDK 查看代码量.RAM使用情况--Code.RO-data.RW-data.ZI-data的解释 原创李宜君 最后发布于2019-01-16 09:10:19 阅读数 146 收藏 展 ...
- STM32开发环境(工具)之Keil MDK 介绍
STM32微处理器基于ARM核,所以很多基于ARM嵌入式开发环境都可用于STM32开发平台.开发工具都可用于STM32开发.选择合适的开发环境可以加快开发进度,节省开发成本.本章将先对STM32常用的 ...
- 使用Keil MDK以及标准外设库创建STM32工程
应部分网友要求,最新加入固件库以及开发环境使用入门视频教程,同时提供例程模板,个人录制,欢迎指正.下载地址:http://dl.dbank.com/c0w0ehqynd 2013.3补充在线视频教程 ...
- (2)stm32开发之使用Keil MDK以及标准外设库创建STM32工程
通过上一节对标准外设库的介绍,想必各位读者对标准外设库已经有了基本的认识,然而由于标准外设库中文件众多,很多初学者在开始很长一段时间内甚至都无法完全自己建立一个工程,很多人只是依赖标准外设库或给定的工 ...
- keil stm32标准库放在哪里_使用Keil MDK以及标准外设库创建STM32工程
应部分网友要求,最新加入固件库以及开发环境使用入门视频教程,同时提供例程模板,个人录制,欢迎指正.下载地址:http://dl.dbank.com/c0w0ehqynd 2013.3补充在线视频教程 ...
- keil stm32标准库放在哪里_STM32(1)——使用Keil MDK以及标准外设库创建STM32工程...
转载来自:http://emouse.cnblogs.com 1.1 开发工具与开发环境 1. 软件版本 本节所使用Keil MDK 为目前的最新版V4.21.其他版本差别不大,读者可以根据自己使用的 ...
最新文章
- iar代码优化影响运行速度吗_Java 性能优化:教你提高代码运行的效率
- 重载(Overload )和覆写(override)的理解及区别
- PHP下的Oauth2.0尝试 - OpenID Connect
- linux中进程的控制总结,Linux中的进程控制
- 《视频直播技术详解》之(四):编码和封装
- 禁用内置键盘_如何禁用Windows 10的所有内置广告
- K8S 部署rabbitmq集群
- java输出csv文件在excel中显示乱码
- 车辆动力学及控制_传统汽车的稳定性控制系统主要通过各个车轮制动进行短暂动作...
- 苹果Mac侧边栏笔记工具:​​​​​​​​SideNotes
- TX2 摄像头CSI(一)
- Spring.NET学习笔记17——事务传播行为(基础篇) Level 200
- 火到爆的扩散模型(Diffusion Model)帮你具象化幻想世界
- max模型怎么导入ue4_UE4模型导入流程,3DMAX贴图丢失问题解决方法
- 如何生成随机验证码图片
- TMS运输系统价格昂贵?中小物流运输企业数字化,原来可以这么做。
- Unity3d中XML的解析
- shell一键安装lnmp
- MCU VR 應用班 翻轉式課堂
- 使用 Nodejs 实现定时爬取微博热搜榜
热门文章
- 安装完MySQL后启动报错_MySQL数据库之mysql编译安装完成后,启动时报错The server quit without updating PID file...
- 拦截游戏窗口被移动_非常简单实用的有效阻止您的电脑弹窗-拦截不受欢迎的弹窗...
- 北京大学生物信息学(转录组)
- linux百分比查看文件,Linux 如何查看内存使用率百分比?
- 三线压力传感器原理_电喷摩托车进气压力传感器原理与检测
- tpc ds 导入到oracle,用TPC-DS测试Sql server,Oracle
- jenkins教程_2 入门
- 为什么我的眼里常含泪水,因为Mysql让我变的深沉(2021最新版mysql安装)
- 小白记事本--学不明白还怕忘记指针--loading未完待续
- java 调用kettle job 传参_java调用kettle向job(任务)和transformation(转换)传递参数实例...