• 正文
  • 相关推荐
申请入驻 产业图谱

e2 studio多出来的hal_warmstart.c 是什么文件?

04/27 09:33
437
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

微信公众号 | strongerHuang

如果你从,e2 studio V5.x版本升级到 V6.x版本,自动生成工程的时候,会发现在 src 文件夹下多出来一个 hal_warmstart.c 源代码文件:

那么,多出来的hal_warmstart.c 是什么文件?

一、文件来源与背景

warmstart翻译过来的意思就是:热启动。

e² studio或者FSP(灵活配置软件包)在V6.0版本之前,hal_entry.c源代码文件下有这么一个函数:R_BSP_WarmStart()

而从V6.0版本开始,官方就将其拆分出来了,因此,hal_warmstart.c就作为系统启动初始化的专用文件了,与 hal_entry.c 并列在 src/ 目录下。

src/
├── hal_entry.c       # 应用入口(main → hal_entry)
└── hal_warmstart.c   # 新增:启动初始化回调

二、它的核心作用:R_BSP_WarmStart() 回调

这个函数是 BSP 启动过程的 “钩子”,会在三个关键阶段被调用,用于用户自定义底层初始化(时钟、Flash、GPIO 等):

void R_BSP_WarmStart(bsp_warm_start_event_t event)
{
    // 1. 复位后、时钟初始化前(最早时机)
    if (BSP_WARM_START_RESET == event)
    {
        // 例:开启数据Flash访问
        R_FACI_LP->DFLCTL = 1U;
    }
    // 2. 时钟初始化后、C运行库初始化前
    if (BSP_WARM_START_POST_CLOCK == event)
    {
        // 可配置需在时钟就绪后执行的外设
    }
    // 3. C运行库/系统时钟/引脚全部初始化后(main() 之前)
    if (BSP_WARM_START_POST_C == event)
    {
        // 例:打开GPIO端口(旧版常放这里)
        R_IOPORT_Open(&g_ioport_ctrl, g_ioport.p_cfg);
    }
}

三、为什么拆分?

1、职责分离:

hal_warmstart.c:只做系统启动阶段的底层初始化(时钟、Flash、引脚等)。

hal_entry.c:只放应用入口 hal_entry() 和业务逻辑。

2、便于维护:启动相关代码集中,不与应用代码混杂。

3、弱函数机制:R_BSP_WarmStart() 是 weak 定义,用户可直接在该文件修改,覆盖 BSP 默认实现。

最后,默认生成的代码已适配芯片,一般无需修改。

若需在时钟前 / 后、main 前做特殊配置(如特殊引脚、电源、Flash 操作),直接在 hal_warmstart.c 的 R_BSP_WarmStart() 中添加即可。

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录