凡亿专栏 | 认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例)
认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例)

ESP32-C3 学习测试到今天,一直在使用 ESP-IDF 的框架,
但是还从来没有注意过工程结构,遇到复杂一点的项目,工程结构就显得太乱了,
本文就来了解下 ESP-IDF 工程结构。


  • 前言

  • 一、ESP-IDF工程基本框架

    • 1.1 工程主目录下的文件

    • 1.2 main目录下的文件

    • 1.3 components目录下的文件

  • 二、工程调整示例

    • 2.1 删除不需要的文件

    • 2.2 组件调整

    • 2.3 调整完成

  • 结语


一、ESP-IDF工程基本框架

一个标准的工程框架如下图所示:7d1dcea3db96ddd1eb6617cb18b804.png

我们就用在应用篇中通过MQTT协议连接 ONENET 平台的工程来做示范说明,先来看看整体框架:

1.1 工程主目录下的文件顶层 CMakeLists.txt

顶层项目 CMakeLists.txt 文件,这是 CMake 用于学习如何构建项目的主要文件,可以在这个文件中设置项目全局的 CMake 变量 这个文件一般来说我们需要修改的是工程名字。

顶层 Makefile

看上去内容和 CMakeLists.txt 中的差不多,实际上这个文件通过CMake构建时文件都可以不需要,我测试了一下把这个文件删除,也能正常编译,所以这个应该是老的构建方式 GUN Make 需要用到的。 现在版本的IDF(4.3+)不需要这个文件,可以删除,不用修改。

sdkconfig

项目配置文件,执行 idf.py menuconfig 时会创建或更新此文件,文件中保存了项目中所有组件(包括 ESP-IDF 本身)的配置信息。sdkconfig 文件可能会也可能不会被添加到项目的源码管理系统中。

我们需要的设置会在 menuconfig 中配置,此文件在执行完 menuconfig 后自动更新,不用修改。

1.2 main目录下的文件main中的 CMakeLists.txt

给CMake指路的文件,,告诉它.c和.h文件的位置,在目录下面有几个.c文件,就得添加几个。

这个文件我们需要修改,工程中在 main 文件夹下面,我多放了几个.c文件,就需要都添加进去。如果我们把头文件放在同一个文件夹里,也需要修改,比如:

component.mk

GUN Make中使用的文件,通过CMake构建时文件都可以不需要,和上面的 顶层Makefile 一样。 现在版本的IDF(4.3+)不需要这个文件,可以删除,不用修改。

Kconfig.projbuild

这不是一个必须的文件,它的作用就是可以配合 menuconfig 进行配置,可以方便移植。

如果新手不太熟悉 Kconfig 的书写,这里暂时可以不关注,在示例工程中,一些用到的变量就自己写死,而不用宏定义。 有了要学会看懂,会使用 menuconfig  配置。熟悉了以后,可以尝试书写,方便项目移植。

app_main.c

这就是这个项目工程的main文件,代码放里面就行了。

需要说明的是,在上面示例中有自己的驱动代码:我们规范的做法是放在 components 目录下面,作为组件形式存在,所以下面会把我们会把这几个文件移动到 components 目录下面。

入口函数文件,就是自己写应用的main函数文件。

1.3 components目录下的文件

我们以前说过,components 包含了项目的部分自定义组件,但它有助于构建可复用的代码或者导入第三方(不属于 ESP-IDF)的组件。

再看看 components 文件夹下面的整体框架,在示例项目中,只有一个 button 子文件夹(就连led_strip的驱动文件我都直接放置button文件夹下面,因为当时放在另外一个文件夹编译出错= =!):

component.mk

和上面的 component.mk 文件一样GUN Make中使用的文件,通过CMake构建时文件都可以不需要,所以这里不管。

component.mk 不需要。

  Kconfig

和上面的 Kconfig.projbuild 一样。 学会看懂,尝试书写,方便项目移植。

组件中的 CMakeLists.txt

是 CMake 构建项目的主要文件,规则和 main 中 CMakeLists.txt 一样,这个文件是重点。 重点!!学会修改。理解下面说的组件依赖!

组件依赖

组件中的 CMakeLists.txt 的核心,我们必须要学会如何修改,才能完善自己的工程,所以对于组件依赖我们需要但是介绍,这里官方的讲解比较详细,借用官网介绍截图说明:组件依赖示例:

VScode下添加组件

在我们使用 VScode 插件中,可以通过指令快速添加组件,方法如下:可以看到添加的标准组件架构。

在以后自己的工程中,尽量安装这个标准组件架构设计。

二、工程调整示例

通过上面的详细介绍,即便不知道构建原理,我们也对 ESP-IDF工程结构有了一定的认识,学以致用,我们通过上面的认识,来对上面示例工程进行一定的修改。

2.1 删除不需要的文件

第一步,把上面说的component.mk 和 顶层Makefile删除, readme也删除了,至少整体看上去,没有开始那么乱,然后编译正常:

2.2 组件调整LED驱动新建组件

LED驱动其实在前面 RMT应用 教学博文中使用过,不过当时是使用的官方例程为模板生成的组件,所以并没有关心结构,但是在我写应用篇的时候,把组件拷贝到本项目下面直接编译确实有错误,所以当时才会直接放置 button 文件夹下面 = =!

现在我们要把他移出来,单独作为一个组件led_strip,其实还是复制过来,如下图:完成以后编译正常!

按键驱动放至对应组件

把主函数下面的按键驱动my_button.c和my_button.h文件放置 button 组件文件夹下面,去他该去的地方:完成以后编译正常!

温湿度驱动新建组件

按照标准的组件模板,把温湿度的驱动程序放在新建的 sht21 组件文件夹中:完成以后编译正常!

2.3 调整完成

完成上面步骤,对于示例的调整就算完成了,看看最后的工程结构(和以前比起来感觉漂亮多了,我都不忍心写任何注释上去~):

结语

乐鑫官方为了减少样板文件,其实也封装了 CMake 的许多功能,目的在于给与用户方便。

本文的目的在于让我们能够基于 ESP-IDF 框架,完善自己的工程结构,并没有对 Cmake 的构建原理做说明。如果有不妥当,不到位的地方,还请指出!

在本博文之后,ESP32-C3 的教学实例,都会按照这个标准框架进行。

谢谢!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论