当前位置: 首页 > news >正文

ESP-IDF 编译系统说明

1. 配置管理

1.1 Kconfig配置系统

ESP-IDF基于Kconfig配置系统,配置文件以Kconfig命名,分布于各组件目录,顶层有主Kconfig文件。通过idf.py menuconfig生成sdkconfig文件,作为编译时配置输入。

  • 根目录Kconfig定义全局配置选项。
  • 各组件目录Kconfig定义组件相关配置。
  • sdkconfig存储最终配置,影响编译选项和功能启用。

1.2 代码示例

根目录Kconfig片段:

config IDF_CMAKEbooldefault "y"config IDF_TARGET_ARCH_XTENSAbooldefault "y"

1.3 配置流程

  • 执行idf.py menuconfig,加载所有Kconfig文件,生成sdkconfig
  • 编译时读取sdkconfig,设置编译选项。

2. 新项目添加

2.1 目录结构

<project_root>/main/CMakeLists.txt<source>.c/.cppCMakeLists.txtsdkconfig.defaults (可选)Kconfig.projbuild (可选)

2.2 示例代码

main/CMakeLists.txt示例:

idf_component_register(SRCS "hello_world_main.c"PRIV_REQUIRES spi_flashINCLUDE_DIRS "")

2.3 添加流程

  • 复制示例项目目录。
  • 修改main目录源代码。
  • 通过idf.py menuconfig配置项目。

3. 新板卡支持

3.1 目录和文件

  • 新板卡支持放置于boards目录(需手动添加)。
  • 包含引脚定义、启动代码、板级配置文件。

3.2 配置

  • 在项目配置中选择对应板卡。
  • 编译时根据板卡配置宏选择代码。

4. 新组件添加

4.1 目录结构

  • components目录新建组件文件夹。
  • 包含CMakeLists.txtKconfig

4.2 示例代码

CMakeLists.txt示例:

idf_component_register(SRCS "my_component.c"INCLUDE_DIRS "include"PRIV_REQUIRES driver esp_common)

Kconfig示例:

menu "My Component"
config MY_COMPONENT_ENABLEbool "Enable My Component"default y
endmenu

4.3 添加流程

  • 新建组件目录,添加代码和配置。
  • 顶层CMakeLists.txt自动递归添加组件。

5. 编译链路

5.1 起始配置文件

  • 项目根目录下的sdkconfig

5.2 编译流程

  • 顶层CMakeLists.txt加载配置,设置编译选项。
  • 递归调用组件CMakeLists.txt,注册源文件和依赖。
  • 生成目标文件和固件镜像。

5.3 代码示例

顶层CMakeLists.txt片段:

idf_build_get_property(build_component_targets __BUILD_COMPONENT_TARGETS)foreach(component_target ${build_component_targets})__component_get_property(dir ${component_target} COMPONENT_DIR)add_subdirectory(${dir} ${component_target})
endforeach()

5.4 编译链路流程图

在这里插入图片描述

6. 示例项目代码

examples/get-started/hello_world/main/hello_world_main.c示例:

void app_main(void)
{printf("Hello world!\n");esp_chip_info_t chip_info;esp_chip_info(&chip_info);printf("This is %s chip with %d CPU cores\n",CONFIG_IDF_TARGET,chip_info.cores);
}

http://www.dtcms.com/a/329976.html

相关文章:

  • 单细胞测序分析平台在肿瘤免疫微环境研究中的应用
  • javascript学习
  • element-ui 树形结构的table,自定义展开收起小箭头所在的列
  • 若依前后端分离版学习笔记(九)——登录和操作日志
  • Pyside6 核心模块随笔
  • VS2022+QT5.15.2+OCCT7.9.1的开发环境搭建流程
  • Pytest+selenium UI自动化测试实战实例(超详细)
  • 【css】让浏览器支持小于12px的文字
  • 各种排序算法(二)
  • OpenBMC中的BMCWeb:架构、原理与应用全解析
  • 焊接工业机器人节气装置
  • Apple 的 GPU 加速框架
  • JavaWeb(05)
  • 汽车免拆诊断案例 | 2017 款丰田皇冠车行驶中加速时车身偶尔抖动
  • 【ARM】keil提示UVISION: Error: Encountered an improper argument
  • PCBA:电子产品制造的核心环节
  • Video_AVI_Packet(1)
  • Linux服务器启动应用缓慢的解决方案
  • 车载网关助力无人配送车联网解决方案
  • Linux系统之ELF文件
  • 云电竞游戏盒子技术分析
  • 51单片机-51单片机介绍
  • Origin绘制直方图+轴须图|科研论文图表教程(附数据格式模板)
  • USB基础 -- USB相关协议字段解析
  • 三种DuckDB电子表格插件的union all查询性能对比
  • AI视频监控:重构安防行业智能化新生态
  • 教育元宇宙:一场重构教育生态的数字革命
  • Redis中灵活结合SET和SETEX的方法及多语言工具库实现
  • 松下继电器
  • CMSIS(cortex 微控制器软件接口标准)是什么?