STM32 堆和栈的学习(二)

发布者:幸福家庭最新更新时间:2020-01-15 来源: eefocus关键字:stm32 手机看文章 扫描二维码
随时随地手机看文章

1、首先来看:栈(STACK)的问题

函数的局部变量,都是存放在”栈”里面,栈的英文是:STACK.

所以,如果一个函数的局部变量过多,程序崩溃是很容易的事情,这时候,一般你会进入到hardfault….


对于栈区,一般栈顶,也就是MSP,在程序刚运行的时候,指向程序所占用内存的最高地址 
STM32使用KEIL仿真左侧列表

图中,MSP就是:0X2000 0940. 


程序运行后,MSP就是从这个地址开始,往下给函数的局部变量分配地址.

STM32使用KEIL编译下方列表

这里的Code,RO-data,RW-data,ZI-data分别代表如下:

Code为程序代码部分 
RO-data 表示 程序定义的常量const temp; 
RW-data 表示 已初始化的局部变量 
ZI-data 表示 未初始化的局部变量

Code, RO-data,RW-data …………flash 
RW-data, ZIdata……………….RAM


(常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的)

STM32的栈,是向下生长的.事实上,一般CPU的栈增长方向,都是向下的。


2、再来说说,堆(HEAP)的问题

全局变量,静态变量,以及内存管理所用的内存,都是属于”堆”区,英文名:“HEAP”。

与栈区不同,堆区则从内存区域的起始地址,开始分配给各个全局变量和静态变量。堆的生长方向,都是向上的。在程序里面,所有的内存分为:堆+栈。

3、STM32大小端问题

STM32采用小端模式(我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式)


大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。从高(大)字节做糖葫芦串。 


小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。从低(小)字节做糖葫芦串。


4、全局变量、局部变量、动态变量、静态变量

全局静态变量:不管是否调用,它都在那里。一般在函数的外部定义,定义变量一般使用static关键字,并且在对应的 .h 文件添加关键字extra 。


局部静态变量:和全局静态变量类似,只是它定义的时候是被包含在函数内的,只在函数内部作为变量,而且是唯一的,而且使用关键字static。


局部动态变量:一般定义在函数内部,程序进入函数内,为局部变量申请内存,当函数执行完,内存被释放。然后局部变量也被释放。


全局动态变量:存在吗?全局可见但又可以踢掉的奇葩吗?抱歉,这句话对<全局>是个误解.<全局>的意思是变量本身没有编译器指定的生命周期,也就是<作用域>,但还有代码指定的生命周期.在LZ的示例里,<堆>就是这么一个东西,代码说<你在>就在,<你不在>就不在.申请了堆后,只要谁(任何位置的代码)知道这个位置是可以用的,谁都可以用(具有进程内存保护的平台除外),即使申请空间的变量<挂了>,这个空间也一直存在,直到有代码把它<销毁>掉.

关键字:stm32 引用地址:STM32 堆和栈的学习(二)

上一篇:STM32 堆和栈的学习
下一篇:stm32 栈溢出 错误

推荐阅读最新更新时间:2024-11-06 16:01

STM32复位电路
** STM32复位电路 **
[单片机]
<font color='red'>STM32</font>复位电路
一种uIP TCP/IP协议在51系列单片机上的实现
一 引言   随着信息技术的不断发展,以及人们对日常生活舒适度、方便度要求的提高,信息家电、智能仪表等产品越来越频繁的出现在我们的生活当中;人们也越来越热衷于把家电、仪表等设备连接到Internet 中,从而可以方便、及时的对它们进行远程察看、远程控制。把这些设备接入Internet ,就需要考虑TCP/IP 网络协议的实现。   51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。
[单片机]
一种uIP TCP/IP协议<font color='red'>栈</font>在51系列单片机上的实现
STM32 USB 之从0开始移植笔记
-----------------------------------动机----------------------------------- 写在前面的话:最近逛淘宝无意间发现RC522居然只要10元左右就可以包邮买到,真是太便宜了,就忍不住买了个回来玩玩。到货移植到我的板子上OK 后突然发现我的USB口紧张了,一个用来给板子供电一个插jlink 一个插入usb转串口给RC522下命令。就想着将板子供电和RC522传输用一个USB接口来实现。这就是这次折腾USB的来由~-~ ----------------------------------开始折腾USB----------------------------
[单片机]
stm32 dma方式发脉冲做位置控制
考虑到现有板子上没有fpga,对于dma方式发脉冲做位置控制设计如下 两个buff short buff1 ; short buff2 ; 里面都存放频率值,也就是说arp寄存器的值。 数组的长度为1000,是考虑到最高的脉冲频率,如果最大频率比较小,则可以适当减少数组的大小,之所以定义两个buff,是考虑到每个伺服周期计算填充一个buff,同时另一个buff就作为当前dma之用,每个伺服周期结束的时候会停止dma,然后统计已发脉冲数量,然后切换到刚刚填充好的buff,然后启动dma发脉冲。 因为dma发脉冲更新的寄存器是arp,对于ccr脉宽寄存器,则每个伺服周期开始的时候,程序自己填充即可。 上面的dma发送的方法,优点是
[单片机]
STM32】RTC实时时钟,步骤超细详解,一文看懂RTC
什么是RTC RTC (Real Time Clock):实时时钟 RTC是个独立的定时器。RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。 在断电情况下 RTC仍可以独立运行 只要芯片的备用电源一直供电,RTC上的时间会一直走。 RTC实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断)。但其高级指出也就在于掉电之后还可以正常运行。 两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时( 12 或 24 小
[单片机]
【<font color='red'>STM32</font>】RTC实时时钟,步骤超细详解,一文看懂RTC
STM32笔记之九:打断它来为我办事,EXIT (外部I/O中断)应用
a) 目的:跟串口输入类似,不使用中断进行的IO输入效率也很低,而且可以通过EXTI插入按钮事件,本节联系EXTI中断。 b) 初始化函数定义: void EXTI_Configuration(void); //定义IO中断初始化函数 c) 初始化函数调用: EXTI_Configuration();//IO中断初始化函数调用简单应用: d) 初始化函数: void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; //EXTI初始化结构定义 EXTI_ClearITP
[单片机]
关于STM32的除以0运算问题
有人使用STM32G4系列芯片开发产品。他发现程序中如果遇到除以0的操作时,会跑进出错异常中断而影响程序运行。他想知道能否通过设置,即使发生除以0操作也不让程序跑进异常中断,并期望此时的除法运行结果【也就是商】直接等于当前变量类型所支持的最大值,比如,若被除数为16位变量,则经过该除以零操作后直接为其赋值为0xffff。【实际应用中客户的需求往往也是五彩斑斓的。^_^】 事实上是否可以如该STM32用户所愿呢?我们不妨一起看看。 首先,这个问题不属于STM32外设相关的,而是内核相关的。客户选用的是Cortex M4的内核STM32芯片,那我们就从M4内核手册中寻找相关内容。 我们通过查看ARM M4的内核手册,可以看
[单片机]
STM32的icf文件有什么作用
每个芯片开发商都会针对每款芯片来编写一个.icf文件就是传说中的链接文件。对于基本的应用,这个.icf文件足以满足你的工程需要。但有时也会需要改动,比如当你的项目要添加外部RAM时就要修改一下icf。 1、Icf到底干了啥呢? 定义了芯片存储空间的大小。 定义ROM的大小和起始、结束地址。 定义RAM的大小和起始、结束地址。 当然这些都是最基本的,你也可以设置以下的东西来匹配你的具体项目。 链接时是否保存位块与符号 设置你的启动过程 设置你的堆与栈的大小和对齐方式 修改编译器默认的初始化过程。 关于默认库的处理等。。。 2、下面我简单介绍几个功能,详细请参考 EWARM_DevelopmentGuide 2.1 添加额外的
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved