ESP32 之 ESP-IDF 教学(十八)—— 组件配置(KConfig)

本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!

↓↓↓通过下方对话框进入专栏目录页↓↓↓
CSDN 请求进入目录       _ O x

是否进入ESP32教学导航(基于ESP-IDF)?

       确定


文章目录

  • 一、组件配置涉及的文件简介
    • 1、为什么要用组件配置
    • 2、组件配置相关文件详解
  • 二、创建组件配置
    • 1、创建菜单(menu)
    • 2、创建菜单项目(config)
    • 3、创建单选选项(choice)

一、组件配置涉及的文件简介

1、为什么要用组件配置

  1. 组件配置可以将相关配置常量移出代码,增强配置的可复用度
  2. 组件配置变量也可以被CMake访问,可以通过手写逻辑实现根据配置执行不同的构建方案。(如某个源文件要不要添加到构建系统)
  3. 组件配置生成的宏定义,配合C语言的预处理语句,可以针对不同的配置改变代码解结构
  4. 组件配置生成的宏定义在C语言中是全局的宏定义,可以在任意处访问配置项。只需要#include "sdkconfig.h"即可。
  5. ESP-IDF构建系统中的menuconfig与Linux Kernel的menuconfig类似,有助于为Linux学习打下基础。

2、组件配置相关文件详解

在 ESP-IDF 构建系统中,有这么几种文件。相信读者学到现在可能已经见过其中几种了。它们分别是:

  • Kconfig文件
  • Kconfig.projbuild文件
  • sdkconfig文件
  • C语言头文件sdkconfig.h
  • sdkconfig.default文件
  • sdkconfig.old文件
  • sdkconfig.ci文件
  • sdkconfig.remane文件

sdkconfig.default文件还可以针对某种设备单独添加,例如:
对于ESP32ESP32-S3,则分别对应sdkconfig.default.esp32sdkconfig.default.esp32s3

这几个文件都与“组件”的配置有关。在详细讲解组件配置之前,我们先分别用一句话概括这几个文件的作用分别是什么:

文件 位置 作用 概括
Kconfig 组件目录
【手动创建】
用于生成menuconfig中的菜单于
Component Configuration子菜单
菜单模板
Kconfig.projbuild 组件目录
【手动创建】
用于生成menuconfig中的菜单于顶层菜单 菜单模板
sdkconfig 项目根目录
【自动生成】
用于以键值对的形式保存Kconfig设置
手动改动无效
保存设置
sdkconfig.h 工程编译生成文件build/config/
【自动生成】
C语言访问Kconfig配置的方式
手动改动无效
C语言接口
sdkconfig.default 项目根目录
【手动创建】
自定义sdkconfig的默认值,与sdkconfig文件格式相同,不会被构建系统更改。
构建系统自动使用此文件的配置填充sdkconfig中未设置的值
缺省值清单
sdkconfig.old 项目根目录
【自动生成】
当保存旧的menuconfig设置时,构建系统自动备份一个原来的sdkconfig文件 备份
sdkconfig.ci 该文件是 CI(持续集成)测试框架的一部分,在正常构建过程中会被忽略。 单元测试时
sdkconfig.remane 用于重命名弃用的配置名,方便旧配置文件快速用于新配置 向前兼容

二、创建组件配置

下面以KConfig文件为例,即生成菜单于menuconfig中的Component Configuration子菜单中。

如果想设置于顶层菜单,则请以类似的规则创建KConfig.projbuild文件夹

1、创建菜单(menu)

menu "My menu"
	// 内容
endmenu

效果:
ESP32 之 ESP-IDF 教学(十八)—— 组件配置(KConfig)_第1张图片

按?(即Shift+ ? / ?_/ ?/)即可打开帮助(help字段)

2、创建菜单项目(config)

menu "My menu"

	# bool 是勾选框
    config MY_TEST_BOOL
        bool "bool_test"
        help
            This is a bool test.
	
	# int 是输入整数
    config MY_TEST_INT
        int "int_test"
        default 12345
        help
            This is an int test.
	
	# hex 是输入16进制数
    config MY_TEST_HEX
        hex "hex_test"
        default 0x7FFF
        help
            This is a hex test.

	# tristate 在 ESP-IDF构建系统中会被当做 bool 处理
    config MY_TEST_TRISTATE
        tristate "tristate_test"
        help
            This is a tristate test.

	# string 表示一个字符串
    config MY_TEST_STRING
        string "string_test"
        help
            This is a string test.

endmenu

效果:
ESP32 之 ESP-IDF 教学(十八)—— 组件配置(KConfig)_第2张图片
宏定义的名字是CONFIG_ + 配置名(config后边的)

对于bool,只有被选择的配置才会生成宏定义为1
ESP32 之 ESP-IDF 教学(十八)—— 组件配置(KConfig)_第3张图片

可以编辑值,按?(即Shift+ ? / ?_/ ?/)即可打开帮助(help字段)

也可以在CMakeLists.txt里使用这个变量,方法请按照CMake语法访问,变量名与这个一致。

3、创建单选选项(choice)

menu "My Menu"

	choice MY_TEST_CHOICE
	    prompt "My Test Choice"
	    default MY_CHOICE_OPTION1
	    help
	        This is a help.
	
	    config MY_CHOICE_OPTION1
	        bool "option1"
	        help
	            help for option1
	            
	    config MY_CHOICE_OPTION2
	        bool "option2"
	        help
	        	help for option2
	        	
	    config MY_CHOICE_OPTION3
	        bool "option3"
	        help
	        	help for option3
	endchoice
endmenu

效果:

  • 图一:根据上文配置中的default语句,menuconfig默认选择了option1
    ESP32 之 ESP-IDF 教学(十八)—— 组件配置(KConfig)_第4张图片

  • 图二:按空格进入单选区域,可以看到它显示了所有option
    ESP32 之 ESP-IDF 教学(十八)—— 组件配置(KConfig)_第5张图片

同样,按?(即Shift+ ? / ?_/ ?/)即可打开帮助。

这样会生成所选的宏定义
ESP32 之 ESP-IDF 教学(十八)—— 组件配置(KConfig)_第6张图片

你可能感兴趣的:(ESP32,教学专栏,(基于ESP-IDF),ESP32,C语言,单片机,嵌入式,物联网)