ESP-IDF:二、从头开始构建自定义组件的ESP-IDF项目
一、新建工程模板
新建工程模板可以从官方示例新建,也可以使用自定义的工程新建。
以从官方示例新建工程为例:
1.ctrl+shift+P或F1打开命令行,输入Show,选择Show Examples Projects
2.从ESP-IDF的路径中打开示例BlInk,在指定工作目录下创建工程
3.从设备管理器中找到开发板的端口号,选择对应的端口号和芯片类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H1pkd5Co-1639038269562)(C:\Users\S3642\AppData\Roaming\Typora\typora-user-images\image-20211209142018013.png)]
从左至右:端口号,芯片型号,工程,SDK设置,删除编译信息,编译,下载,监视端口,一键编译、下载并打开监视端口
SDK设置也就是Linux下使用“menuconfig”打开的配置界面
监视端口类似与SEGGER RTT,可以看到串口输出信息,默认使用串口0。使用 “Ctrl+]” 停止监视端口输出,停止后命令行输入 “clear” 可清除终端信息
二、修改工程名字
1.关闭VSCode,将 "Blink"工程文件夹重命名
2.将blink.c重命名为app_main.c,此时main文件夹内的CMakeList.txt会自动更改包含的c文件名
3.将工程文件夹下的CMakeList.txt中的项目名修改为与工程文件夹同名
4.将工程文件夹下的Makefile内的项目名修改为与工程文件夹同名
5.清除编译信息并重新编译
三、增加自定义组件
1.打开命令行,选择创建组件
2.输入组件名,例如:user
此时会在工程内自动创建一个组件文件夹components,这个文件夹名字不能更改,否则编译无法识别。
components文件夹内有一个user文件夹,就是我们刚刚创建的组件user,文件结构如下:
.c和.h文件被自动创建,添加内容即可
CMakeLists.txt指定了组件的路径,内容如图:
若在user文件夹内还存在其他.c,如app_user.c,下面两种写法都可以,组件同理:
官方建议,最好在组件内放置component.mk文件,内容可以为空,文件为空和没有文件编译操作不同,但ESP-IDF自动生成的组件不带这个文件,可以从main文件夹内拷贝
四、文件引用
在app_main.c内,包含了其他.h文件
可以发现,路径有两种,一种是直接包含.h,一种是前面还需要带一个路径
这些都是ESP-IDF的文件,为什么需要区分呢?
在.vscode文件夹下的c_cpp_properties.json中设置如下:
指定了路径为ESP-IDF文件夹内的components和工程文件夹下
编译时,编译工具会到路径下查找编译信息,也就是CMakeList.txt文件内容
找到freertos组件下的CMakeList.txt,内容如下:
这里指定了include的路径为freertos文件夹下的include
我们打开ESP-IDF的components文件夹,找到freertos
组件的.h都在include中,打开include
发现还有一层freertos,再打开
找到了包含的.h文件,此时路径为
但是CMakeList.txt中指定include的文件在components/freertos/include中查找,但该文件夹内只有freertos文件夹,没有.h文件,所以引用task.h的路径需要用freertos/task.h
如果修改CMakeList.txt的内容,可以直接引用task.h,但是其他组件所有的#include "freertos/task.h"都要改为#include “task.h”
因此如果自定义组件内存在这种多个文件夹的,CMakeList.txt的路径一定要确认清除
还有一种情况,如在使用wifi时,需要用到nvs组件,但是直接#include "nvs_flash.h"编译时会报错找不到路径,则需要在CMakeLists中增加内容:
PRIV_REQUIRES nvs_flash