01前言
STM32片上自帶FLASH和SRAM,簡(jiǎn)單講FLASH用來存儲(chǔ)程序的,SRAM是用來存儲(chǔ)運(yùn)行程序中的中間變量。本文詳細(xì)分析下如何查看程序中FLASH和SRAM的使用情況。
本文開發(fā)工具: keil5
芯片: STM32F105VCT6
02FLASH和SRAM介紹
FLASH存儲(chǔ)器又成為閃存,它與EEPROM都是掉電后數(shù)據(jù)不丟失的存儲(chǔ)器,但是FLASH的存儲(chǔ)容量都普遍的大于EEPROM,在存儲(chǔ)控制上,最主要的區(qū)別是FLASH芯片只能一大片一大片地擦除,而EEPROM可以單個(gè)字節(jié)擦除。
SRAM是靜態(tài)隨機(jī)存取存儲(chǔ)器。它是一種具有靜止存取功能的內(nèi)存,不需要刷新電路即能保存它內(nèi)部存儲(chǔ)的數(shù)據(jù)。STM32F1系列可以通過FSMC外設(shè)來拓展SRAM。
注意:SRAM和SDRAM是不相同的,SDRAM是同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器,同步是指內(nèi)存工作需要同步時(shí)鐘,內(nèi)部的命令的發(fā)送與數(shù)據(jù)的傳輸都以它為基準(zhǔn);動(dòng)態(tài)是指存儲(chǔ)陣列需要不斷的刷新來保證數(shù)據(jù)不丟失;隨機(jī)是指數(shù)據(jù)不是線性依次存儲(chǔ),而是自由指定地址進(jìn)行數(shù)據(jù)讀寫。STM32的F1系列是不支持SDRAM的。
stm32不同型號(hào)的SRAM和FLASH大小是不相同的,可在datasheet中查看如下圖:


03編譯結(jié)果分析
在keil中編譯結(jié)果如下圖:

打開生成的map文件拉到最后可看到如下:

編譯結(jié)果里面幾個(gè)的含義
Code:代碼空間,本質(zhì)是ARM指令( FLASH)。
RO-data:即 Read Only-data, 表示程序定義的常量,如 const 類型( FLASH)。
RW-data:即 Read Write-data, 非0初始化的全局和靜態(tài)變量占用的RAM大小,同時(shí)還要占用等量的ROM大小用于存放這些非0變量的初值(FLASH+RAM)。
ZI-data:即 Zero Init-data, 0初始化的內(nèi)存區(qū)的大?。ㄔ搮^(qū)域3個(gè)用途:0初始化的全局和靜態(tài)變量+堆區(qū)+棧區(qū))(RAM)。
由上可知:
程序占用FLASH=Code + RO-data + RW-data 即map文件中ROM size
程序占用RAM = RW-data + ZI-data 即map文件中RW size
常見的倆個(gè)疑問:
1、RW-data為什么會(huì)即占用Flash又占用RAM空間?
由前文知道RAM掉電數(shù)據(jù)會(huì)丟失,RW-data是非0初始化的數(shù)據(jù),已初始化的數(shù)據(jù)需要被存儲(chǔ)在掉電不會(huì)丟失的FLASH中,上電后會(huì)從FLASH搬移到RAM中。
2、為什么燒錄的鏡像文件不包含ZI-data呢?
我們都知道在燒寫程序的時(shí)候,需要燒寫bin文件或者h(yuǎn)ex文件到STM32的flash中,被燒寫的文件稱為鏡像像文件image。image的內(nèi)容包含這三個(gè)Code 、 RO-data 和 RW-data。
通過第一個(gè)問題大家應(yīng)該有所理解,因?yàn)閆I數(shù)據(jù)是0,沒必要包含,只要在程序運(yùn)行前把ZI數(shù)據(jù)區(qū)域一律清零即可,包含進(jìn)去反而浪費(fèi)Flash存儲(chǔ)空間。
編輯:jq
-
FlaSh
+關(guān)注
關(guān)注
10文章
1715瀏覽量
154711 -
存儲(chǔ)器
+關(guān)注
關(guān)注
39文章
7715瀏覽量
170864 -
STM32
+關(guān)注
關(guān)注
2305文章
11121瀏覽量
371189
原文標(biāo)題:STM32的FLASH和SRAM的使用情況分析
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
AT32F系列 使用DMA將數(shù)據(jù)從FLASH傳輸?shù)?b class='flag-5'>SRAM
客戶使用profinet轉(zhuǎn)devicenet協(xié)議網(wǎng)關(guān)的使用情況分享
在Keil5中查看棧大小
如何檢查EZ-USB? CX3 上的 SRAM 使用情況(JTAG 不可用)?
如何在應(yīng)用程序調(diào)試期間分析棧和堆使用情況
STM32C011開發(fā)(3)----Flash操作
NAND Flash的基本原理和結(jié)構(gòu)
請(qǐng)問如何在Keil開發(fā)環(huán)境中查看代碼大小和SRAM使用情況?
請(qǐng)問如何僅使用軟件和 TC375 精簡(jiǎn)板來測(cè)量函數(shù)調(diào)用的堆棧使用情況?
如何將Flash刷寫程序放到SRAM中運(yùn)行?
OBC/DC-DC/BMS/熱管理/智能座艙磁性元件使用情況與要求

剖析STM32的FLASH和SRAM的使用情況
評(píng)論