??MCU程序的存儲方式與存儲區域大小要求?

程序的段的存儲方式與存儲區域大小要求

程序的存儲和運行涉及 ROM(Flash/非易失性存儲器)RAM(易失性存儲器) 的分配,不同段在存儲和運行時具有不同的特性。以下是詳細的分類和計算方式:


1. 程序文件的存儲方式

程序在 編譯后生成的二進制文件(如 .bin/.hex) 按照以下方式存儲在 ROM(Flash) 中:

段類型存儲位置說明
Code段ROM存儲程序的可執行代碼(機器指令)
RO_data段ROM存儲只讀數據(如 const 常量、字符串常量)
RW_data段ROM存儲已初始化且非零的全局/靜態變量(初始值)
ZI_data段不存儲僅記錄大小,運行時在 RAM 中初始化為零

關鍵點

  • ZI_data段 不會占用 ROM 空間,僅記錄其大小,由啟動代碼在 RAM 中初始化為零。
  • RW_data段 的初始值存儲在 ROM 中,但運行時會被拷貝到 RAM(因為 RAM 可讀寫,而 ROM 不可寫)。

2. 程序運行時的內存布局

程序運行時,內存(RAM)會被劃分為以下部分:

段類型存儲位置說明
Code段ROM 或 RAM通常直接從 ROM 執行,但某些系統可加載到 RAM(如 XIP 或加速執行)
RO_data段ROM 或 RAM通常只讀,可直接從 ROM 訪問,但某些情況會加載到 RAM
RW_data段RAM從 ROM 拷貝初始值到 RAM,運行時可修改
ZI_data段RAM由啟動代碼初始化為零
堆(Heap)RAM動態內存分配(malloc/free
棧(Stack)RAM存儲局部變量、函數調用信息

在這里插入圖片描述

關鍵點

  • RW_data段 必須加載到 RAM,因為 ROM 不可寫。
  • ZI_data段 在 RAM 中分配并清零,不占用 ROM 空間。
  • 堆和棧 在運行時動態增長,不占用 ROM 空間,但必須預留足夠的 RAM。

3. 存儲區域的大小計算

(1) ROM(Flash)大小計算

ROM 存儲的是 程序文件,其大小由以下部分組成:
ROM?大小=Code段+RO_data段+RW_data段(初始值) \text{ROM 大小} = \text{Code段} + \text{RO\_data段} + \text{RW\_data段(初始值)} ROM?大小=Code+RO_data+RW_data段(初始值)

  • ZI_data段不占用 ROM,僅記錄大小。
  • RW_data段 的初始值存儲在 ROM 中,但運行時會被拷貝到 RAM。

(2) RAM 大小計算

RAM 存儲的是 運行時數據,其最小需求為:
RAM?最小需求=RW_data段+ZI_data段 \text{RAM 最小需求} = \text{RW\_data段} + \text{ZI\_data段} RAM?最小需求=RW_data+ZI_data
但實際 RAM 需求 必須更大,因為:

  • 堆(Heap):動態內存分配(malloc/free)需要額外空間。
  • 棧(Stack):函數調用、局部變量、中斷處理等需要棧空間。

實際 RAM 需求
實際?RAM?需求=RW_data段+ZI_data段+堆大小+棧大小 \text{實際 RAM 需求} = \text{RW\_data段} + \text{ZI\_data段} + \text{堆大小} + \text{棧大小} 實際?RAM?需求=RW_data+ZI_data+堆大小+棧大小

示例

  • 如果 RW_data = 2KBZI_data = 4KB,堆預留 1KB,棧預留 1KB
    最小?RAM=2+4=6KB實際?RAM=2+4+1+1=8KB \text{最小 RAM} = 2 + 4 = 6KB \\ \text{實際 RAM} = 2 + 4 + 1 + 1 = 8KB 最小?RAM=2+4=6KB實際?RAM=2+4+1+1=8KB

4. 啟動方式對存儲的影響

程序運行時,代碼和數據可以有不同的加載方式:

  1. 直接從 ROM 執行(XIP, eXecute In Place)

    • Code段RO_data段 直接從 ROM 讀取,不占用 RAM。
    • RW_data段 從 ROM 拷貝到 RAM。
    • ZI_data段 在 RAM 中初始化為零。
    • 優點:節省 RAM,適用于 RAM 較小的嵌入式系統。
    • 缺點:ROM 訪問速度可能比 RAM 慢。
  2. 全部加載到 RAM 執行

    • Code段RO_data段RW_data段 全部從 ROM 拷貝到 RAM。
    • ZI_data段 在 RAM 中初始化為零。
    • 優點:執行速度更快(RAM 訪問快)。
    • 缺點:占用大量 RAM,適用于 RAM 較大的系統(如 Linux 應用)。

5. 總結

分類ROM(Flash)RAM
Code段? 存儲?(除非加載到 RAM 執行)
RO_data段? 存儲?(除非加載到 RAM 執行)
RW_data段? 存儲初始值? 運行時加載
ZI_data段? 不存儲? 運行時初始化為零
堆(Heap)? 不存儲? 動態分配
棧(Stack)? 不存儲? 運行時使用

存儲大小計算

  • ROM 大小 = Code段 + RO_data段 + RW_data段(初始值)
  • RAM 最小需求 = RW_data段 + ZI_data段
  • 實際 RAM 需求 = RW_data段 + ZI_data段 + 堆 + 棧

適用場景

  • 嵌入式系統(RAM 小):直接從 ROM 執行(XIP)。
  • 高性能系統(RAM 大):全部加載到 RAM 執行。

這樣,你可以根據目標設備的資源情況(ROM/RAM 大小)合理規劃內存布局。

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

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

相關文章

Lesson 31 Success story

Lesson 31 Success story 詞匯 retire v.退休,退役[運動]去睡覺 構成:re-表示重復 tire v.感到累一tried a.累的 tyre n.輪胎 用法:retire from 單位 從…退休(過去時) 例句:他從學校退休了。 He retired from our school. retire例句: 1.他越來越老了,他即將退休。…

2025年8月4日私魚創作平臺v1.0.4公測版更新發布-完成大部分功能包含關注創作者以及發布作品及合集功能優雅草科技

2025年8月4日私魚創作平臺v1.0.4公測版更新發布-完成大部分功能包含關注創作者以及發布作品及合集功能優雅草科技 鯨魚小說分銷系統介紹 優雅草私魚創作系統——產品介紹 系統概述 優雅草私魚創作系統(簡稱“私魚”)是一款專注于私域流量運營的垂直化…

鷓鴣云:光伏電站的“智慧中樞”,精準調控逆變器

光伏電站如星辰散落于大地,那些默默工作的逆變器便是每一處光芒的關鍵心臟。然而,分布廣袤、設備眾多,傳統運維如盲人摸象,效率低下,故障難尋,白白流失寶貴電能。鷓鴣云光伏運維軟件應時而生,它…

java中Reflection反射(一)

目錄 一、概述 二、class類: 1、獲取類的字節碼文件: (1)方式一:直接通過一個class的靜態變量class獲取 (2)方式二:如果知道一個class的完整類名,可以通過靜態方法Cl…

CVE-2021-1879

一、漏洞原理 CVE-2021-1879 是 IBM WebSphere Application Server 中存在的一個 路徑遍歷(Path Traversal) 漏洞,其核心原理為: ①WebSphere 在處理某些文件操作請求(如下載、上傳或配置文件讀取)時&#…

二進制簽名查找器(Aho-Corasick 自動機):設計思路與實現原理(C/C++代碼實現)

在逆向工程、惡意軟件分析和二進制文件解析領域,快速準確地識別特定字節模式(即“簽名”)是一項核心任務。本文將圍繞一款基于PE-bear工具的二進制簽名查找器,深入解析其設計思路、實現原理及相關技術背景,揭示其如何高…

後端開發技術教學(二) 條件指令、循環結構、定義函數

書接上回:後端開發技術教學(一) [附2025最新可用 phpstudy2018下載鏈接] -CSDN博客 必要資源: trae中文版下載網址: TRAE - The Real AI Engineer phpStudy 2018 : phpStudy - Windows 一鍵部署 PHP 開發環境 小皮出品 目錄 一、條件指令 1.1 if() …

狀壓DP-基本框架

狀壓DP-基本框架一、狀壓DP的核心思想與適用場景1.1 問題特征1.2 核心思想1.3 與傳統DP的對比二、位運算基礎:狀壓DP的語法三、狀壓DP的基本框架3.1 步驟拆解3.2 通用代碼模板四、經典案例詳解4.1 旅行商問題(TSP)問題描述狀壓DP設計代碼實現…

Web 端 AI 圖像生成技術的應用與創新:虛擬背景與創意圖像合成

隨著 Stable Diffusion、Midjourney 等生成式 AI 模型的爆發,Web 端圖像生成技術從“實驗室demo”走向“工業化應用”。其中,虛擬背景替換(如視頻會議的動態背景生成)和創意圖像合成(如用戶上傳素材與 AI 生成元素的融合)成為最具代表性的場景,它們通過“文本描述→AI 生…

應急響應知識總結

應急響應 Windows系統 查賬號 1、查看服務器是否有弱口令,遠程管理端口是否對公網開放。 檢查方法:據實際情況咨詢相關服務器管理員。 2、查看服務器是否存在可疑賬號、新增賬號。 檢查方法:打開 cmd 窗口,輸入 lusrmgr.msc …

智慧水務賦能二次供水管理精細化轉型:物聯網驅動的全鏈路解決方案

隨著我國城鎮化率激增,高層建筑占比上升,二次供水系統已成為保障城市供水安全的核心環節。然而,傳統管理模式面臨設備老化、運維粗放、監管缺失等矛盾,在此背景下,《“十四五”節水型社會建設規劃》明確要求推進二次供…

tsmc 5nm lvs之 short難搞的類型

1、M3層以上的層次發生的short,dengsity很高的情況下,兩根信號net導致的short,刪除其中一根然后ecoRoute fix不掉的情況下,該怎么辦,可以嘗試去cut 周圍或者上方的power。 2、M1, M2由于cell 內部出pin&…

初識神經網絡01——認識PyTorch

文章目錄一、認識PyTorch1.1 PyTorch是什么1.2 安裝PyTorch二、認識Tensor2.1 創建Tensor2.1.1 基本方式2.2.2 創建線性和隨機張量2.2 Tensor屬性2.2.1 切換設備2.2.2 類型轉換2.3 Tensor與Numpy的數據轉換2.3.1 張量轉ndarray2.3.2 Numpy轉張量2.4 Tensor常見操作2.4.1 取值2.…

Android UI 組件系列(十一):RecyclerView 多類型布局與數據刷新實戰

博客專欄:Android初級入門UI組件與布局 源碼:通過網盤分享的文件:Android入門布局及UI相關案例 鏈接: https://pan.baidu.com/s/1EOuDUKJndMISolieFSvXXg?pwd4k9n 提取碼: 4k9n 引言 在 Android 應用中,RecyclerView 是最常用…

如何學習跨模態對齊(尤其是 CLIP 思想)

學習跨模態對齊(尤其是CLIP思想)需要結合理論基礎、經典模型原理、實踐復現和前沿擴展,以下是一套系統的學習路徑,從入門到深入逐步展開: 一、先補基礎:跨模態對齊的“前置知識” 跨模態對齊的核心是讓圖…

日記研究:一種深入了解用戶真實體驗的UX研究方法

在用戶體驗(UX)研究中,我們常常需要了解用戶在真實世界中如何與產品互動。然而,由于時間和空間的限制,我們很難像“特工”一樣全天候跟蹤用戶。這時,“日記研究”(Diary Studies)就成…

鴻蒙app 開發中 加載圖片的時候閃一下 如何解決

1.解決 在圖片上 加載這個屬性 .syncLoad(true) 參考的官方鏈接

【OS】進程與線程

進程進程實體代碼段相關數據PCB進程標識符外部標識符:為方便用戶對進程的訪問,為每個進程設置一個外部標識符,通常由字母和數字組成內部標識符:為方便系統對進程的使用,在OS中又為進程設置了內部標識符,賦予…

Django 序列化詳解:從 Model 到 JSON,全面掌握數據轉換機制

一、引言:什么是 Django 序列化?在 Web 開發中,序列化(Serialization) 是指將復雜的數據結構(如數據庫模型對象)轉換為可傳輸的格式(如 JSON、XML、YAML 等),…

茶葉蛋大冒險小游戲流量主微信抖音小程序開源

游戲特點 響應式設計:完美適配各種移動設備屏幕尺寸 直觀的觸摸控制:左右滑動屏幕控制茶葉蛋移動 中式風格元素: 茶葉蛋角色帶有裂紋紋理和可愛表情 筷子、蒸籠等中式廚房元素作為障礙物 八角、茶葉等香料作為收集物 鍋底火焰動畫效果 游戲機…