当前位置:   article > 正文

STM32的堆栈_stm32 堆栈是什么意思

stm32 堆栈是什么意思

堆栈是RAM的一个区域,只有在程序运行的时候占用RAM

在stm32的启动文件.s文件里面,就有堆栈的设置,其实这个堆栈的内存占用就是在上面RAM分配给RW-data+ZI-data之后的地址开始分配的。

堆:是编译器调用动态内存分配的内存区域。

栈:是程序运行的时候局部变量的地方,所以局部变量用数组太大了都有可能造成栈溢出。

堆栈大小只有在程序运行后才能知道,如果堆栈溢出,就会进硬件错误中断

 

STM32RCT6有256的flash和48k的RAM

STM32采用的Crotex_M3内核存储使用哈佛结构,程序存储器,数据存储器,寄存器,外设都被分配在固定的线性空间上

Flash可以像硬盘一样存数据,也可以直接像RAM运行,一般在里面放bootload ,程序执行代码

单片机是一种集成电路芯片,集成CPU、RAM、ROM、多种I/O口和中断系统、定时器/计数器等功能。CPU中包括了各种总线电路,计算电路,逻辑电路,还有各种寄存器。Stm32有通用寄存器 R0‐ R15 以及一些特殊功能寄存器,其中包括了堆栈指针寄存器。当stm32正常运行程序的时候,来了一个中断,CPU就需要将寄存器中的值压栈到RAM里,然后将数据所在的地址存放在堆栈寄存器中。等中断处理完成退出时,再将数据出栈到之前的寄存器中,这个在C语言里是自动完成的。

MDK下Code, RO-data,RW-data,ZI-data这几个段:

Code是存储程序代码的。

​RO-data是存储const常量和指令。

​RW-data是存储初始化值不为0的全局变量。掉电之后RW Data是存储在FLASH中的。上电后再搬到RAM中

​ZI-data是存储未初始化的全局变量或初始化值为0的全局变量。

Flash=Code + RO Data + RW Data;

RAM= RW-data+ZI-data;

了解完堆栈,再对STM32的内存管理掌握一下,基本入门没问题

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/75922
推荐阅读
相关标签
  

闽ICP备14008679号