news 2026/9/22 1:13:34

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/9/21 4:11:19

基于单片机的多功能万年历

一、系统设计目标与需求分析 在日常时间管理与环境监测需求的推动下&#xff0c;基于单片机的多功能万年历突破了传统日历的功能局限&#xff0c;旨在构建集时间显示、环境感知、智能提醒于一体的小型电子终端。核心需求包括&#xff1a; 时间与日期管理&#xff1a;精确显示年…

作者头像 李华
网站建设 2026/9/21 15:16:14

AI搜索时代:技术演进、产业分化与深度变革

“AI搜索时代”的到来&#xff0c;并非仅仅是搜索引擎界面多了一个聊天框&#xff0c;而是一场从底层逻辑到社会影响的深刻重构。它正在重新定义我们如何获取信息、处理知识乃至进行社会连接。本系列将不涉及任何具体产品或公司的推广&#xff0c;而是从宏观趋势、产业分化、内…

作者头像 李华
网站建设 2026/9/21 21:08:46

SGMICRO圣邦微 SGM2019-2.5YC5G/TR SC70-5 线性稳压器(LDO)

特性工作输入电压范围&#xff1a;2.5V至5.5V固定输出电压&#xff1a;1.2V、1.5V、1.8V、2.5V、2.6V、2.8V、2.85V、3.0V、3.3V可调输出电压范围&#xff1a;1.2V至5.0V输出电压精度&#xff1a;25C时为2.5%低输出噪声&#xff1a;30μV_RMS&#xff08;典型值&#xff09;低压…

作者头像 李华
网站建设 2026/9/22 2:28:09

一文搞懂 低功耗蓝牙BLE 中的 ATT、GATT、MTU 与 20 字节限制

在做 手机 / 前端 / 小程序 与 BLE 设备通信 时&#xff0c;很多人都会遇到这些疑问&#xff1a;为什么 BLE 一次只能传 20 字节&#xff1f;JSON 为什么一用就超限&#xff1f;MTU 到底是什么&#xff0c;调了有什么用&#xff1f;ATT、GATT 老是一起出现&#xff0c;它们到底…

作者头像 李华
网站建设 2026/9/22 1:36:54

别让“大锅饭”逼走你的Top Sales:揭秘薪酬误差的副作用

【谁在为企业的误差买单&#xff1f;】 很多老板或者财务管理者认为&#xff0c;薪酬核算过程中出现一点小误差是难免的&#xff0c;甚至认为只要总额控制住了&#xff0c;肉就是烂在锅里的&#xff0c;无伤大雅。但事实是残酷的&#xff0c;这种“大锅饭”式的误差&#xff0c…

作者头像 李华
网站建设 2026/9/22 1:42:40

27827828

7287287278

作者头像 李华