You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32-C3无FreeRTOS自定义应用启动及函数疑问咨询

ESP32-C3 二级引导加载启动相关问题解答

1. 两个call_start_cpu0函数的实际使用场景

这两个函数分属不同执行阶段,不会产生冲突:

  • 位于bootloader_start.c中的call_start_cpu0属于二级引导加载程序(bootloader.elf),是bootloader自身的启动入口,负责完成硬件初始化、从闪存加载应用镜像到内存、验证镜像有效性,最后跳转到应用镜像的入口地址。
  • 位于cpu_start.c中带IRAM_ATTR属性的call_start_cpu0属于应用程序(hello_world.elf),是应用镜像的启动入口。当bootloader完成加载后,会跳转到这个函数,执行应用层面的初始化(比如外设初始化、中断向量表设置),最终进入用户自定义的主逻辑。

二者分别编译到不同的镜像文件,运行在完全独立的阶段,因此各自被对应阶段的代码调用。

2. 无FreeRTOS的二级引导加载应用开发说明

ESP-IDF默认依赖FreeRTOS,但可以基于二级引导加载程序开发裸机(无RTOS)应用,核心步骤如下:

  • 禁用FreeRTOS组件:在项目的menuconfig中关闭CONFIG_FREERTOS_ENABLE,或通过CMakeLists.txt排除freertos组件,避免链接FreeRTOS相关代码。
  • 修改应用启动流程:修改cpu_start.c中的启动逻辑,移除所有与FreeRTOS相关的调用(比如esp_start_free_rtos),替换为自定义的初始化代码和主循环。需要自行完成:
    • 基本硬件初始化(时钟、外设、中断向量表)
    • 内存管理(若需要,可实现简单的裸机内存分配器,或直接使用静态内存)
    • 主循环逻辑(替代FreeRTOS的任务调度,直接执行用户业务代码)
  • 保持bootloader正常配置:二级引导加载程序仅负责加载和验证应用镜像,无需针对无RTOS场景修改bootloader配置,确保bootloader分区正常烧录即可。
  • 参考裸机启动代码:可以参考ESP-IDF中cpu_start.c的非RTOS相关部分,剥离FreeRTOS依赖后,构建自己的启动流程。

内容的提问来源于stack exchange,提问作者Andrea Acquaviva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:15:43