Loading... # ESP-IDF工程目录基本组成以及一些必须的配置内容  本文将介绍一些关于ESP-IDF新建项目工程以及一些可能需要补齐的配置文件。并且编译的流程。 ## 新建标准工程 - 方法一: `idf.py`是可以通过命令直接创建一个空的项目工程,实际命令为: ``` idf.py create-project projName ``` - 方法二: 在esp-idf的`example`->'get-started'里面是有一个`sample_project`的样板文件,可以复制到你的地方,然后进行修改。 ## 工程目录对比 ### 可编译、可运行的完成工程文件 - 一个可以编译的工程目录最小版(通过'idf.py fullclean'清理,并手动删除build文件夹),也就说你的工程目录如果和下面示例的结构一样就基本可以编译的。 ``` hulk@DESKTOP-JC1UBQV:/mnt/e/ESP_Project/ws2812_master$ tree . ├── CMakeLists.txt ├── Makefile ├── main ├── CMakeLists.txt ├── Kconfig.projbuild ├── component.mk └── ws2812_master_main.c 1 directories, 6 files ``` ### `idf.py create-project`命令创建的空项目文件 - 这是一个通过`idf.py create-project`命令来创建的空文件,里面文件比较少,需要补齐的东西比较多。并且默认是无法编译的状态。 ``` hulk@DESKTOP-JC1UBQV:/mnt/e/ESP_Project/test$ tree . ├── CMakeLists.txt └── main ├── CMakeLists.txt └── test.c 1 directory, 3 files ``` ### 复制的`sample_project`项目工程 - 这是一个在esp-idf里面给出来的示例工程,这是可以直接编译的,但是无任何执行代码的文件。 ``` hulk@DESKTOP-JC1UBQV:/mnt/e/ESP_Project/sample_project$ tree . ├── CMakeLists.txt ├── Makefile ├── README.md └── main ├── CMakeLists.txt ├── component.mk └── main.c 1 directory, 6 files ``` 可以看到差别还是各有不同的,但是最贴近可用情况的就是复制过来的`sample_project`,并且实际上`Kconfig.projbuild`文件并不是必须的,所以这个项目是一个完完整整的项目文件。我们只需要对其进行一些简单的修改即可。 ## 文件内容以及作用分析 ### `ProjDir/CMakeLists.txt`文件 这是工程目录下的给CMake使用的文件,我们可以在里面指定我们需要用的`componnent`路径。 ``` # For more information about build system see # https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html # The following five lines of boilerplate have to be in your project's # CMakeLists in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.5) set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/led_strip) #这一行就是指定项目用到的componnent路径 include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(ws2812_master) ``` ### `ProjDir/Makefile`文件 这个文件就是给CMake的编译文件,这里面的信息还是比较有用的。同样,我们也需要在这里面声明用到的`componnent`路径,给CMake指路。要注意需改`PROJECT_NAME :=`为你的项目名称。 ``` # # This is a project Makefile. It is assumed the directory this Makefile resides in is a # project subdirectory. # PROJECT_NAME := ws2812_master EXTRA_COMPONENT_DIRS = $(IDF_PATH)/examples/common_components/led_strip include $(IDF_PATH)/make/project.mk ``` ### `ProjDir/main/CMakeLists.txt`文件 这个文件用来个CMake指路,告诉它main文件的位置,注意修改main文件的名称。 ``` idf_component_register(SRCS "ws2812_master_main.c" INCLUDE_DIRS ".") ``` ### `ProjDir/main/Kconfig.projbuild`文件 这不是一个必须的文件,它的作用就是把一些常量放进`idf.config menuconfig`里面,可以方便针对情况修改工程,而不需要进入到代码里面。 它的格式请参考下面的格式,或者示例工程里面也有这个文件。 在代码中使用需要注意:`WS2812_RMT_GPIO` 这个配置项在使用的时候应该为`CONFIG_WS2812_RMT_GPIO` ``` menu "WS2812 RMT Configuration" config WS2812_RMT_GPIO int "RMT TX GPIO" default 48 help Set the GPIO numbers used for transmitting the RMT single. config WS2812_STRIP_LED_NUMBER int "Number of LEDs in strip" default 25 help A single RGB strip contains serveral LEDs. endmenu ```  ### `ProjDir/main/component.mk`文件 说实话这个文件具体作用,我也没了解,只是依稀记得在哪看的,要有这个文件(虽然什么内容都没有)。 ``` # # Main Makefile. This is basically the same as a component makefile. # # (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) ``` ### `ProjDir/main/ws2812_master_main.c`文件 这就是这个项目工程的main文件,代码放里面就行了。 ## 项目编译以及编译以前的操作 主要操作有两个: ``` idf.py menuconfig # 这是一个配置文件,如果有过其他的编译经验应该对这个并不陌生,这里面涉及到很多关键的东西,要小心配置。并且他会生成一个sdkconfig文件,并且做过修改,他会自动备份为sdkconfig.old idf.py build # 这就是编译命令,看到`Project build complete.`就可以了,可以去烧录了。如果没有变成成功,可以详细看上面提示 ``` Last modification:February 27, 2022 © Allow specification reprint Like 2 If you think my article is useful to you, please feel free to appreciate