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
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.`就可以了,可以去烧录了。如果没有变成成功,可以详细看上面提示