ARM STM32中的程序是在RAM里还是在FLASH里运行?

电子说

1.2w人已加入

描述

STM32有两个存储空间,一个是片上的FLASH,一个是片上的RAM。RAM相当于内存,FLASH相当于硬盘。(以下英文大小写不分)

FlaSh

Keil下,工程编译完成总会出现上面的信息,这些信息都代表什么呢?代表程序占用的空间。

Code表示程序代码部分

RO-data 表示程序定义的常量(如:intconst x等);

RW-data 表示已初始化的全局变量

ZI-data 表示未初始化的全局变量,以及初始化为0的变量

下面给出三个值:

RO Size= Code + ROData (程序占用FLASH空间的大小)

RW Size=RW Data + ZIData (运行时程序占用RAM空间的大小)

ROM Size=Code + RO Data + RWData (烧写时程序占用FLASH空间的大小)

我们都知道,在烧写程序的时候,需要烧写bin文件或者hex文件到STM32的flash当中,被烧写的文件称为映像文件image。Image的内容包含三部分:code,RO-data 和RW-data。

为什么Image不包含ZI数据呢,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域(这一区域在RAM中)一律清零即可。包含进去反而浪费flash存储空间。

STM32上电启动以后,cpu根据boot0和boot1的硬件引脚决定从flash还是ram中启动,默认是从flash中启动;启动之后会搬运rw-data到ram,但是不会搬运code;也就是说cpu执行的代码是在flash中读取的,而不是在ram中。当然这个flash是nor型的.

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分