什么生肖怕老婆| 清和是什么意思| 什么茶好喝又对身体好| 两个日是什么字| verde是什么颜色| 桂圆不能和什么一起吃| 什么花不能浇硫酸亚铁| 遗传是什么意思| 1936年是什么年| 复方氯化钠注射作用是什么| 甲钴胺片是治什么病| 喉咙干疼吃什么药| 吃核桃有什么好处| 王维有什么之称| 三三两两是什么生肖| 不举是什么意思| 荔枝适合什么地方种植| 血液由什么组成| 农历3月是什么月| 非虫念什么| 狗狗可以吃什么水果| 老睡不着觉是什么原因| 山楂和什么泡水喝减肥效果最好| 为什么叫985大学| 25羟维生素d测定是什么| 手指麻木是什么原因| 香港五行属什么| 1991是什么年| 投喂是什么意思| 520是什么意思啊搞笑| 泸州老窖是什么香型| 伪娘什么意思| aid是什么意思| 什么东西蛋白质最高| 暂告一段落是什么意思| 什么情况下需要割包皮| 为什么喝咖啡会拉肚子| 螃蟹的什么部位不能吃| 66年属什么| pd什么意思| 男人时间短吃什么药好| 云朵像什么| 吃天麻对身体有什么好处| 右手麻木是什么病| 咳嗽用什么药| 枣子什么季节成熟| 宝宝肋骨外翻是什么原因| 扳机点是什么意思| 梦见打麻将是什么意思| 腊八有什么讲究| 早教是什么| 夏季穿什么鞋| 胃胀打嗝吃什么药最好| 减肥头晕是什么原因| 阑尾炎挂号挂什么科| 献殷勤是什么意思| 什么是匝道图片| 经常泡脚有什么好处| 什么叫快闪| 月经血是黑色的是什么原因| 盐酸吗啉胍片是什么药| 肾病综合症是什么病| 痛风是什么症状| 睾丸痛吃什么消炎药| 洗衣机单漂洗是什么意思| 细菌性感冒吃什么药效果好| 右胸上部隐痛什么原因| 可刀是什么意思| 喝什么茶减肥| 李五行属什么| 沁什么意思| 舌根部淋巴滤泡增生吃什么药| 子宫内膜炎吃什么药| 碰到蛇是什么征兆| 血稠吃什么药好| 东山再起是什么生肖| 最近有什么病毒| 珍珠鸟吃什么食物| 阿胶补血口服液适合什么人喝| 求知欲的欲什么意思| in77是什么意思| 什么是人生格言| 西洋参是补什么的| 结论是什么意思| 低压偏高什么原因| 尿液粉红色是什么原因| 查摆是什么意思| 1RM什么意思| rov是什么意思| 植物油是什么油| 结膜出血是什么原因| 手脚软无力是什么原因引起的| 砂仁后下是什么意思| 血压什么时候量最准确| 矿油是什么| 头晕喝什么饮料| 我国最早的中医学专著是什么| 秋水长天什么意思| 0x00000024蓝屏代码是什么意思| 1976年出生属什么生肖| exo什么时候出道的| 男属鸡的和什么属相最配| 小猫不能吃什么| 杨公忌日是什么意思| 五红汤什么时候喝最好| 12月11号是什么星座| 流产后不能吃什么东西| 肠癌是什么原因造成的| lgm是什么意思| 胆没了对身体有什么影响| 叮咛是什么意思| 海葡萄是什么东西| 做梦梦到别人死了是什么征兆| 吃华法林不能吃什么| 火把节是什么节日| 淡定从容是什么意思| 转氨酶高挂什么科| 乙肝235阳性是什么意思| 平行班是什么意思| 午时右眼跳是什么预兆| 破损是什么意思| 太妹是什么意思| 私房菜是什么意思| 辅酶q10是什么| 目翳是什么意思| 人肉搜索是什么| 鸡翅木是什么木头| 嘴巴苦是什么原因引起的| 梦见已故的老人是什么意思| 稠是什么意思| 睡眠不好去医院挂什么科| 阴囊上长了几根白毛是什么原因| 85年属什么的生肖| 什么的波涛| 混合型高脂血症是什么意思| 菱角什么时候上市| 搪塞是什么意思| 房性逸搏心律是什么意思| 力不到不为财是什么意思| 贫血喝什么口服液最好| 罗贯中是什么朝代的| 胎儿缺氧是什么原因造成的| 尿比重1.030是什么意思| 爸爸生日礼物送什么| 解析是什么意思| bang是什么意思| 荷花鱼是什么鱼| 琼瑶是什么意思| 真实的印度是什么样的| 小孩脚抽筋是什么原因引起的| 手指缝痒是什么原因| 蜂蜜有什么功效| 惊厥是什么原因引起的| 看见蛇过马路什么征兆| 舌头凉凉的是什么原因| 电销是什么| 1981年五行属什么| 什么的乌鸦| 尿路感染去医院挂什么科| braf基因v600e突变是什么意思| 大枣和红枣有什么区别| 湖南省的简称是什么| 狗为什么会吐| 不规则抗体筛查是什么意思| 补气养血吃什么中成药| 跳蚤最怕什么药| 打胎用什么药| 为什么会长湿疹| 为什么一分钟就出来了| 为什么想吐| 冲菜是什么菜| 截单是什么意思| 12月14号是什么星座| 身上经常痒是什么原因| 制动是什么意思| 梦到发大水是什么意思| 什么床不能睡觉| 酵母菌是什么| 手经常发麻是什么原因| 芝兰是什么意思| 独是什么生肖| 什么是梅尼埃综合症| 碳酸氢钠是什么东西| 什么声什么气| 上半身皮肤痒什么原因| 情感障碍是什么意思| 日本为什么侵华| 脚后跟疼挂什么科| 脚底长痣有什么说法| 喝水经常呛到是什么原因| 什么是速写| 日斤读什么字| 金刚菩提是什么植物的种子| 肝气不舒吃什么中成药| 大姨妈期间适合吃什么水果| 和田玉对身体有什么好处| ve是什么意思| 什么叫211大学| 蟋蟀是靠什么发声的| ebv病毒是什么| 什么图强| 什么是胎梦| 叶酸每天什么时候吃最好| 吃什么提高免疫力| 2.10是什么星座| 什么的尾巴有什么作用| 子宫内膜ca是什么意思| 纳差是什么意思| 海豹油有什么作用| 保险费率是什么| 什么是日间手术| 雪村和赵英俊什么关系| 屏蔽一个人意味着什么| 滴水观音叶子发黄是什么原因| 独苗是什么意思| prp治疗是什么意思| 不应期是什么意思| 纳入是什么意思| 7月15是什么节日| 中空是什么意思| kub是什么检查| 甲方乙方是什么意思| 夏天吃什么水果最好| 孕妇缺碘吃什么补最快| 4月29日是什么星座| 伊索寓言有什么故事| 百丽鞋属于什么档次| 大麦茶是什么做的| 腋毛上有白色附着物是什么| 癸水是什么| 火山飘雪是什么菜| 三伏天喝什么汤| 南无阿弥陀佛什么意思| 嗓子哑了吃什么药好| 拔智齿后要注意什么| 中性粒细胞低说明什么| 较前相仿是什么意思| 运营商是什么意思| 皮疹用什么药膏最好| 螃蟹过街的歇后语是什么| 阿胶配什么吃不上火| 蜂窝数据什么意思| met是什么意思| 鹤膝风是什么病| 仓鼠喝什么水| 荔枝长什么样| 翌字五行属什么| 脾阳虚吃什么中成药| 菟丝子是什么| 耳朵一直痒是什么原因| 61年属什么生肖| 女的肾虚是什么症状| 被隐翅虫咬了用什么药| 二哥是什么意思| 为什么招蚊子咬| 新生儿黄疸高有什么风险| 为什么会口臭的原因| 学籍有什么用| 五月二十四是什么星座| 背部疼痛是什么原因引起的| 脖子后面疼是什么原因| 中学为体西学为用是什么意思| 瞩目是什么意思| 怀孕了吃什么药能流掉| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? 详解STM32单片机的堆栈

共1条 1/1 1 跳转至

详解STM32单片机的堆栈

高工
2025-08-04 20:04:03     打赏
百度 正巧赶来的民警通过魏铭淇提前发来的照片,一眼看到了这名男子,将其抓住。

  学习STM32单片机的时候,总是能遇到“堆栈”这个概念。分享本文,希望对你理解堆栈有帮助。

    对于了解一点汇编编程的人,就可以知道,堆栈是内存中一段连续的存储区域,用来保存一些临时数据:嵌入式开发中更接近底层的汇编与C语言。堆栈操作由PUSH、POP两条指令来完成。而程序内存可以分为几个区:

栈区(stack)

堆区(Heap)

全局区(static)

文字常亮区程序代码区

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

普通单片机与STM32单片机中堆栈的区别
    普通单片机启动时,不需要用bootloader将代码从ROM搬移到RAM。

    但是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     单片机     堆栈    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
gucci是什么意思 后宫是什么意思 97年属牛的是什么命 271是什么意思 艾滋病通过什么途径传播
印度为什么没把墨脱占领 父亲坐过牢对孩子有什么影响 二脚趾比大脚趾长代表什么 感康是什么药 胃动力不足是什么原因造成的
发小是什么意思 喝酒吃头孢有什么反应 为什么湿气重 白细胞低是什么意思 辣木籽有什么功效
脸红是什么原因引起的 7月16是什么星座 兰花叶子发黄是什么原因 中老年补钙吃什么钙片好 人力资源是什么意思
女生下面长什么样hcv8jop5ns8r.cn 尿频尿急尿不尽吃什么药效果最好aiwuzhiyu.com 太阳穴长痘是什么原因hcv8jop8ns5r.cn 属猴的守护神是什么菩萨hcv8jop4ns2r.cn 大姨妈能吃什么水果hcv9jop8ns1r.cn
儿童受凉咳嗽吃什么药hcv7jop4ns8r.cn 20年属什么生肖hcv8jop4ns2r.cn 一笑倾城是什么意思travellingsim.com 地雷是什么意思hcv9jop4ns8r.cn 接骨木莓是什么hcv9jop3ns0r.cn
梦遗是什么意思wuhaiwuya.com 锡纸什么牌子的好hcv8jop5ns7r.cn 榅桲是什么水果hcv7jop9ns6r.cn 冰晶是什么hcv9jop0ns9r.cn 四级专家是什么级别hcv7jop5ns2r.cn
狄仁杰为什么才三品hcv8jop4ns5r.cn 撞车了打什么电话wuhaiwuya.com crocodile是什么牌子hcv8jop2ns4r.cn 男人下面流脓吃什么药hcv8jop3ns9r.cn 谈婚论嫁什么意思hcv8jop9ns0r.cn
百度