SOC-ESP32S3部分:4-参数配置可视化menuconfig
飞书文档https://x509p6c8to.feishu.cn/wiki/LPcdwQYAiiE9ZjkA3rzcU1Vknve
传统C语言代码进行配置时,一般使用#define宏定义的办法,乐鑫把Kconfig功能融进了配置中,让我们可以轻松使用更加直观的界面对工程进行配置。
1.1、工程创建
首先我们创建工程,我们可以重新创建,也可以拷贝上节课的工程,修改名称为02_menuconfig_project,同时修改app\02_menuconfig_project\CMakeLists.txt中的工程名称
cmake_minimum_required(VERSION 3.16)include($ENV{IDF_PATH}/tools/cmake/project.cmake)project(02_menuconfig_project)
然后执行idf.py fullclean清除前面编译的中间文件,此时build文件夹下的内容会被清空
idf.py fullclean
然后就可以重新编译啦
df.py set-target esp32s3
idf.py build
1.2、查看工程配置界面
当我们在工程下执行idf.py menuconfig,此时会打开一个可视化窗口,在此窗口中我们就可以对工程进行定制化配置。
PS H:\AI\esp32aibox\app\02_menuconfig_project> idf.py menuconfig
你可以把这里的配置比作Keil中的魔法棒窗口,可以配置各类编译参数、烧录参数,里面的内容非常多,但是这节课我们暂时不需要修改其中任何模块,我们只需要了解下这个窗口的操作按键即可。
方向键(↑ ↓ ):
↑ 和 ↓:在菜单项之间上下移动。
如果是window环境,方向按键可能是j、k或者↑、↓Enter(回车):
进入子菜单或打开选项的配置界面。Space(空格):
开启或关闭某个配置,[]为未选择,[*]为选择。Esc:
返回上一级菜单。
多次按Esc可以退出菜单。
退出时,如果你有修改了相关配置,会提示你是否保持配置,如果你不像修改,记得选N。
接着,我们可以添加一点自己的配置,我们先按Esc按键退出,如果你已经修改了配置,这里会提问你是否保存,记得点击按键N即可。
1.2.1、添加自己的菜单
如果我们希望在menuconfig中添加我们自己的定制的菜单,应该如何添加呢?也很简单,我们只需要在工程中添加一个main/Kconfig.projbuild文件,注意路径哦,在main文件夹下方
# put here your custom config value
menu "Example Configuration"
config ESP_WIFI_SSIDstring "WiFi SSID"default "myssid"helpSSID (network name) for the example to connect to.config ESP_WIFI_PASSWORDstring "WiFi Password"default "mypassword"helpWiFi password (WPA or WPA2) for the example to use.
endmenu
具体解释如下
# put here your custom config value --》注释
menu "Example Configuration" --》菜单名
config ESP_WIFI_SSID -》参数名string "WiFi SSID" -》参数类型 显示名称,参数类型支持bool int stringdefault "myssid" -》默认值help -》帮助信息SSID (network name) for the example to connect to.
endmenu -》菜单结束标志
再次运行idf.py menuconfig后,我们就可以看到窗口中多了Example Configuration配置
接着我们可以修改它,按键盘的方向键↑ ↓(window环境按j,k按键)可以选择对应菜单,按Enter回车可以进入下一层,这里我们修改下信息,选择对应选项后,按Enter回车输入内容,然后按ESC退出,然后输入Y保存。
| |
这个窗口中的配置,保存下来后,会影响的其实就是工程的sdkconfig文件:
#
# Example Configuration
#
CONFIG_ESP_WIFI_SSID="wifiname"
CONFIG_ESP_WIFI_PASSWORD="123456"
# end of Example Configuration
换句话说,这里只是idf提供了一个可视化的配置,方便我们配置sdkconfig文件而已,我们修改后重新执行idf.py build编译。
这里可以看到这里重新遍历了所有模块,这是一个关键的信息,如果你编译时发现遍历了所有模块,那也就是意味着你已经修改了menuconfig配置,如果没有编译所有模块,意味着你是没有修改到menuconfig的。 |
1.2.2、menuconfig菜单的作用
那这个配置有什么用呢?你可以简单理解为这其实就是宏定义,它把工程中所有的配置信息通过sdkconfig统一管理起来而已:
CONFIG_ESP_WIFI_SSID="wifiname"
CONFIG_ESP_WIFI_PASSWORD="123456"
可以理解为
#define CONFIG_ESP_WIFI_SSID "wifiname"
#define CONFIG_ESP_WIFI_PASSWORD "123456"
我们可以做这么一个小实验,在main.c添加打印:
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "sdkconfig.h"void app_main(void)
{int i = 0;while (1) {printf("%s %s\n", CONFIG_ESP_WIFI_SSID,CONFIG_ESP_WIFI_PASSWORD);printf("[%d] Hello world!\n", i);i++;vTaskDelay(5000 / portTICK_PERIOD_MS);}
}
编译后,你就可以看到
wifiname 123456
[0] Hello world!
wifiname 123456
[1] Hello world!