news 2026/4/15 21:44:11

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/4/7 6:59:46

【工业互联网Agent性能跃迁指南】:3步打造高精度实时分析系统

第一章&#xff1a;工业互联网Agent数据分析的核心价值在工业互联网体系中&#xff0c;Agent作为部署于设备端的数据采集与执行单元&#xff0c;承担着连接物理世界与数字系统的桥梁作用。通过对Agent收集的运行状态、环境参数、操作日志等多维数据进行深度分析&#xff0c;企业…

作者头像 李华
网站建设 2026/4/10 22:05:28

基于单片机的医院病房无线呼叫系统

一、系统整体架构设计 基于单片机的医院病房无线呼叫系统采用“终端-中继-主机”三层架构&#xff0c;实现病房与护士站的实时通信。终端层为分布在各病房的呼叫分机&#xff0c;每个分机配备单片机&#xff08;STC89C52&#xff09;、按键、LED指示灯与无线发射模块&#xff0…

作者头像 李华
网站建设 2026/4/11 9:50:03

行人室内定位系统电路设计

一、系统整体电路架构 行人室内定位系统电路采用“感知-处理-通信-供电”四模块集成架构&#xff0c;实现厘米级定位精度与低功耗运行。感知模块包含UWB&#xff08;超宽带&#xff09;测距电路与惯性测量单元&#xff08;IMU&#xff09;&#xff0c;UWB电路采用DW1000芯片搭建…

作者头像 李华
网站建设 2026/3/25 4:52:07

高级树模型与可解释机器学习:随机森林、贝叶斯方法及异质性效应建模

在多源观测数据爆炸式增长的今天&#xff0c;如何从复杂、高维、非线性的自然系统中提取可靠知识&#xff0c;已成为地球科学、生态学、环境工程与公共健康等领域科研工作者的核心挑战。传统的统计模型常受限于线性假设与变量交互建模能力&#xff0c;而“黑箱”深度学习又难以…

作者头像 李华
网站建设 2026/4/10 11:12:21

SGMICRO圣邦微 SGM2019-2.5YN5G/TR SOT-23-5 线性稳压器(LDO)

特性低输出噪声低压差电压热过载保护输出电流限制高电源抑制比&#xff08;1kHz时为74dB&#xff09;10nA逻辑控制关断多种输出电压版本可选&#xff1a;固定输出电压为1.2V、1.5V、1.8V、2.5V、2.6V、2.8V、2.85V、3.0V和3.3V输出电压可在1.2V至5.0V范围内调节工作温度范围为-…

作者头像 李华
网站建设 2026/4/13 13:21:23

25278287

2872872

作者头像 李华