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.`就可以了,可以去烧录了。如果没有变成成功,可以详细看上面提示
最后修改:2022 年 02 月 27 日
如果觉得我的文章对你有用,请随意赞赏