classic什么意思| 癸酉五行属什么| 悲催是什么意思| 见好就收是什么意思| 肚脐眼左右两边疼是什么原因| 什么眉什么目| 梦到屎是什么意思| 白龙马叫什么| 气血不足吃什么调理| np文是什么意思| 肾脏挂什么科| 做什么最赚钱| 海凉粉是什么做的| 不爽是什么意思| 什么叫双飞| 火可念什么| 检查阑尾炎挂什么科| 幡然醒悟是什么意思| 婴儿补钙什么牌子的好| 脑白质脱髓鞘吃什么药| 翌日什么意思| 同性恋是什么意思| 被蜱虫咬了有什么症状| 来月经为什么会腰疼| 海啸是什么| 为什么转氨酶会偏高| sharp是什么牌子| 十月二十五是什么星座| 青苹果什么时候成熟| 糖尿病吃什么| 炁怎么读什么意思| 我方了是什么意思| 普洱茶适合什么季节喝| 为什么人会得抑郁症| 三点水一个兆读什么| 维生素h的作用及功能主治是什么| 什么时候闰九月| 肝肾阴虚是什么原因引起的| 过期药品属于什么垃圾| 心胸狭窄是什么意思| 日语斯国一是什么意思| 没有什么会永垂不朽| 变卖是什么意思| 梦见来例假是什么预兆| 休克是什么意思| 一听是什么意思| 吴亦凡属什么| 8023是什么意思啊| 生蒜头吃了有什么好处和坏处| 绿色加红色是什么颜色| eur是什么意思| 1996年出生属什么| 供血不足吃什么好| 为什么手会发麻| 7月22日什么星座| 思伤脾是什么意思| 什么是莱赛尔纤维| 素面朝天什么生肖| 买手是什么意思| aoerbo是什么牌子的手表| 生加一笔是什么字| swisse是什么药| 什么散步填词语| 六味地黄丸的功效是什么| 平均血红蛋白含量偏低是什么意思| 性功能障碍吃什么药| 明月几时有的下一句是什么| 膂力是什么意思| 蚕豆是什么豆| 司局级是什么级别| 18号来月经什么时候是排卵期| 孕妇白蛋白偏低是什么意思| 黑匣子是什么意思| 脾虚吃什么食物| 上火了吃什么食物降火| 火烧火燎是什么意思| 自言自语是什么原因导致| 小蜘蛛吃什么| 他叫什么名字| 利普刀是什么手术| gp什么意思| 候和侯有什么区别| 鼻子红是什么原因| 女人做梦梦到蛇是什么意思| 熊喜欢吃什么食物| 失眠什么原因| 唐朝灭亡后是什么朝代| 甲状腺发炎有什么症状| 喜欢的反义词是什么| 人造奶油是什么做的| 1988年什么命| 李白是什么| 蹄花是什么| 左手大拇指抖动是什么原因| 西柚不能和什么一起吃| 减肥晚上适合吃什么水果| 艺人是什么意思| 感冒吃什么恢复快| 存款准备金率下调意味着什么| 灰指甲长什么样| 经常长溃疡是什么原因引起的| 什么是阴虚| 公丁香和母丁香有什么区别| 益精是什么意思| 肝在五行中属什么| 狗狗拉血是什么原因| 高处不胜寒的胜是什么意思| 梦见被蛇咬了是什么意思| 孤僻是什么意思| 下腹隐隐作痛什么原因| 3月是什么季节| 背靠背是什么意思| 茶毫是什么| 环比是什么| 糖化高是什么意思| 梅长苏是什么电视剧| 什么是非萎缩性胃炎| 眉毛稀少是什么原因| 头皮屑结块是什么原因| 肚脐左边是什么器官| 脖子上长扁平疣是什么原因| 618是什么日子| 教研是什么意思| 三点水的字和什么有关| 三文鱼刺身是什么意思| 甲状腺结节什么原因引起的| 出局是什么意思| 什么木材有香味| mido手表什么牌子| 悠悠岁月什么意思| 酒石酸是什么| 手上长红点是什么原因| 贪嗔痴什么意思| 胃粘膜损伤吃什么药| 左上腹疼是什么原因| 大力念什么| 嘴巴干是什么原因| 头晕目眩挂什么科| 屁股疼什么原因| 凌晨12点是什么时辰| pct偏高说明什么| 昏睡是什么症状| 不知道为什么| 71年属猪是什么命| 晒太阳补什么| 先天愚型是什么病| 凌晨4点是什么时辰| 起风疹了用什么快速方法能解决| 33代表什么意思| 喜鹊吃什么| 刷牙牙龈出血是什么原因| 什么高| 起风疹的原因是什么引起的| 黑色阔腿裤搭配什么上衣好看| 剂型是什么意思| 基础医学是什么| 琴酒是什么酒| 立加羽读什么| 阴阳数字是什么数| 月子里生气有什么危害| 小腹胀是什么原因女性| 波霸是什么| 治甲沟炎用什么药膏好| 4月20日是什么星座| ch什么意思| 不建议什么意思| 诗情画意的意思是什么| 泥石流是什么| 印度人为什么不吃猪肉| 舌头上火吃什么药| 月经量极少几乎没有是什么原因| 宠溺是什么意思| 4级残疾证有什么优惠政策| 厌食症吃什么药| 人设是什么意思| 印绶是什么意思| 日头是什么意思| ngu是什么意思| 正畸和矫正有什么区别| 灾煞是什么意思| 佛道是什么意思| 高泌乳素血症是什么原因引起的| 栩字五行属什么| 潆是什么意思| 误喝碘伏有什么伤害吗| 一丘之貉是什么意思| 肠道功能紊乱吃什么药| vgr100是什么药| 各的偏旁是什么| 细菌性阴道炎是什么原因引起的| 屁股痒是什么原因| 鸡后面是什么生肖| 淋漓不尽是什么意思| 牛肚是什么| 26岁属什么的生肖| 相亲第一次见面送什么礼物好| 高血压高血糖能吃什么水果| 美帝是什么意思| 拉水吃什么药| 情绪高涨是什么意思| 8宫代表什么| 今年农历是什么年| 卤水点豆腐是什么意思| 什么而起| 掉头发是什么原因引起的| 喝玉米水有什么好处| 大云是什么中药| 肾怕什么| 脾肾阳虚吃什么中成药| 血压高会引起什么症状| 林彪为什么要叛逃| 心电图异常q波什么意思| 什么蛋不能吃| 过会是什么意思| 金不换是什么| 什么人不能吃蚕豆| pm2.5是什么意思| 政协主席是什么级别| 小孩咳嗽有痰吃什么药| 映景是什么意思| 笃定什么意思| 什么鸣什么盗| 吃了什么药不能喝酒| 七月一是什么星座| 喝水有什么好处| 豆腐炖什么好吃| 鱼子酱是什么东西| 离婚需要什么手续和证件| mice是什么意思| 别出心裁的裁是什么意思| 干性湿疹用什么药膏| 为什么一生气就胃疼| 7月25日是什么星座| 祭日是什么意思| 流注是什么意思| 关羽的刀叫什么名字| 红豆和赤小豆有什么区别| 公丁香和母丁香有什么区别| 四世同堂什么意思| 口字五行属什么| sam是什么意思| 内射什么感觉| 张钧甯为什么读mi| 短效避孕药是什么| 残疾证有什么用| 拉拉裤后面的胶片是做什么用的| 厄警失痣是什么意思| tax是什么意思| 吹水是什么意思| 喝柠檬水对身体有什么好处| 弱酸性是什么意思| 镭射是什么| 四川有什么好吃的| 发福是什么意思| 查脂肪肝做什么检查| 梦见扫墓是什么预兆| 做梦钓到大鱼什么意思| cdf是什么意思| 颞下颌关节挂什么科| img是什么意思| 右侧卵巢无回声是什么意思| 睡莲什么时候开花| 玛奇朵是什么意思| 血红蛋白低是什么原因| 百度

新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 详解STM32单片机的堆栈

用车事故检车要用 三角警示牌你真的会放吗?

作者:睡梦中的雄师 时间:2025-08-04 来源:EEPW 收藏
百度 在相当长一段时间内,多数虚拟现实设备并不能独立运行,需要靠连接一部运算能力较强的智能手机或电脑,而背后这台设备的计算能力直接决定了使用者的虚拟现实体验。

学习单片机的时候,总是能遇到“堆栈”这个概念。分享本文,希望对你理解堆栈有帮助。对于了解一点汇编编程的人,就可以知道,堆栈是内存中一段连续的存储区域,用来保存一些临时数据:嵌入式开发中更接近底层的汇编与C 语言。堆栈操作由PUSH、POP两条指令来完成。而程序内存可以分为几个区:

●   栈区(stack)

●   堆区(Heap)

●   全局区(static)

1   文字常量区程序代码区

程序编译之后,全局变量、静态变量已经分配好内存空间,在函数运行时,程序需要为局部变量分配栈空间,当中断来时,也需要将函数指针入栈,保护现场,以便于中断处理完之后再回到之前执行的函数。

栈是从高到低分配,堆是从低到高分配。

2   普通单片机与单片机中堆栈的区别

普通单片机启动时,不需要用bootloader将代码从ROM搬移到RAM。

但是单片机需要。

这里我们可以先看看单片机程序执行的过程,单片机执行分三个步骤:

●   取指令

●   分析指令

●   执行指令

根据PC的值从程序存储器读出指令,送到指令寄存器。然后分析执行执行。这样单片机就从内部程序存储器去代码指令,从RAM存取相关数据。

RAM取数的速度是远高于ROM的,但是普通单片机因为本身运行频率不高,所以从ROM取指令慢并不影响。

而STM32的CPU运行的频率高,远大于从ROM读写的速度。所以需要用bootloader 将代码从ROM 搬移到RAM。

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

其实堆栈就是单片机中的一些存储单元,这些存储单元被指定保存一些特殊信息,比如地址(保护断点)和数据(保护现场)。

如果非要给他加几个特点的话那就是:这些存储单元中的内容都是程序执行过程中被中断打断时,事故现场的一些相关参数。如果不保存这些参数,单片机执行完中断函数后就无法回到主程序继续执行了。

这些存储单元的地址被记在了一个叫做堆栈指针(SP)的地方。

3   结合STM32 的开发讲述堆栈

从上面的描述可以看得出来,在代码中是如何占用堆和栈的。可能很多人还是无法理解,这里再结合STM32的开发过程中与堆栈相关的内容来进行讲述。

如何设置STM32的堆栈大小?

在基于MDK的启动文件开始,有一段汇编代码是分配堆栈大小的。

1752582205437792.png

这里重点知道堆栈数值大小就行。还有一段AREA(区域),表示分配一段堆栈数据段。数值大小可以自己修改,也可以使用STM32CubeMX数值大小配置,如下图所示。

image.png

STM32F1默认设置值0×400,也就是1K大小。

Stack_Size EQU 0×400

函数体内局部变量:

void Fun(void){ char i; int Tmp[256]; //...}

局部变量总共占用了256*4 +1字节的栈空间。所以,在函数内有较多局部变量时,就需要注意是否超过我们配置的堆栈大小。

函数参数:

void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)

这里要强调一点:传递指针只占4 字节,如果传递的是结构体,就会占用结构大小空间。提示:在函数嵌套,递归时,系统仍会占用栈空间。

堆(Heap)的默认设置0×200(512)字节。

Heap_Size EQU 0×200

大部分人应该很少使用malloc 来分配堆空间。虽然堆上的数据只要程序员不释放空间就可以一直访问,但是,如果忘记了释放堆内存,那么将会造成内存泄漏,甚至致命的潜在错误。

4   MDK 中RAM占用大小分析

经常在线调试的人,可能会分析一些底层的内容。这里结合MDK-ARM来分析一下RAM占用大小的问题。在MDK编译之后,会有一段RAM大小信息:

1752582436478072.png

这里4+6=1640,转换成16进制就是0×668,在进行在调试时,会出现:

1752582475460064.png

这个MSP就是主堆栈指针,一般我们复位之后指向的位置,复位指向的其实是栈顶:

1752582520287457.png

而MSP指向地址0×20000668是0×20000000偏移0×668而得来。具体哪些地方占用了RAM,可以参看map文件中【Image Symbol Table】处的内容:

1752582572989699.png

(本文来源于《EEPW》


评论


相关推荐

技术专区

关闭
华伦天奴属于什么档次 菊花有什么功效 检查hpv挂什么科 七叶一枝花主治什么病 天麻什么时候种植
迪桑特属于什么档次的 肺部肿瘤吃什么药 三个火是什么字念什么 失眠是什么原因引起的 三伏天吃什么对身体好
洲际导弹是什么意思 主胰管不扩张是什么意思 糖尿病什么症状 丁是什么意思 kkb什么意思
李连杰什么病 百合不能和什么一起吃 00年是什么年 多核巨细胞是什么意思 下蛊是什么意思
1981年属什么hcv8jop7ns5r.cn 如意是干什么用的hcv7jop9ns8r.cn 苯对人体有什么危害hcv8jop7ns0r.cn 什么吞什么咽hcv8jop8ns8r.cn 平均红细胞体积偏高是什么意思hcv9jop7ns4r.cn
推测是什么意思hcv9jop1ns6r.cn ck是什么hcv9jop6ns0r.cn 梦见自己有孩子了是什么预兆hcv9jop6ns3r.cn 风起云涌是什么生肖bjhyzcsm.com 什么是双飞hcv8jop0ns4r.cn
木姜子什么味道hcv8jop6ns7r.cn 紫癜是一种什么病hcv8jop8ns2r.cn 别人梦见我死了是什么意思hcv9jop1ns3r.cn 出是什么意思jinxinzhichuang.com 扩张是什么意思hcv9jop1ns7r.cn
喝中药不能吃什么食物hcv7jop4ns6r.cn 宫颈光滑说明什么sscsqa.com 心慌吃点什么药hcv9jop0ns6r.cn 湿毒吃什么药最有效hcv9jop6ns5r.cn 红色加绿色等于什么颜色hcv8jop1ns9r.cn
百度