pc蛋蛋赚多被黑_STM32堆栈空间大小设置

2019-12-02来源: eefocus关键字:STM32  堆栈空间  大小设置

1. 设置堆栈空间大小


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

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

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


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


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)通常是指用来存放程序执行代码的一块内存区域。


pc蛋蛋赚多被黑    这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写,即允许修改程序)。


    在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

 

堆(heap):

    堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。

    当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);

    当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。


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


栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。


堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。pc蛋蛋赚多被黑分配方式类似于数据结构中的链表。 


全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。pc蛋蛋赚多被黑程序结束后由系统自动释放。 


pc蛋蛋赚多被黑文字常量区:常量字符串就是存放在这里的。 


程序代码区:存放函数体的二进制代码。


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

关键字:STM32  堆栈空间  大小设置 编辑:什么鱼 引用地址:http://news.socialskive.com/mcu/ic481700.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过上海快三app赚钱—主页-彩经_彩喜欢子邮件或上海快三app赚钱—主页-彩经_彩喜欢话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32--堆栈空间
下一篇:STM32 堆栈的理解

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM8S存储器的读写操作
/************************************************************************************************************************************ Name    : STM8S存储器的读写操作* Author  : MingMing* Release : 2014/1/2* Update  : 2014/1/2* E-mail  : clint.wang@foxmail.com
发表于 2019-12-05
stm8l051 halt之后外部中断唤醒问题
pc蛋蛋赚多被黑最近用到stm8l051 halt,在halt之后开启了外部中断,有时灵,有时不灵,设置下降沿触发,但是按键(低有效)放开了才会从HALT退出,最后发现在进去外部中断的时候一直在外部中断里面不退出。在外部中断程序里面把端口的外部中断和端口使能的外部中断功能关闭,问题解决,可以在下降沿从halt退出。1、开启halt,其他代码省略,只贴halt部分:    /* 禁止TIM3 */    TIM3->SR1 = (uint8_t)(~(uint8_t)TIM3_IT_Update);    CLK_PeripheralClockConfig
发表于 2019-12-05
STM8L052低功耗模式
Stm8L系列单片机的低功耗有五种模式:§ wait模式§ Lowpower run模式§ Lowpower wait模式§ Active-haltwith full RTC模式§ Halt模式最低功耗的就是就是halt模式。这里也主要总结一下如何进入halt模式,进入以后可以通过什么方式唤醒,以及有很多客户会关心的如何自动唤醒。Halt模式进入很简单,执行一条halt指令,调用库函数也就是halt()就行了。但是进入前要注意把所有的中断挂起标志给清除掉。要是不清零又恰巧有中断标志的时候进入该模式也会被立马唤醒。进入这种模式,所有的外设全都关闭了,所有时钟关闭。这时候它自己是醒不过来的,只能靠掐人中(给个外部中断)或者重新复活
发表于 2019-12-05
解决STM8类型单片机空间太小,使用不了printf串口打印问题
概述:在使用STM8L101F3这款单片机时,由于它只有8K的flash,空间非常小,只要调用C库函数printf编译后整个文件很大,直接程序溢出。这也就意味着我们实现printf串口打印调试就没办法进行。既然使用不了库函数,那么我们就可以自己动手封装类似printf的函数,这样我们就可以实现数据串口打印啦。这里就直接放上我的STM8L101F3的部分源码了,希望可以给你一些参考。源码:#include "stdarg.h"#include "stm8l10x.h" void USART_Config(void){    /*Set the USART RX
发表于 2019-12-04
解决STM8类型单片机空间太小,使用不了printf串口打印问题
基于STM8的IIC协议--协议篇
4.3.8代码示例。3.6 数据有效性  I2C总线进行数据传送时,时钟信号为高上海快三app赚钱—主页-彩经_彩喜欢平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低上海快三app赚钱—主页-彩经_彩喜欢平期间,数据线上的高上海快三app赚钱—主页-彩经_彩喜欢平或低上海快三app赚钱—主页-彩经_彩喜欢平状态才允许变化。3.7 I2C通信总过程 4. 例程4.1 编译环境:  我的编译环境是IAR,这款软件是现在STM8的主流平台,比较推荐。不过我打算等到STCubeMX更新出比较方便的版本后再去使用Keil5,因为我在用STM32的时候就是利用Keil5,的确很方便,你们也可以学着用一下。4.2 主芯片:  我的主芯片是STM8S系列中的103,其中STM8S的003、005、和103、105,配置一样(外设和CPU频率,FLASH),在代码相同的
发表于 2019-12-04
基于STM8的IIC协议--协议篇
基于STM8的ADC读取---STM8-第四章
和连续转换的扫描模式具有上限和下限门槛的模拟看门狗模拟看门狗时间发生可产生中断----------------------------------------------------------------------------------------------------------------------------------3. 例程3.1 编译环境  我的编译环境是IAR,这款软件是现在STM8的主流平台,比较推荐。不过我打算等到STCubeMX更新出比较方便的版本后再去使用Keil5,因为我在用STM32的时候就是利用Keil5,的确很方便,你们也可以学着用一下。3.2 主芯片  我的主芯片是STM8S系列中的103
发表于 2019-12-04
基于STM8的ADC读取---STM8-第四章
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

上海快三app赚钱—主页-彩经_彩喜欢子工程世界版权所有 京ICP证060456号 京ICP备10001474号 上海快三app赚钱—主页-彩经_彩喜欢信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 socialskive.com, Inc. All rights reserved