news 2026/2/8 12:35:36

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/2/3 12:42:01

基于单片机的里程速度测试表设计

一、系统整体设计方案 基于单片机的里程速度测试表旨在实现移动设备&#xff08;如自行车、电动车、小型机械&#xff09;的实时速度监测与里程统计&#xff0c;适用于运动健身、工程作业等场景。系统采用模块化设计&#xff0c;分为四大核心模块&#xff1a;信号采集模块、核心…

作者头像 李华
网站建设 2026/2/7 18:30:00

认知迷思——效率幻境中的思维钝化与知识责任

AI搜索在赋予我们前所未有的信息获取能力时&#xff0c;也如同一个“浮士德式的交易”&#xff0c;潜在地重塑着我们的认知习惯与思维结构。当我们日益依赖AI作为认知的外接“硬盘”与“处理器”&#xff0c;一些关于深度思考、批判性判断与知识责任的隐忧随之浮现。1. “效率幻…

作者头像 李华
网站建设 2026/2/6 18:39:55

【限时揭秘】全球500强都在用的供应链预测Agent设计框架

第一章&#xff1a;供应链Agent需求预测的演进与核心价值在数字化转型浪潮下&#xff0c;供应链管理正从传统的静态模型向智能化、动态响应的方向演进。其中&#xff0c;基于Agent的需求预测技术成为推动这一变革的核心驱动力。通过赋予每个供应链节点自主决策与协同交互的能力…

作者头像 李华
网站建设 2026/2/6 18:45:02

后端:没空,先自己 mock 去!

前言 后端开发忙&#xff0c;不给你接口&#xff1f; 后端抱怨你在测试过程中&#xff0c;频繁的给脏数据&#xff1f; 后端修个接口很慢没法测试&#xff1f; 有了 mockjs &#xff0c;这些问题将迎刃而解。不要 998&#xff0c;pnpm i 带回家&#xff01; 真这么丝滑&…

作者头像 李华