STM32堆栈空间大小设置

news/2025/1/12 10:06:08/

1. 设置堆栈空间大小

在使用STM32编程时,一般情况下我们不会关注堆栈空间的大小,因为在STM32的启动文件中,已经帮我们预先设置好了堆栈空间的大小。如下图所示的启动代码中,Stack栈的大小为:0x400(1024Byte),Heap堆的大小为:0x200(512Byte)。

这也是为什么一个基础的工程编译后,RAM的空间也占用了1.6K左右的原因,因为堆栈的空间均分配在RAM中,可在编译的map文件中查看RAM资源占用的情况。

若工程中使用的局部变量较多,定义的数据长度较大时,若不调整栈的空间大小,则会导致程序出现栈溢出,程序运行结果与预期的不符或程序跑飞。这时我们就需要手动的调整栈的大小。

当工程中使用了malloc动态分配内存空间时,这时分配的空间就为堆的空间。所以若默认的堆空间大小不满足工程需求时,就需要手动调整堆空间的大小。

STM32有两种调节堆栈空间大小的方式:

1. 直接在启动文件中修改堆栈空间的大小,如图1所示的位置;

2. 打开启动文件,点击下方Configuration Wizard,可在Option的设置框中设置堆栈空间的大小。

2. 相关理论补充

bss段:
    bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。
    bss是英文Block Started by Symbol的简称。
    bss段属于静态内存分配。

data段:
    数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。
    数据段属于静态内存分配。

text段:
    代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。
    这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写,即允许修改程序)。
    在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
 
堆(heap):
    堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。
    当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);
    当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。

查阅网上的资料,理解堆和栈的区别: 

  • 栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。
  • 堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。 
  • 全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统自动释放。 
  • 文字常量区:常量字符串就是存放在这里的。 
  • 程序代码区:存放函数体的二进制代码。

注意:堆和栈,一般堆是由低地址往上(高地址)增长,栈是由高地址向下(低地址)增长。都是连续的,C语言不提供内存保护机制类似的功能,如果一直堆一直增长,栈一直申请,然后就会导致栈溢出,程序崩溃。

 


http://www.ppmy.cn/news/724266.html

相关文章

32位计算机最大内存怎么算,windows32位系统支持多大内存 怎么查看计算机内存

windows 32位系统支持多大内存?大家都知道,电脑有32位系统和64位系统之分,支持的内存也是不同的。最近有用户就特别好奇,32位的操作系统到底支持多大的内存呢?电脑又要如何查看计算机内存呢?假如你想了解的…

dig/curl/ping的用法和区别

dig是一种DNS工具,用于查询DNS服务器上的域名解析信息。它可以查询域名的IP地址、MX记录、CNAME记录等。dig可以帮助用户诊断DNS解析问题,例如查询某个域名是否被正确解析,或者查看某个域名的DNS记录是否正确。 用法: dig [选项]…

python导入的模块搜索顺序详解(python import搜寻模块的机制详解)

参考 python导入的模块搜索顺序详解(python import搜寻模块的机制详解):https://blog.csdn.net/qq_27825451/article/details/100552739 import sys sys.path 返回的列表为: [, # 运行程序的根目录D:\\ProgramData\\Anaconda3…

坐飞机还是尽量早点出发(差点误机)

昨天早上起来,计划7点出发。结果一折腾,再打车,快7点半了。大家知道,这个时候路上很堵的,又是周一……心里这个急啊。每个路口都堵,而且都是红灯,一个绿灯还过不了。误机…

倒计时11天!全球边缘计算大会参会指南来啦!

全球边缘计算大会•上海站 参会指南 见证边缘的力量 10月23日(周六) 上海长宁区天山西路舜元会议中心(靠近虹桥) 目录 1.大会介绍 2.主办单位 3.峰会议程 4.交通指南 4.1 飞机 4.2 高铁 5.天气指南 6.签到&用餐指南 6.1 签到…

通信工程师出差生存指南

对于通信人来说,出差是一件很常见的事情。 且不说售前售后那些需要直面客户的岗位,就连研发,也经常会被安排出差。美其名曰:“外场支援”。 然而,就是这么一件看似普通的任务,往往会有同事在上面吃亏&#…

android 飞行模式做了什么好处,手机“飞行模式”竟然有这么多好处?

原标题:手机“飞行模式”竟然有这么多好处? 每部手机都有飞行模式,原本的用意是关闭所有网络,在飞机飞行的途中不会干扰到飞机上面的仪器。 那为什么坐飞机的时候必须关机呢?主要是因为即使在飞行模式下,手…

机器视觉工程师国内出差必备神器

海康机器视觉Visionmaster-缺失检测 1) 充电宝 ,现在手机太重要了。出门可以不带钱包,不带银行卡,但是一定会带手机,手机必须保证有电,方便沟通,遇到紧急情况也可以报打110。 2)洗漱…