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


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

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

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

           确定


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

    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
    
    • 1
    • 2
    • 3

    效果:
    在这里插入图片描述

    ?(即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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    效果:
    在这里插入图片描述
    宏定义的名字是CONFIG_ + 配置名(config后边的)

    对于bool,只有被选择的配置才会生成宏定义为1
    在这里插入图片描述

    可以编辑值,按?(即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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    效果:

    • 图一:根据上文配置中的default语句,menuconfig默认选择了option1
      在这里插入图片描述

    • 图二:按空格进入单选区域,可以看到它显示了所有option
      在这里插入图片描述

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

    这样会生成所选的宏定义
    在这里插入图片描述

  • 相关阅读:
    ib中文诗歌赏析,诗歌主题怎么入手?
    【Arduino+ESP32专题】一起来读INA3221数据手册 1
    Python 常用的内置模块
    VCS编译bug汇总
    AQS-AbstractQueuedSynchronizer
    [paper] lift,splat,shooting 论文浅析
    MySQL建表以及excel内容导入
    shopee虾皮面试题汇总-C++后端
    iview实现table里面每行数据的跳转
    java 调用C#语言写的dll文件代码 超详细过程
  • 原文地址:https://blog.csdn.net/m0_50064262/article/details/126540334