news 2026/6/9 22:52:06

S32K3启动RAM数据初始化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
S32K3启动RAM数据初始化

想要搞清这个问题,需要重点研究startup_cm.s文件。

启动时,RAM数据的初始化主要包括两个过程:

  1. RAM区域初始化(数据清0);
  2. 有初始值的变量需要从flash中加载到ram中。

RAM区域初始化

这一段代码由汇编实现,在startup_cm.s中,主要由DTCM_Init和RamInit实现的,贴一段DTCM_Init的代码:

DTCM_Init:
/* Initialize DTCM ECC */
LDR R0, =__DTCM_INIT
CMP R0, #0
/* Skip if __DTCM_INIT is not set */
beq DTCM_LOOP_END

LDR R1, =__INT_DTCM_START
LDR R2, =__INT_DTCM_END

SUBS R2, R1
SUBS R2, #1
BLE DTCM_LOOP_END

MOVS R0, #0
MOVS R3, #0
DTCM_LOOP:
STM R1!, {R0, R3}
SUBS R2, #8
BGE DTCM_LOOP
DTCM_LOOP_END:

加载变量

在startup_cm.s中有个函数_DATA_INIT,通过该函数跳转到C代码startup.c,由init_data_bss这个函数实现。分析init_data_bss的代码,可以发现__INIT_TABLE作为.init_table起始地址的标签,会被强转为Sys_CopyLayoutType *结构体指针,

typedef struct

{

uint32 * ram_start; /*!< Start address of section in RAM */

uint32 * rom_start; /*!< Start address of section in ROM */

uint32 * rom_end; /*!< End address of section in ROM */

} Sys_CopyLayoutType;

然后访问该结构体的成员,就得到了相应区域的ram起始地址,rom起始地址,rom结束地址,从而实现数据从flash加载到ram中。

最后贴一下__INIT_TABLE,可以发现每三行正好对应结构体的3个成员:
__INIT_TABLE
DCD 9
DCD rwBlock$$Base
DCD cacheable_data_init$$Base
DCD cacheable_data_init$$Limit
DCD rwMcalDataBlock$$Base
DCD cacheable_mcal_data_init$$Base
DCD cacheable_mcal_data_init$$Limit
DCD ramCodeBlock$$Base
DCD cacheable_code_init$$Base
DCD cacheable_code_init$$Limit
DCD dataNcBlock$$Base
DCD non_cacheable_data_init$$Base
DCD non_cacheable_data_init$$Limit
DCD constNcBlock$$Base
DCD non_cacheable_const_init$$Base
DCD non_cacheable_const_init$$Limit
DCD dataShBlock$$Base
#if (!defined(CORE0) && defined(MULTIPLE_IMAGE))
DCD 0
DCD 0
#else
DCD shareable_data_init$$Base
DCD shareable_data_init$$Limit
#endif
DCD intcVectorBlock$$Base
DCD interrupt_vector_init$$Base
DCD interrupt_vector_init$$Limit

DCD dataDtcmBlock$$Base
DCD dtcmDataBlock_init$$Base
DCD dtcmDataBlock_init$$Limit
DCD textItcmBlock$$Base
DCD itcmCodeBlock_init$$Base
DCD itcmCodeBlock_init$$Limit
__INIT_TABLE_END

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 12:34:56

基于单片机的住宅防火防盗报警系统设计

第一章&#xff1a;系统核心硬件架构与选型 基于单片机的住宅防火防盗报警系统以“全方位监测、快速响应”为设计核心&#xff0c;采用“STC89C52RC单片机多传感检测模块报警执行模块交互模块”的硬件架构&#xff0c;适配普通住宅、小型公寓的安全防护需求。主控芯片选用STC89…

作者头像 李华
网站建设 2026/6/9 7:05:10

基于ZigBee技术的温湿度监测系统设计

一、系统整体架构设计 基于ZigBee技术的温湿度监测系统采用“终端节点-路由节点-协调器-监控中心”四层架构&#xff0c;实现对目标区域的分布式监测。终端节点部署在监测现场&#xff0c;负责采集温湿度数据&#xff0c;每节点配备ZigBee模块&#xff08;CC2530&#xff09;与…

作者头像 李华
网站建设 2026/6/8 12:22:45

Windows 10/11 隐私防护神器 WPD 使用教程:告别数据泄露,小白也能会

软件介绍 WPD 是一款专为 Windows 7 及以上版本设计的隐私保护工具&#xff0c;具有免费、绿色、轻量的特点。 核心功能&#xff1a; 隐私保护&#xff1a;全面管理系统隐私设置&#xff0c;防止个人信息泄露 性能优化&#xff1a;禁用不必要的功能&#xff0c;减轻系统负担…

作者头像 李华
网站建设 2026/6/6 21:39:08

生态震荡——当“摘要”成为终点,知识价值链的重塑与博弈

AI搜索&#xff0c;尤其是其“直接生成答案”的核心形态&#xff0c;在为用户带来极致便利的同时&#xff0c;也像一块巨石投入平静的湖面&#xff0c;对构建互联网二十余年的传统内容生态系统产生了剧烈冲击。这场震荡的核心矛盾在于&#xff1a;AI的“产出”高度依赖于人类的…

作者头像 李华