[导读]学习STM32单片机的时候,总是能遇到“堆栈”这个概念。分享本文,希望对你理解堆栈有帮助。 对于了解一点汇编编程的人,就可以知道,堆栈是内存中一段连续的存储区域,用来保存一些临时数据。堆栈操作由PUSH、POP两条指令来完成。而程序内存可以分为几个区:栈区(stack)堆区...
学习STM32单片机的时候,总是能遇到“堆栈”这个概念。分享本文,希望对你理解堆栈有帮助。 对于了解一点汇编编程的人,就可以知道,堆栈是内存中一段连续的存储区域,用来保存一些临时数据。堆栈操作由PUSH、POP两条指令来完成。而程序内存可以分为几个区:- 栈区(stack)
- 堆区(Heap)
- 全局区(static)
- 文字常亮区程序代码区
程序编译之后,全局变量,静态变量已经分配好内存空间,在函数运行时,程序需要为局部变量分配栈空间,当中断来时,也需要将函数指针入栈,保护现场,以便于中断处理完之后再回到之前执行的函数。
栈是从高到低分配,堆是从低到高分配。普通单片机与STM32单片机中堆栈的区别
普通单片机启动时,不需要用bootloader将代码从ROM搬移到RAM。 但是STM32单片机需要,可以参考相关文章:STM32代码的启动过程
。这里我们可以先看看单片机程序执行的过程,单片机执行分三个步骤: 根据PC的值从程序存储器读出指令,送到指令寄存器。然后分析执行执行。这样单片机就从内部程序存储器去代码指令,从RAM存取相关数据。 RAM取数的速度是远高于ROM的,但是普通单片机因为本身运行频率不高,所以从ROM取指令慢并不影响。 而STM32的CPU运行的频率高,远大于从ROM读写的速度。所以需要用bootloader将代码从ROM搬移到RAM。 使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。 其实堆栈就是单片机中的一些存储单元,这些存储单元被指定保存一些特殊信息,比如地址(保护断点)和数据(保护现场)。 如果非要给他加几个特点的话那就是:- 这些存储单元中的内容都是程序执行过程中被中断打断时,事故现场的一些相关参数。如果不保存这些参数,单片机执行完中断函数后就无法回到主程序继续执行了。
- 这些存储单元的地址被记在了一个叫做堆栈指针(SP)的地方。
结合STM32的开发讲述堆栈
从上面的描述可以看得出来,在代码中是如何占用堆和栈的。可能很多人还是无法理解,这里再结合STM32的开发过程中与堆栈相关的内容来进行讲述。 如何设置STM32的堆栈大小? 在基于MDK的启动文件开始,有一段汇编代码是分配堆栈大小的。 这里重点知道堆栈数值大小就行。还有一段AREA(区域),表示分配一段堆栈数据段。数值大小可以自己修改,也可以使用STM32CubeMX数值大小配置,如下图所示。 STM32F1默认设置值0x400,也就是1K大小。
Stack_Size EQU 0x400
函数体内局部变量:void Fun(void){ char i; int Tmp[256]; //...}
局部变量总共占用了256*4 1字节的栈空间。所以,在函数内有较多局部变量时,就需要注意是否超过我们配置的堆栈大小。 函数参数:void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
这里要强调一点:传递指针只占4字节,如果传递的是结构体,就会占用结构大小空间。提示:在函数嵌套,递归时,系统仍会占用栈空间。 堆(Heap)的默认设置0x200(512)字节。
Heap_Size EQU 0x200
大部分人应该很少使用malloc来分配堆空间。虽然堆上的数据只要程序员不释放空间就可以一直访问,但是,如果忘记了释放堆内存,那么将会造成内存泄漏,甚至致命的潜在错误。MDK中RAM占用大小分析
经常在线调试的人,可能会分析一些底层的内容。这里结合MDK-ARM来分析一下RAM占用大小的问题。在MDK编译之后,会有一段RAM大小信息: 这里4 6=1640,转换成16进制就是0x668,在进行在调试时,会出现:
这个MSP就是主堆栈指针,一般我们复位之后指向的位置,复位指向的其实是栈顶: 而MSP指向地址0x20000668是0x20000000偏移0x668而得来。具体哪些地方占用了RAM,可以参看map文件中【Image Symbol Table】处的内容:END来源:网络版权归原作者所有,如有侵权,请联系删除。▍
扫描二维码,关注更多精彩内容
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
▼点击下方名片,关注公众号▼欢迎关注【玩转单片机与嵌入式】公众号,回复关键字获取更多免费资料。回复【加群】,限时免费进入知识共享群;回复【3D封装库】,常用元器件的3D封装库;回复【电容】,获取电容、元器件选型相关的内容...
关键字:
STM32单片机
汽车
毕业设计
RFID
摘 要:为实现对驱车犯罪嫌疑人的快速追捕,文中采用模块式设计思想,设计并制作了一套激光压制追捕系统,该系统包括激光器模块、扩束模块、控制/微处理器模块、电源模块等。激光扩束后,微处理器通过步进电机、脉冲宽度调制(PWM...
关键字:
激光压制
STM32单片机
扩束
追捕系统
STM32F103RCT6: STM32F103RCT6是一种嵌入式-微控制器的集成电路(IC),32位 Cortex-M3内核处理器,速度是72MHz,程序存储器容量是256KB,程序存储器类型是FLASH,RAM容量...
关键字:
STM32单片机
单片机最小系统
针对PSAM卡的驱动操作,并且兼容ISO7816协议里规定的使用相对较多的A类和B类两种类型的PSAM卡,采用STM32单片机为主控模块,以及相应的电压转换模块,成功实现了对于A类、B类两种类型的PSAM卡的驱动。具体阐...
关键字:
STM32单片机
驱动模块
模块设计
SAM
摘要:采用具有ARM Cortex—M3内核的STM32F103VET6单片机与ME3-C2H5OH电化学式气敏元件实现了对酒精浓度的测量,通过TFTLCD对测量数据进行显示,并采用语音模块进行语音报警提示...
关键字:
探测仪
STM32单片机
BSP
TFTLCD
STM32中的定时器有多种,按功能分成2个高级控制器定时器,4个普通定时器,2个基本定时器,2个看门狗定时器,1个系统滴答定时器SysTick。定时器的关键是定时时间的计算。比如用定时器控制继电器的开关的时候,需要延时
关键字:
通用定时器
STM32单片机
BSP
MX
DLP投影技术是应用美国德州仪器公司开发的数字微镜元件——DMD(Digital Micromirror Device)作为主要关键处理元件以实现数字光学处理过程的技术。DLP显示的色彩清晰度高、...
关键字:
投影仪
驱动电路
STM32单片机
DM
提出一种基于STM32单片机的数据记录装置。该设计使用基于ARM-CortexM3内核的STM32单片机作为控制系统的核心,以SD卡作为存储介质,用于存储电动汽车能量管理系统所采集的汽车电池相关数据,同时设计了CAN通信...
关键字:
STM32单片机
BSP
供电
BAT
设计了一种基于STM32单片机和EM310模块的无线终端.通过STM单片机实现SCADA系统监测点仪表的串口与EM310之间的数据传输,通过EM310将仪表数据发送到GPRS网络,实现了监测点仪表与控制中心的无线连接.该...
关键字:
STM32单片机
终端设计
无线终端
BSP
红外测温仪是一种将红外技术与微电子技术相结合的新型温度测量仪器。与传统接触式测温仪器相比,具有测温精度高、非接触、不影响被测对象温度场、响应速度快及稳定性好等一系列优点,在电力、石油、化工、医疗等领域
关键字:
红外测温仪
STM32单片机
BSP
精度
DLP投影技术是应用美国德州仪器公司开发的数字微镜元件--DMD(Digital Micromirror Device)作为主要关键处理元件以实现数字光学处理过程的技术。DLP显示的色彩清晰度高、艳丽、细腻、逼真,且为全...
关键字:
驱动电路
STM32单片机
DLP
RGB
0 引 言电动车一直以清洁环保而备受关注,加上能源危机加剧、油价不断上涨,电动车也越来越受到用户的青睐。电动车一般采用锂电池供电,由多个单体电池串联成电池组作为动力电源。但由于各个串联单体电池特性不能保证
关键字:
触摸屏
STM32单片机
电池管理系统
BSP
0 引言工业生产中的循环水系统在运行中对淡水消耗非常大,同时,为防止工业设备结垢等现象,需要对循环水不断添加各种化学药剂,且需要不断地排放污水、补充新鲜水,这样既对水资源造成了很大的浪费又污染环境。鉴此
关键字:
STM32单片机
控制系统设计
PWM
BSP
0 引言大扭矩永磁同步电机直接驱动由于去掉了复杂的机械传动机构,从而消除了机械结构带来的效率低、维护频繁、噪声与转动惯量大等不利因素,具有效率高、振动与噪声小、精度高、响应快、使用维修方便等一系列突出优
关键字:
STM32单片机
永磁同步电机驱动
电机驱动系统
BSP
STM学习笔记——用定时器实现荧火虫灯 在第6篇笔记中,我用软件延时的方法实现了荧火虫,学了定时器,当然就要用一用定时器了,这里仍是用荧火虫灯为例。 用ST库所带的例子Tim中的TimBas...
关键字:
STM32单片机
串口
单片机学习
工程师
勉勉强强看懂一行程序
继续学习中,先把开发板自带一个例子做了些精简,以免看得吓人。。。。
就是这个,让PORTD上接的4个LED分别点亮。
开始研究代码
int main(void)...
关键字:
IO
STM32单片机
单片机学习
工程师
STM32简单介绍 一、背景 如果你正为项目的处理器而进行艰难的选择:一方面抱怨16位单片机有限的指令和性能,另一方面又抱怨32位处理器的高成本和高功耗,那么,基于 ARM Cortex-M3内核的STM32系列处理...
关键字:
STM32单片机
单片机硬件
引脚
USB
摘要:Stm32是32位单片机,速度快,功能强,已被越来越多的应用于各类电子产品设计中,大功率RGB三色LED的体积小、重量轻、色彩饱和度好,已成为投影仪、背投电视等显示仪器首选的新型光源。为了得到结构更简单,携带
关键字:
STM32单片机
驱动电路
DLP
BSP