0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

剖析STM32的FLASH和SRAM的使用情況

FPGA之家 ? 來源:嵌入式案例Show ? 作者:嵌入式案例Show ? 2021-04-09 17:53 ? 次閱讀

01前言

STM32片上自帶FLASH和SRAM,簡單講FLASH用來存儲程序的,SRAM是用來存儲運行程序中的中間變量。本文詳細分析下如何查看程序中FLASH和SRAM的使用情況。

本文開發(fā)工具: keil5

芯片: STM32F105VCT6

02FLASH和SRAM介紹

FLASH存儲器又成為閃存,它與EEPROM都是掉電后數(shù)據(jù)不丟失的存儲器,但是FLASH的存儲容量都普遍的大于EEPROM,在存儲控制上,最主要的區(qū)別是FLASH芯片只能一大片一大片地擦除,而EEPROM可以單個字節(jié)擦除。

SRAM是靜態(tài)隨機存取存儲器。它是一種具有靜止存取功能的內(nèi)存,不需要刷新電路即能保存它內(nèi)部存儲的數(shù)據(jù)。STM32F1系列可以通過FSMC外設(shè)來拓展SRAM。

注意:SRAM和SDRAM是不相同的,SDRAM是同步動態(tài)隨機存儲器,同步是指內(nèi)存工作需要同步時鐘,內(nèi)部的命令的發(fā)送與數(shù)據(jù)的傳輸都以它為基準;動態(tài)是指存儲陣列需要不斷的刷新來保證數(shù)據(jù)不丟失;隨機是指數(shù)據(jù)不是線性依次存儲,而是自由指定地址進行數(shù)據(jù)讀寫。STM32的F1系列是不支持SDRAM的。

stm32不同型號的SRAM和FLASH大小是不相同的,可在datasheet中查看如下圖:

08d40a92-990f-11eb-8b86-12bb97331649.png

08ee58de-990f-11eb-8b86-12bb97331649.png

03編譯結(jié)果分析

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

0915ec64-990f-11eb-8b86-12bb97331649.png

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

093488e0-990f-11eb-8b86-12bb97331649.png

編譯結(jié)果里面幾個的含義

Code:代碼空間,本質(zhì)是ARM指令( FLASH)。

RO-data:即 Read Only-data, 表示程序定義的常量,如 const 類型( FLASH)。

RW-data:即 Read Write-data, 非0初始化的全局和靜態(tài)變量占用的RAM大小,同時還要占用等量的ROM大小用于存放這些非0變量的初值(FLASH+RAM)。

ZI-data:即 Zero Init-data, 0初始化的內(nèi)存區(qū)的大小(該區(qū)域3個用途:0初始化的全局和靜態(tài)變量+堆區(qū)+棧區(qū))(RAM)。

由上可知:

程序占用FLASH=Code + RO-data + RW-data 即map文件中ROM size

程序占用RAM = RW-data + ZI-data 即map文件中RW size

常見的倆個疑問:

1、RW-data為什么會即占用Flash又占用RAM空間?

由前文知道RAM掉電數(shù)據(jù)會丟失,RW-data是非0初始化的數(shù)據(jù),已初始化的數(shù)據(jù)需要被存儲在掉電不會丟失的FLASH中,上電后會從FLASH搬移到RAM中。

2、為什么燒錄的鏡像文件不包含ZI-data呢?

我們都知道在燒寫程序的時候,需要燒寫bin文件或者hex文件到STM32的flash中,被燒寫的文件稱為鏡像像文件image。image的內(nèi)容包含這三個Code 、 RO-data 和 RW-data。

通過第一個問題大家應該有所理解,因為ZI數(shù)據(jù)是0,沒必要包含,只要在程序運行前把ZI數(shù)據(jù)區(qū)域一律清零即可,包含進去反而浪費Flash存儲空間。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1614

    瀏覽量

    147652
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7430

    瀏覽量

    163514
  • STM32
    +關(guān)注

    關(guān)注

    2264

    文章

    10854

    瀏覽量

    354289

原文標題:STM32的FLASH和SRAM的使用情況分析

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    LMX2592正常使用情況下溫度大概有多少?

    你好,LMX2592如果將 OUTA_PD = 1;OUTB_PD = 1;為什么芯片還是很燙,正常使用情況下溫度大概有多少,對于溫度的變化可以提供一下參考嗎
    發(fā)表于 11-08 08:32

    TMS320C64x在高性能DSP應用中的高速緩存使用情況

    電子發(fā)燒友網(wǎng)站提供《TMS320C64x在高性能DSP應用中的高速緩存使用情況.pdf》資料免費下載
    發(fā)表于 10-21 09:43 ?0次下載
    TMS320C64x在高性能DSP應用中的高速緩存<b class='flag-5'>使用情況</b>

    Banana Pi BPI-M7 RK3588開發(fā)板在 Linux 上檢查 Rockchip NPU 使用情況

    如下介紹如何監(jiān)控 Rockchip 設(shè)備的 NPU 使用情況。 如今,新型設(shè)備開始配備內(nèi)置 AI 芯片?!癆I 芯片”的正確技術(shù)術(shù)語是 NPU,即神經(jīng)處理單元。 如果您有板載 NPU
    的頭像 發(fā)表于 07-11 16:47 ?336次閱讀
    Banana Pi BPI-M7 RK3588開發(fā)板在 Linux 上檢查 Rockchip NPU <b class='flag-5'>使用情況</b>

    如何查看TC397內(nèi)存的使用情況

    Hi,請問,如何查看 TC397 內(nèi)存的使用情況?謝謝!
    發(fā)表于 05-22 07:50

    可以從下面的圖看出我的工程flash和ram的使用情況嗎?

    芯片是:dspf28335;可以從下面的圖看出我的工程flash和ram的使用情況嗎?感覺flash還可以,ram有點不夠用了,請求大師指點,如何分析?
    發(fā)表于 05-11 10:11

    CUBEIDE運行完可以看RAM的使用情況,運行中可以實時查看RAM的使用情況嗎?

    CUBEIDE運行完可以看RAM的使用情況,運行中可以實時查看RAM的使用情況嗎?以及負載情況? 圖片是運行完可以看RAM使用情況,是否可以運行中實時查看?是不是cubemonito
    發(fā)表于 03-12 07:56

    rtthread編譯后如何查看堆棧空間使用情況?

    rtthread編譯后如何查看堆??臻g使用情況,現(xiàn)在只能在編譯完成后看到總大小,有沒有辦法能看到詳細的使用情況。 由于RAM只有128K,除去內(nèi)存池32k,想看看剩余的RAM在哪用了
    發(fā)表于 03-05 07:58

    如何知道嵌入式電子控制單元 (ECU) 中的RAM使用情況?

    我知道嵌入式軟件構(gòu)建工具會報告程序閃存使用情況。我認為他們也報告 RAM 使用率,但他們是否報告最大 RAM 使用率? 生成工具可能不知道在運行時將使用多少堆。是否有構(gòu)建工具不知道的其他 RAM 使用情況? 如何準確找出運行時使用了多少RAM?
    發(fā)表于 01-22 07:02

    有什么辦法可以獲取TC397中的實時內(nèi)存使用情況嗎?

    有什么辦法可以獲取 TC397 中的實時內(nèi)存使用情況嗎? 例如,我能否通過計算當前堆棧指針值和基本堆棧指針值之間的差異來獲得使用的內(nèi)存大小?
    發(fā)表于 01-22 06:18

    請問TC397如何查看RAM和pFlash的使用情況?

    請問 TC397 如何查看 RAM 和 pFlash 的使用情況?
    發(fā)表于 01-19 06:37

    正常使用情況下LTC3331的ship引腳接高電平還是低電平?

    正常使用情況下,LTC3331的ship引腳接高電平還是低電平?
    發(fā)表于 01-05 11:07

    stm32變量能存進flash中嗎

    當涉及到將變量存儲在Flash中時,我們通常指的是將變量存儲在STM32微控制器的閃存器件中。在STM32芯片中,閃存用于存儲程序代碼和只讀數(shù)據(jù),但對于一些應用情況,我們可以使用閃存來
    的頭像 發(fā)表于 12-28 15:33 ?2022次閱讀

    顯示W(wǎng)eb服務器中的內(nèi)存使用情況

    Web服務器上,您可以在“內(nèi)存”選項卡的“診斷”網(wǎng)頁上找到有關(guān)各個內(nèi)存區(qū)域當前使用情況的信息。
    的頭像 發(fā)表于 12-18 10:18 ?737次閱讀
    顯示W(wǎng)eb服務器中的內(nèi)存<b class='flag-5'>使用情況</b>

    linux查看端口占用情況

    摘要:本文將詳細介紹在Linux操作系統(tǒng)下如何查看端口占用情況。我們將會講解如何使用命令行工具以及圖形界面工具來查看端口占用情況,并通過實例演示如何解決端口沖突等問題。讀者將能夠掌握全面的方法來詳實
    的頭像 發(fā)表于 11-17 09:39 ?1414次閱讀

    查看Linux系統(tǒng)內(nèi)存使用情況的幾種方法

    在Linux系統(tǒng)中,內(nèi)存監(jiān)控是優(yōu)化系統(tǒng)性能的關(guān)鍵。本文為你介紹12種方法,幫助你全面掌握Linux系統(tǒng)的內(nèi)存使用情況。這些方法包括查看/proc/meminfo、使用atop、free、GNOME System Monitor等工具,讓你快速獲取有關(guān)物理內(nèi)存、交換空間、緩沖區(qū)和緩存區(qū)等信息。
    的頭像 發(fā)表于 11-13 09:30 ?1.3w次閱讀
    查看Linux系統(tǒng)內(nèi)存<b class='flag-5'>使用情況</b>的幾種方法