硬件上内存的分配问题(以STM32F429IGT6为例子)

硬件上的内存归为3类:

heap     堆

stack     栈

SRAM        静态存储区(全称为Static Random Access Memory)

Flash    闪存

SRAM:从编译开始就存在,在整个程序的运行周期一直存在,用于存放局部变量global,静态变量static

Flash:一般用于存放程序代码,掉电不消失,也可用于保存数据,还有一种EEPROM的内存也是数据掉电不消失,但是EEPROM的内存一般很小,只有几百Byte,而Flash一般都是MB级别的,Flash是以扇区为最小单位存在的,EEPROM则可以对单个地址的数据修改。

stack:用于存放局部变量,当变量所在函数运行完后,立即释放

heap:由malloc函数或者new指针分配,由free函数或者delect运算符释放,期间一直存在(慎用,小型硬件系统易崩溃)

在STM32F429IGT6中,芯片本身的SRAM有256KB,Flash有1024KB,堆和栈的大小我不太清楚,但是在CUBEMX生成工程时可以看到: 

但是如果运行UI界面或者算法,SRAM是无法满足庞大的内存需求的,因此一般的开发板上都会帮你拓展一块静态存储区,我用的正点原子家的核心板上就嵌入了一块W9825G6KH,一块32MB的SDRAM(synchronous dynamic random access memory)同步动态存储区。

以上就是我对硬件系统中内存的一些讨论,大家有补充或者指正的欢迎在评论区留言。

原文地址:https://www.cnblogs.com/showtime20190824/p/11415584.html