赞
踩
堆栈是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的内存管理掌握一下,基本入门没问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。