当前位置: 首页 > news >正文

swm341s map文件和sct文件解析

总是有点儿记不住sct文件和map文件中的一些数据代表的意义
在此进行一下记录,方便后续翻阅
1 sct 文件是 Keil MDK 的 分散加载文件(Scatter-Loading Description File),用于定义程序在目标系统中的内存布局。文件分为两个主要的 加载区域(Load Region) 和多个 执行区域(Execution Region),每个区域指定了代码、数据的加载地址和执行地址。

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************LR_IROM1 0x00000000 0x00080000  {    ; load region size_regionER_IROM1 0x00000000 0x00080000  {  ; load address = execution address*.o (RESET, +First)*(InRoot$$Sections).ANY (+RO).ANY (+XO)}RW_IRAM1 0x20000000 0x00010000  {  ; RW data.ANY (+RW +ZI)}ER_SDRAM1 0x80000000 0x00400000  {             ; execution address*(.SDRAM1)}
}LR_SPIFLASH 0x70000000 0x01000000  {      ; load region size_regionER_SDRAM2 0x80400000 0x00400000  {             ; execution address*(.SDRAM2)}
}

LR_IROM1(加载区域 1)
起始地址:0x00000000
大小:0x00080000(512 KB)
用途:通常用于存储程序的 只读代码和常量(如 Flash 存储器)。
LR_SPIFLASH(加载区域 2)
起始地址:0x70000000
大小:0x01000000(16 MB)
用途:可能用于存储外部 SPI Flash 中的数据(例如用户配置、固件备份等)

  1. 执行区域(Execution Region)
    每个加载区域下包含一个或多个执行区域,定义程序运行时的内存布局。

(1) ER_IROM1(执行区域 1)
加载地址 = 执行地址:0x00000000(与 LR_IROM1 一致)
内容

*.o (RESET, +First)         // 中断向量表(复位向量)放在首地址
*(InRoot$$Sections)         // ARM 库的初始化代码(如 RW 数据复制到 RAM)
.ANY (+RO)                  // 所有只读代码(RO: Read-Only)和常量
.ANY (+XO)                  // 可执行代码(XO: eXecutable Only)

作用:
将程序的 启动代码(复位向量)、只读代码(如 C 语言的 const 变量) 和 可执行代码 放置在 Flash 中运行。
+XO 通常用于需要直接从 Flash 执行的代码

(2) RW_IRAM1(执行区域 2)
执行地址:0x20000000
大小:0x00010000(64 KB)
内容:

.ANY (+RW +ZI)              // 可读写数据(RW)和未初始化数据(ZI)

作用:
存放 全局/静态变量(已初始化和未初始化)。
在程序启动时,ARM 库的 __main 函数会将 Flash 中的 RW 数据复制到 SRAM,并初始化 ZI 数据为 0。
(3) ER_SDRAM1(执行区域 3)
执行地址:0x80000000(外部 SDRAM 或外部存储器)
内容:
作用:

*(.SDRAM1)                  // 用户自定义段(SDRAM1)中的代码

将特定代码段(如性能敏感的函数)加载到 外部 SDRAM 中运行。
适用于需要 高速访问 的场景(如图像处理、实时控制算法)。
(4) ER_SDRAM2(执行区域 4)
加载地址:0x70000000(SPI Flash)
执行地址:0x80400000(外部 SDRAM)
内容:

*(.SDRAM2)                  // 用户自定义段(SDRAM2)中的代码

作用:
将 SPI Flash 中的数据加载到 SDRAM 中运行。
适用于 存储空间不足 的场景(如从 SPI Flash 加载大体积数据到 SDRAM 中执行)。

下面是编译完的map文件的部分数据

    Execution Region ER_SDRAM1 (Exec base: 0x80000000, Load base: 0x000610c0, Size: 0x000ff800, Max: 0x00400000, ABSOLUTE, COMPRESSED[0x00002014])Exec Addr    Load Addr    Size         Type   Attr      Idx    E Section Name        Object0x80000000   COMPRESSED   0x0007f800   Data   RW         1434    .SDRAM1             lv_port_disp1.o0x8007f800   COMPRESSED   0x00080000   Data   RW         5550    .SDRAM1             lv_mem.oLoad Region LR_SPIFLASH (Base: 0x70000000, Size: 0x00062fa8, Max: 0x01000000, ABSOLUTE)Execution Region ER_SDRAM2 (Exec base: 0x80400000, Load base: 0x70000000, Size: 0x00062fa8, Max: 0x00400000, ABSOLUTE)----------------------------------------------------------------------Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Library Name11040        352        551          0         96       6492   c_w.l3956        264         16          0          0       4636   fz_wm.l4452        396        144          0          0       2400   m_wm.l----------------------------------------------------------------------19494       1012        720          0         96      13528   Library Totals----------------------------------------------------------------------==============================================================================Code (inc. data)   RO Data    RW Data    ZI Data      Debug   366200       2026     436432    1046796      53828    1995063   Grand Totals366200       2026     436432       8480      53828    1995063   ELF Image Totals (compressed)366200       2026     436432       8480          0          0   ROM Totals==============================================================================Total RO  Size (Code + RO Data)               802632 ( 783.82kB)Total RW  Size (RW Data + ZI Data)           1100624 (1074.83kB)Total ROM Size (Code + RO Data + RW Data)     811112 ( 792.10kB)

Grand Totals(总和)
ELF Image Totals(压缩后的 ELF 文件)
ROM Totals(实际烧录到 Flash 的数据)
在这里插入图片描述

  1. Flash占用情况
    Flash的总占用由ROM Totals给出,包括代码、只读数据和RW Data的初始值:

ROM Totals(映射文件末尾):
Total ROM Size (Code + RO Data + RW Data) = 811112 bytes (约792.10 KB)

此值直接表示Flash的总占用,覆盖所有加载区域(LR_IROM1和LR_SPIFLASH)。

具体分布:

LR_IROM1(基址0x00000000,大小512KB): 存储代码、RO Data及ER_SDRAM1的压缩初始值(8212 bytes)。

LR_SPIFLASH(基址0x70000000,大小16MB): 存储ER_SDRAM2的加载数据(404392 bytes)。

验证:映射文件中Load Region LR_SPIFLASH的大小为0x00062fa8(404392 bytes),而ER_SDRAM1的加载大小(压缩后)为0x00002014(8212 bytes)。结合全局ROM Totals,总Flash占用一致。

结论:Flash占用 = 811112 bytes (792.10 KB)。

  1. SRAM占用情况(内部RAM)
    SRAM对应RW_IRAM1区域(基址0x20000000,大小64KB),存储运行时RW Data和ZI Data。占用计算基于:

全局数据摘要(映射文件):

RW Data = 1046796 bytes(已初始化数据)

ZI Data = 53828 bytes(未初始化数据)

Total RW + ZI = 1100624 bytes (约1074.83 KB)。

但此总值分布在多个区域:

ER_SDRAM1(SDRAM)占用大部分RW Data(1046528 bytes)。

剩余RW Data和全部ZI Data存储在RW_IRAM1和可能的其他区域。

计算SRAM占用:

ER_SDRAM1的RW Data占用:0x000ff800 = 1046528 bytes。

剩余RW Data:1046796 - 1046528 = 268 bytes。

全部ZI Data:53828 bytes。

SRAM总占用 = 剩余RW Data + ZI Data = 268 + 53828 = 54096 bytes (约52.83 KB)。

验证:RW_IRAM1区域大小为64KB(65536 bytes),54096 bytes在此范围内,合理。

结论:SRAM占用 = 54096 bytes (52.83 KB)。

  1. SDRAM占用情况(外部RAM)
    SDRAM对应两个执行区域:

ER_SDRAM1(基址0x80000000,大小4MB): 存储RW Data(类型Data RW)。

ER_SDRAM2(基址0x80400000,大小4MB): 存储自定义段.SDRAM2,映射文件未明确类型,但基于SCT和大小分析,它存储代码或RO Data(非RW/ZI)。

占用计算:

ER_SDRAM1运行时大小:0x000ff800 = 1046528 bytes (约1021.99 KB),全部为RW Data。

ER_SDRAM2运行时大小:0x00062fa8 = 404392 bytes (约394.91 KB),根据全局摘要(Code + RO Data = 802632 bytes)和分布,此区域存储代码或RO Data(占用SDRAM空间但不算在RW/ZI内)。

SDRAM总占用 = ER_SDRAM1 + ER_SDRAM2 = 1046528 + 404392 = 1450920 bytes (约1416.90 KB)。

结论:SDRAM占用 = 1450920 bytes (1416.90 KB),其中:

ER_SDRAM1:1046528 bytes(RW Data)。

ER_SDRAM2:404392 bytes(代码或RO Data)。

相关文章:

  • arcsin x
  • 一阶低通滤波器完整推导笔记
  • 斗式提升机的负载特性对变频驱动的要求
  • 声波下的眼睛:用Python打造水下目标检测模型实战指南
  • Android 中 linux 命令查询设备信息
  • 阳台光伏新风口!安科瑞ADL200N-CT/D16-WF防逆流电表精准护航分布式发电
  • 完美解决openpyxl保存Excel丢失图像/形状资源的技术方案
  • 几种经典排序算法的C++实现
  • 软考高级系统规划与管理师备考经验
  • Atlassian AI(Rovo)在不同场景中的实际应用:ITSM、HR服务、需求管理、配置管理
  • 26考研 | 王道 | 计算机组成原理 | 五、中央处理器
  • 心之眼 豪华中文 免安 离线运行版
  • OB Cloud × 海牙湾:打造高效灵活的金融科技 AI 数字化解决方案
  • Rocky Linux 9 系统安装配置图解教程并做简单配置
  • 【6S.081】Lab2 System Calls
  • Component name “index“ should always be multi-word的解决方式
  • SwiftUI隐藏返回按钮保留右滑手势方案
  • 系统架构设计师 1
  • Java 传输较大数据的相关问题解析和面试问答
  • 【prometheus+Grafana篇】基于Prometheus+Grafana实现postgreSQL数据库的监控与可视化
  • 怎么用PS做网站广告图/互联网营销方式
  • 网站聚合页面/泰州网站优化公司
  • 个人网站多少钱/太原seo
  • php门户网站源码/临安网站seo
  • 包头网站开发/朋友圈推广一天30元
  • 做电子外贸网站建设/2022网站seo