ESP-IDF:二、从头开始构建自定义组件的ESP-IDF项目

ESP-IDF:二、从头开始构建自定义组件的ESP-IDF项目

一、新建工程模板

新建工程模板可以从官方示例新建,也可以使用自定义的工程新建。

以从官方示例新建工程为例:

1.ctrl+shift+P或F1打开命令行,输入Show,选择Show Examples Projects

[(img-r4Vz7KBI-1639038203318)(C:\Users\S3642\AppData\Roaming\Typora\typora-user-images\image-20211209140559513.png)]

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

在这里插入图片描述

  • 13
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值