曹休和曹操什么关系| 清考是什么意思| 备孕需要做什么| oct什么意思| philips是什么品牌| 7.22是什么星座| 小孩突然抽搐失去意识是什么原因| 背德感是什么意思| 什么止痛药最快止痛| 小儿厌食吃什么药最好| 肋膈角锐利是什么意思| 胎动突然减少是什么原因| 隔离霜和防晒霜有什么区别| 裂变是什么意思| 尾椎骨疼挂什么科| 9年是什么婚| 杵状指常见于什么病| se是什么| 20年是什么年| 斑斓是什么意思| 红烧肉配什么菜好吃| 戴笠什么军衔| 什么是县级市| 仓鼠可以吃什么水果| 男人射精快吃什么药| 黄瓜片贴脸上有什么效果| 5月26日什么星座| 飞代表什么生肖| 年柱金舆是什么意思| 心电图电轴右偏是什么意思| 刷题是什么意思| 杏黄是什么颜色| 什么是非处方药| 龙女是什么意思| 梦见已故的父母是什么兆头| 安全是什么| 2012属什么生肖| 7是什么生肖| 为什么医生说直肠炎不用吃药| 气虚便秘吃什么中成药| 肌肉萎缩挂什么科| 梦见吃月饼是什么意思| 一年一片避孕药叫什么| 不小心怀孕了吃什么药可以流掉| hca是什么意思| 点读笔什么牌子好| 移车打什么电话| 包皮手术后吃什么伤口愈合快| 腹泻吃什么食物| 低密度结节是什么意思| 痛经是什么原因| 高血糖吃什么比较好| 什么的云彩| 为什么手上会长小水泡| 死忠粉是什么意思| 骨量减少是什么意思| 膝跳反射属于什么反射| 月子餐吃什么| 安排是什么意思| 尽形寿是什么意思| 两只小船儿孤孤零零是什么歌| 吃汉堡为什么要配可乐| 田加比念什么| 大腿前侧肌肉叫什么| 舌系带短挂什么科| 宗旨是什么意思| 什么叫做靶向治疗| 横眉冷对是什么意思| 1992年属什么生肖| 太阳穴长痘是什么原因| 疏朗是什么意思| 一笑了之是什么意思| 术后吃什么刀口恢复得快| 分解酒精的是什么酶| 水果之王是什么| 什么是前列腺钙化| 晚上喝酸奶有什么好处和坏处| 什么是格言| 6月18是什么日子| 左室舒张功能减退是什么意思| 支原体吃什么药好得快| 月经推后是什么原因| 骨癌什么症状| 孕妇梦见猫是什么意思| 格格不入是什么意思| 麝香什么味道| 4月4号是什么星座| 木耳和什么不能一起吃| 不领情是什么意思| 不拘一格是什么意思| 什么地笑| 喝中药为什么会拉肚子| 全飞秒手术是什么| 羽下面隹什么字| 什么样的羽毛| 猪肉什么馅的饺子好吃| 招蚊子咬是什么原因| 女同是什么意思| 孕妇吃梨有什么好处| 什么的虾| 太后是皇上的什么人| 湿气太重了吃什么药| 1972年是什么命| 白带有血丝是什么原因| 脸部肿胀是什么原因| 什么风什么号| 38妇女节送老婆什么礼物| 千什么百什么| 什么是三有保护动物| 肝囊肿是什么| 直肠炎吃什么药好的快| 军校出来是什么军衔| 鱼油什么人不能吃| 什么叫脂溢性脱发| 什么是保健食品| 芃字五行属什么| 茄子和什么相克| 手指头痒是什么原因| 吃狗肉有什么危害| 内内是什么意思| 检查食管做什么检查| 什么叫强直性脊柱炎| 脂溢性皮炎是什么引起的| 田七煲汤配什么材料| 什么是老年斑图片| 营长是什么级别| 本番是什么意思| 绿茶用什么茶具泡好| 窒息什么意思| 什么的长城| 小米配什么熬粥最好| 为什么会长粉刺| 入睡困难是什么原因引起的| 颈椎病用什么药最好| 存货是什么| 女人胸疼是什么原因| 望洋兴叹什么意思| 速战速决的意思是什么| 吃薄荷叶有什么好处和坏处| 孩子发烧手脚冰凉是什么原因| 餐后胆囊是什么意思| 乙肝表面抗体是什么意思| 亚瑟士和鬼冢虎的区别是什么| 11月17日是什么星座| 紫色是什么颜色调出来的| 肝火上炎吃什么中成药| 肾穿刺是什么意思| 碳13和碳14有什么区别| 坐月子是什么意思| 萧字五行属什么| 霍金什么时候去世的| 过敏性紫癜不能吃什么| 口干口苦挂什么科| 无水乙醇是什么| 为什么身上痒一抓就起疙瘩| 囊肿和肿瘤有什么区别| 叶五行属什么| 物业费都包括什么服务| 手足口什么症状| 晒后修复用什么比较好| 为什么会宫颈糜烂| 牙龈肿胀吃什么药| super是什么意思| 痔疮术后吃什么恢复快| cmr医学中什么意思| 白斑不能吃什么| 八面玲珑是什么意思| 刑克是什么意思| 河堤是什么意思| median什么意思| 炒米泡水喝有什么功效| 什么洗面奶最好用排行第一| 星五行属性是什么| 巳蛇五行属什么| 梦见自己生了个女儿是什么预兆| 人突然消瘦是什么原因| 吃什么防止脱发掉发| 吃肠虫清要注意什么| 放大镜不能放大的东西是什么| 狗吃什么药会立马就死| 什么情况下会流前列腺液| 肝胃郁热吃什么中成药| 女性漏尿吃什么药最好| 4月3号是什么星座| gr是什么| 腮腺炎输液用什么药| 教师节送什么礼物好| 吃什么白细胞升的最快| 月经期间喝酒有什么危害| 伤情鉴定需要什么材料| 胸部痛是什么原因| 尿道尿血是什么原因| 腰椎间盘突出压迫神经吃什么药| 莫西沙星片主治什么病| 1966年属什么| 什么食物含钙高| 红颜知己的意思是什么| 大姨妈来的少是什么原因| 断眉有什么说法| 智齿不拔有什么危害| 头孢治什么| 油为什么会浮在水面上| 氧化铜什么颜色| 医保是什么意思| 血清果糖胺测定是什么| 一个虫一个尧念什么| cathy是什么意思| 五味指的是什么| 右边脑袋疼是什么原因| 为什么兔子的眼睛是红色的| 扫描件是什么意思| 琪五行属什么| 月季什么时候扦插最好| 国资委主任是什么级别| 丹参片和复方丹参片有什么区别| 相宜的意思是什么| 化妆的步骤是什么顺序| 蜂蜜什么时候喝比较好| 宝宝咳嗽吃什么药| 天秤座和什么星座最不配| 12月15日什么星座| 过敏性荨麻疹吃什么药| 软肋是什么意思| 处女膜是什么样的| 心脏痛挂什么科| 子宫瘢痕是什么意思| 秋葵是什么| 火山为什么会喷发| 右眼老跳是什么原因| 俊俏什么意思| 补办身份证需要带什么| 纯洁是什么意思| 头部爱出汗是什么原因| 青金石蓝是什么颜色| 一什么牛奶| 菲拉格慕属于什么档次| 为什么会得痛风| 一什么湖水| 惊弓之鸟是什么故事| 七夕节是什么节日| 女人在什么时候最容易怀孕| 豆皮炒什么好吃| 动脉斑块是什么意思| 尿白细胞阳性是什么意思| 医美是什么意思| 4岁打什么疫苗| 细菌性阴道炎吃什么药好| 皮草是什么意思| 来大姨妈吃什么对身体好| 一直以来是什么意思| 小螃蟹吃什么食物| 什么茶好喝又对身体好| 打酱油是什么意思啊| 仙女下凡是什么生肖| 积聚病什么意思| 经济危机是什么意思| notebook是什么意思| 尿蛋白定量高说明什么| 琥珀五行属什么| 日本艺伎是干什么的| 什么是真心| 冲猪煞东是什么意思| 矢气是什么意思| 前列腺肥大是什么意思| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? 详解STM32单片机的堆栈

共3条 1/1 1 跳转至

详解STM32单片机的堆栈

高工
2025-08-04 14:07:34     打赏
百度   风云激荡的世界舞台,呼唤价值引领;气象万千的东方大国,不忘共同责任。

    学习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的启动文件开始,有一段汇编代码是分配堆栈大小的。

image.png

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

image.png

    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大小信息:

image.png

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

image.png

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

image.png

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

image.png





关键词: STM32     单片机     堆栈    

院士
2025-08-04 17:01:55     打赏
2楼

学习了。谢谢分享。


助工
2025-08-04 09:58:45     打赏
3楼

对这个 确实不是 了解,学习了


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
和胃是什么意思 中药饮片是什么意思 阴虱用什么药物 ctc是什么意思 阳虚水泛是什么症状
什么是血栓 崖柏对人体有什么好处 低压高用什么药 生病吃什么 耳膜破了是什么感觉
蝙蝠属于什么类 降血压吃什么药 姑息是什么意思 狗有眼屎是什么原因 鞘膜积液挂什么科
哺乳期感冒能吃什么药 甲辰年五行属什么 同房有什么好处 电表走的快是什么原因 10点是什么时辰
月经期间喝什么好排毒排污血hcv8jop6ns7r.cn 蛐蛐是什么意思hcv9jop2ns0r.cn 思维是什么意思hcv9jop7ns2r.cn 四点底与什么有关hcv8jop9ns7r.cn 相濡以沫是什么生肖hcv8jop2ns4r.cn
染色体是由什么组成的hcv9jop5ns9r.cn 蔗糖素是什么hcv7jop6ns9r.cn 脸黄是什么原因hcv8jop0ns8r.cn 口腔发苦是什么原因hcv8jop9ns1r.cn 四叶草是什么意思hcv8jop4ns8r.cn
扁桃体1度肿大是什么意思hcv7jop9ns4r.cn 梦见被警察抓预示什么hcv7jop4ns8r.cn 见性成佛是什么意思hcv7jop4ns6r.cn 腰两侧疼痛是什么原因hcv7jop4ns8r.cn 怀孕了尿液是什么颜色hcv8jop6ns5r.cn
什么是无机盐bjcbxg.com 鱼腥草泡水喝有什么功效hcv7jop9ns2r.cn 修缮是什么意思hcv9jop7ns3r.cn 妇科菌群失调吃什么药hcv8jop3ns4r.cn 吃什么可以增强记忆力hcv9jop6ns7r.cn
百度