STM32存儲結構

我們在使用Keil編譯程序成功后會,有一行各部分占用內存的提示信息,如下

Program Size:Code=7492 RO-data=556 Rw-data=72 ZI-data=11688,這是stm32代碼編譯后的提示

我們分析一下這個編譯輸出:

- Code: 7492字節 -> 代碼部分(存放在Flash)

- RO-data: 556字節 -> 只讀數據(存放在Flash)

- RW-data: 72字節 -> 已初始化的讀寫數據(在Flash中存儲初始值,運行時拷貝到RAM)

- ZI-data: 11688字節 -> 未初始化的數據(運行時在RAM中初始化為零)

所以,占用Flash的空間為:Code + RO-data + RW-data(因為RW-data的初始值需要存儲在Flash中) 即:7492 + 556 + 72 = 8120字節 ,但是注意,ZI-data不占用Flash空間,因為它只需要在程序運行時在RAM中分配并初始化為零。

因此,這個程序占用的Flash空間為8120字節。 另外,程序運行時占用的RAM空間為:RW-data + ZI-data = 72 + 11688 = 11760字節。

總結:

?Flash占用:8120字節? 約7.93KB

?RAM占用:11760字節? 約11.48kB

并且我們在購買單片機的時候會經常看到一下字樣,Flash ,RAM等今天我們將解密他們究竟是什么

簡單來說:

  • Flash大小:決定了你的程序代碼能寫多大,以及能存儲多少常量數據(如圖片、字體等)。如果你的程序很大,就要選Flash大的型號。

  • RAM大小:決定了你的程序運行時能同時使用多少變量和數據。如果你的程序需要處理大量數據、有很多全局變量、或者使用了復雜的算法和遞歸,就需要更大的RAM。RAM不足是導致程序莫名崩潰的常見原因。

要想深入了解這些東西 需要我們對STM32存儲器劃分結構有一定了解

STM32的存儲器結構采用了哈佛架構(Harvard Architecture),這意味著程序存儲器(Flash)和數據存儲器(RAM)在物理上是分開的并且有獨立的地址總線和數據通路,這使得CPU可以同時取指和訪問數據,提高了執行效率。

地址劃分

Flash

(ROM)

0x0800 0000-程序存儲器存儲C語言編譯之后的代碼
0x1FFF F000-系統存儲器存儲BootLoader,用于串口下載
0x1FFF F800-選項字節存儲一些獨立于代碼的配置參數
RAM0x2000 0000-運行內存SRAM存儲運行中的臨時變量
0x4000 0000-外設寄存器存儲各個外設的配置參數
0xE000 0000-內核外設寄存器存儲內核各個外設的配置參數

當芯片手冊上標稱?“64KB Flash”?時,這個總容量通常包含了主Flash、系統存儲器和選項字節等所有部分。需要查閱芯片的內存映射圖來了解具體是如何劃分的。例如,一顆62KB Flash的STM32芯片,其內存映射可能是:62KB的主Flash + 2KB的系統存儲器 + 一小部分(如16字節)的選項字節。

什么是Flash和RAM?

1.Flash (閃存)

  • 它是什么:是一種非易失性存儲器。意思是即使斷電,里面存儲的數據也不會丟失。

  • 在辦公室比喻中:它就是你的文件柜。你把不經常用但很重要的東西(比如項目文檔、參考資料、年度報告)長期存放在這里。

  • 在單片機中的作用:

    • 存儲程序代碼:你編寫好的程序,經過編譯后生成的機器碼,就永久地燒錄(存儲)在Flash中。單片機一上電,就從這里讀取指令來執行。

    • 存儲常量數據:比如固定的字體、圖片、音樂數據、配置參數等只讀不寫的數據。

  • 特點速度較慢(相比RAM)、容量較大(相比RAM)、斷電數據不丟失可擦寫(但次數有限,通常10萬次以上)。

簡單記:Flash是放程序的地方,斷電還在

2. RAM (隨機存取存儲器)

  • 它是什么:是一種易失性存儲器。意思是只有在通電時才能保持數據,一旦斷電,里面的所有數據都會丟失。

  • 在辦公室比喻中:它就是你的辦公桌面。你正在處理的文件、臨時記下的筆記、計算中的草稿紙都放在桌面上。這些東西只是暫時用一下,工作結束就收走或扔掉。

  • 在單片機中的作用:

    • 存儲變量:程序運行中產生的臨時變量、中間計算結果、函數調用的堆棧等都放在RAM里。

    • 動態內存分配:像malloc()new申請的內存空間,也位于RAM中。

  • 特點速度極快容量較小(在單片機里通常是KB級別)、斷電數據丟失可無限次讀寫

簡單記:RAM是程序運行時的臨時工作區,斷電就清空。

了解完什么是Flash我們來看看STM32的Flash劃分了那幾部分

1. 主Flash存儲器 (Main Flash Memory)

  • 位置:Flash的絕大部分區域。

  • 功能:這就是我們通常說的“Flash”,用來存儲你編寫的應用程序代碼常量數據

  • 權限:用戶程序可以自由地讀取這里的數據。在允許自我編程(IAP)的單片機上,用戶程序也可以擦寫這個區域(比如用于固件升級)。

  • 比喻:大樓里開放的辦公區域,員工可以自由進出和使用。

2. 系統存儲器 (System Memory)

  • 位置:Flash中一段固定的、出廠前預設好的區域。

  • 功能:里面存儲的是芯片制造商預先燒錄好的Bootloader程序。這個Bootloader通常是用于通過某種串行接口(如USART, USB, CAN等)來下載用戶程序到主Flash存儲器。最常見的例子就是STM32的USB DFUUART燒錄功能。你選擇從“系統存儲器啟動”時,芯片就會運行這里的程序。

  • 權限:這段區域是只讀的。用戶無法修改或擦除這里的內容,這是芯片廠商寫死的,為了防止用戶誤操作導致芯片“變磚”。

  • 比喻:大樓里一個上了鎖的機房,里面放著大樓的基礎控制系統(如消防、供電)。只有大樓管理員(芯片廠商)有鑰匙,普通員工(用戶)只能使用它提供的功能(比如通過它來部署新程序),但不能改動里面的設備。

3. 選項字節 (Option Bytes)

  • 位置:Flash中一個非常小但極其重要的特殊區域。

  • 功能:它不是用來存儲程序或數據的,而是用來配置單片機的硬件特性的,可以看作是芯片的“配置開關”。常見的配置包括:

    • 讀寫保護:給主Flash上鎖,防止別人通過調試器讀取或抄襲你的程序代碼。

    • 寫保護:保護Flash的某些扇區不被意外擦寫。

    • 硬件看門狗:配置看門狗是硬件開啟還是軟件開啟。

    • 復位級別:配置NRST引腳是作為復位引腳還是普通IO。

    • 啟動配置:決定芯片上電后從主Flash、系統存儲器還是RAM啟動。

  • 權限:用戶可以通過特定的編程流程(通常需要先解鎖)來修改選項字節。修改后需要觸發一個系統復位才能生效。

  • 比喻:大樓總電箱里的那些開關和保險絲。它們不參與日常辦公,但決定了整個大樓的用電安全、照明方式等基礎設置。改動它們需要謹慎并有特定權限。

4. Bootloader (引導加載程序)

  • 概念:這是一個程序,而不是一個存儲區域。它是一段特殊的代碼,負責在單片機正式運行用戶主程序之前,完成一些初始化工作,或者決定從哪里、如何加載主程序。

  • 存放位置:它可能存放在兩個地方:

    1. 系統存儲器:即芯片廠商自帶的,如上所述。

    2. 主Flash存儲器:用戶自己編寫的Bootloader。比如你想通過網絡來升級固件,你就可以自己寫一個更強大的Bootloader,把它放在主Flash的開頭部分。芯片上電后先運行你的Bootloader,你的Bootloader再決定是跳轉到主應用程序,還是進入升級模式。

  • 比喻:大樓的前臺接待員或門衛。每天早上(上電后),他先到崗,檢查今天有沒有新的快遞(新的固件包)要接收,或者決定是讓員工直接進入辦公區(跳轉到主程序),還是先組織一個安全會議(系統配置)。

RAM內存布局示例

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96273.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96273.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96273.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手機 瀏覽器調用攝像頭掃描二維碼Quagga

注&#xff1a;需用谷歌瀏覽器才能調用權限1. 引入依賴&#xff1a;npm install ericblade/quagga2<template><el-button color"#188ae2" click"handleScan" class"scan-btn" :disabled"isInitializing || isScanning">{{…

【Oracle篇】偽列之Version Query:全鏈路追蹤行數據變更的所有記錄(不僅僅是被修改的最后時間)(第二篇,總共六篇)

&#x1f4ab;《博主主頁》&#xff1a;    &#x1f50e; CSDN主頁__奈斯DB    &#x1f50e; IF Club社區主頁__奈斯、 &#x1f525;《擅長領域》&#xff1a;擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控&#xff1b;并對…

代理模式深度解析:從靜態代理到 Spring AOP 實現

代理模式是軟件開發中一種經典的設計模式&#xff0c;它通過引入 "代理對象" 間接訪問目標對象&#xff0c;從而在不修改目標對象代碼的前提下&#xff0c;實現功能增強&#xff08;如日志記錄、事務管理&#xff09;、權限控制等橫切需求。從簡單的靜態代理到靈活的…

算法 ----- 鏈式

目錄 一 、鏈式 二 、題目 1、兩兩相加 &#xff08;1&#xff09;題目 (3) 代碼書寫 2、兩兩交換鏈表中的節點 &#xff08;1&#xff09;題目 &#xff08;2&#xff09; 解題思路 &#xff08;3&#xff09;代碼書寫 3、重排鏈表 &#xff08;1&#xff09;題目 …

運維監控prometheus+grafana

目錄 一、環境 二、Node_exporter部署 三、Prometheus部署 四、Grafana部署 五、驗證、使用 一、環境 系統使用CentOS7虛擬機。 監控三臺服務器&#xff1a; 192.168.114.10 Node1 #部署Prometheus、node_exporter、Grafana 192.168.114.20 Node2 …

數字孿生 :提高制造生產力的智能方法

近年來&#xff0c;在先進數字技術深度整合的推動下&#xff0c;制造業經歷了深刻變革。數字孿生技術作為其中最具前景的創新之一&#xff0c;正重塑工廠和生產流程的設計、監控和優化方式。該技術的核心在于為物理資產、系統或流程創建虛擬映射。這種虛擬映射實時同步現實世界…

【論文閱讀】-《SIGN-OPT: A QUERY-EFFICIENT HARD-LABEL ADVERSARIAL ATTACK》

Sign-OPT: 一種查詢高效的硬標簽對抗攻擊 原文鏈接&#xff1a;https://arxiv.org/pdf/1909.10773 摘要 我們研究在訪問受限情況下評估機器學習系統對抗魯棒性的最實用問題設置&#xff1a;用于生成對抗樣本的硬標簽黑盒攻擊設置&#xff0c;其中允許有限的模型查詢&#xff…

安卓11 12系統修改定制化_____如何去掉 搜狗輸入法 首次運行時權限授權彈窗 其他應用可借鑒

有些內置應用或者第三方應用在首次使用時會跳出權限允許彈窗。雖然這個是系統為了用戶安全設置的一道檢測機制。但無形之中會影響到定制類用戶的使用。那么能不能去除這個首次運行的權限彈窗呢。其實也有多方法可參閱解決。 通過博文了解?????? 1??????-----首次…

雙環模型:一個蘊含安全哲學的類設計解析

雙環模型&#xff1a;一個蘊含安全哲學的類設計解析 在編程世界中&#xff0c;優秀的類設計不僅能實現功能需求&#xff0c;更能體現開發者對系統本質的理解。本文將深入剖析一個看似簡單卻蘊含深刻安全哲學的OP類&#xff0c;探討其雙環模型背后的設計思想與實踐價值。 類結構…

牛津大學xDeepMind 自然語言處理(4)

牛津大學xDeepMind 自然語言處理 Natural Language Processing 語音識別 Speech Recognition語音識別概述 問題定義&#xff1a;自動語音識別&#xff08;ASR&#xff09;、文本到語音合成&#xff08;TTS&#xff09;等相關任務&#xff1a;說話人識別、語音增強、語音分離等語…

MyBatis處理SQL語句映射

基礎MyBatis問題以去看MyBatis基礎。 使用log4j設置日志在控制臺打印SQL語句及其執行信息 也可以使用MyBatis基礎中用的slf4j。 在pom.xml文件中引入log4j坐標依賴 <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><…

嵌入式硬件篇---麥克納姆輪軌跡偏移

麥克納姆輪的軌跡偏移是機械結構、驅動系統、控制邏輯及外部環境等多因素共同作用的結果&#xff0c;其核心是各輪子的驅動力 / 運動狀態無法按理論模型實現協同&#xff0c;導致車體實際運動與期望軌跡產生偏差。以下是具體影響因素的詳細分析&#xff1a;一、機械結構偏差&am…

C語言安全函數分享

在日常寫程序中有一些功能函數是可以重復使用的&#xff0c;在c語言的標準庫里面也有對應的功能函數&#xff0c;但是那些功能函數有會有小問題然后我就整理了一下對應功能的安全函數的使用。其中前四個函數可以編譯成一個動態庫&#xff0c;然后在項目工程中只需要包含對應的頭…

汽車之家聯合HarmonyOS SDK,深度構建鴻蒙生態體系

汽車之家作為一家領先的汽車互聯網公司&#xff0c;致力于打造服務全球的汽車生態科技平臺&#xff0c;覆蓋"看選買用換"的一站式購車體驗。2023年12月底&#xff0c;汽車之家正式啟動鴻蒙開發&#xff0c;并于2024年年底成功構建了完整的鴻蒙生態體系&#xff0c;涵…

深度學習驅動的訂單簿分析與交易策略優化

訂單簿數據特征與預處理方法 高頻金融數據中&#xff0c;訂單簿&#xff08;Order Book&#xff09;承載著市場參與者的實時交易意圖。不同于K線數據的聚合特性&#xff0c;訂單簿數據具有獨特的時空特征&#xff1a; 多維層級結構&#xff1a;包含不同價格檔位的買賣盤深度信息…

Redis--day9--黑馬點評--分布式鎖(二)

&#xff08;以下所有內容全部來自上述課程&#xff09; 分布式鎖 1. Redisson功能介紹 基于setnx實現的分布式鎖存在下面的問題&#xff1a; 不可重入&#xff1a;同一個線程無法多次獲取同一把鎖不可重試&#xff1a;獲取鎖只嘗試一次就返回false&#xff0c;沒有重試機…

ES入門教程 (python 版)

ES入門教程 1. 創建ES對象from elasticsearch import Elasticsearch # 實例化一個ip為localhost&#xff0c;端口為9200&#xff0c;允許超時一小時的es對象 es Elasticsearch(hosts"localhost",port9200,timeout3600) # 1. 創建 索引 index_name "test"…

Gateway中Forward配置+源碼觀賞

系列文章目錄 文章目錄系列文章目錄一、ForwardPathFilter二、RouteToRequestUrlFilter三、ForwardRoutingFilteryaml forward配置gateway:routes:- id: user-route # uri: lb://useruri: forward:///user/indexpredicates:- Path/user/**- YoGET # filt…

BAS16XV2T1G ON安森美半導體 高速開關二極管 電子元器件IC

BAS16XV2T1G ON Semiconductor 高速開關二極管專業解析1. 產品技術檔案BAS16XV2T1G是安森美半導體(ON Semiconductor)推出的高速開關二極管&#xff0c;采用SOT-523超微型封裝&#xff08;1.60.80.95mm&#xff09;&#xff0c;專為現代高密度電子設備設計&#xff0c;以其超快…

親測可用 [安卓]《神秘來電》V1.1無需登入無廣告離線打開即用手機模擬發起虛假來電免費版

神秘來電是一款可以模擬虛擬電話的應用程序&#xff0c;它能夠在用戶需要的時候模擬各種來電&#xff0c;以便用戶能夠在尷尬的場合脫身。用戶可以預設多個不同的來電號碼和鈴聲&#xff0c;并可隨時觸發這些虛擬電話&#xff0c;在特殊情況下幫助用戶擺脫尷尬。它為那些社交恐…