news 2026/4/3 6:02:50

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/1 10:44:34

PLC控制三相异步电机正反转控制

一、控制系统整体设计方案 PLC控制三相异步电机正反转系统旨在实现电机的平稳换向与安全运行&#xff0c;适用于机床、传送带、水泵等工业设备的方向控制场景。系统采用模块化设计&#xff0c;主要由四大核心部分组成&#xff1a;PLC控制核心、电机驱动模块、操作指令模块及保护…

作者头像 李华
网站建设 2026/3/27 8:50:17

AI驱动的水环境遥感:海量数据高效处理与智能解译实战

随着全球水资源日益紧缺与水环境问题日益严峻&#xff0c;传统的水体监测方法已难以满足大范围、高时效、精细化的管理需求。遥感技术凭借其覆盖广、周期短、信息丰富的优势&#xff0c;正逐渐成为水环境监测的核心手段。然而&#xff0c;面对海量多源的遥感数据&#xff0c;如…

作者头像 李华
网站建设 2026/3/30 0:20:16

任务5-3 分组汇总与排序

文章目录1. 实战概述2. 实战步骤2.1 聚合函数2.2 GROUP BY子句2.3 HAVING子句2.4 ORDER BY子句2.5 LIMIT子句3. 实战总结1. 实战概述 本实战围绕图书销售数据&#xff0c;系统运用 SQL 聚合函数&#xff08;COUNT、SUM、AVG、MAX、MIN&#xff09;、GROUP BY 分组、HAVING 筛选…

作者头像 李华
网站建设 2026/3/18 10:27:58

【必藏】大模型应用架构详解:安全过滤、提示工程到向量数据库的完整指南

大型语言模型(LLM)应用架构远比简单的输入输出复杂&#xff0c;包含安全过滤器、提示模板、示例选择器、Agent、模型编排、结构化输出、向量数据库、记忆系统和缓存等关键组件。这些组件共同确保了LLM应用的安全性、准确性和高效性&#xff0c;使系统能够处理复杂任务、保持上下…

作者头像 李华
网站建设 2026/4/3 4:35:06

从“犹豫不决”到“全情投入”:数字化如何重塑销售团队的确定性?

【不确定性时代的应对之道】 市场的冷暖&#xff0c;宏观经济的走向&#xff0c;消费者口袋里还有多少钱&#xff0c;这些外部因素是我们作为企业经营者决定不了的。但是&#xff0c;能不能把钱分对、能不能让激励透明、能不能让团队有信心&#xff0c;这是我们完全可以掌控的“…

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

Ventoy终极指南:3分钟制作通用启动盘,告别重复格式化烦恼

还在为每次安装不同系统都要重新制作启动盘而烦恼吗&#xff1f;Ventoy这款开源神器将彻底改变你的启动盘制作方式&#xff01;作为一款创新的可启动USB解决方案&#xff0c;Ventoy让你只需一次安装&#xff0c;就能启动任意ISO镜像文件&#xff0c;真正实现一劳永逸。本文将带…

作者头像 李华