当前位置: 首页 > news >正文

ESP32 :项目的创建及项目架构解析

一、项目的创建

方式一:基于IDF示例创建
在ESP-IDF中有example示例库,以其中的一个示例为模板创建项目。

1、打开示例库
查看 - 命令面板(也可以按住Ctrl+Shift+P 或 F1)
在这里插入图片描述
输入 show examples projects

在这里插入图片描述
2、以 hello_word 示例为模板,创建项目
在这里插入图片描述
方式二:直接创建项目

注意:直接创建项目要在文件夹中

1、用Vscode打开一个文件夹

文件-打开文件夹, 这里我们选了刚才放示例的文件夹“test”
在这里插入图片描述
2、开始创建

查看 - 命令面板(也可以按住Ctrl+Shift+P 或 F1)

输入 Create project from extension template  创建项目模板 
在这里插入图片描述
在这里插入图片描述
第1项:将项目放在当前的test文件夹中。第二项:选择其他文件夹放置项目。

选择"template-app"
在这里插入图片描述
二、项目架构
在这里插入图片描述
这是一个最基本的hello-world工程,一个工程里,包含着很多的文件以及目录

.vscode目录:

这个目录是用来存放配置内容,比如:

settiong.json:用来控制诸多工作项的配置。如:工作空间设置、代码格式化配置、插件配置。

tasks.json:辅助程序编译的模块,我们只要在图形界面下操作即可生成可执行文件,即可代你执 行类似于在命令行输入 “gcc hello.c -o hello” 命令的操作。

launch.json:用于调试的配置文件,比如指定调试语言环境,指定调试类型等等。

c_cpp_properties.json:用于配置编译器环境的,包括启动器代号、位数(这些是自定义的)、编 译选项、启动设置、编译模式等。

build目录:

这个目录是用来存放编译输出的地方,如果没有这个目录,idf.py 在编译时会自动创建。CMake配置项 目后会在这个目录下生成临时的文件。此目录通常不会添加到项目的源码管理系统中,也不会随项目源 码一同发布。

main目录:

这个目录包含项目本身的源代码,main是一个默认名,意为主目录。

CMakelists.txt

这个文件设置了项目的全局变量,一般的CMakelists.txt分为顶层和其他层。 顶层的CMakelists.txt会导入esp-idf/tools/cmake/project.cmake 文件,由它负责实现构建系统的其余 部分。该文件最后会设置项目的名称,并定义该项目。说简单点,他就是CMake的配置文件。指定了由源码到目标文件的规则,十分重要。可以说有代码的地 方就有他。

Makefile

(由于使用的是CMake编译,在这里不需要使用Makefile,可删)

makefile工具被用来自动完成编译工作。包括:如果仅修改了某几个源文件,则只重新编译这几个源文 件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化 开发工作,避免不必要的重新编译。

sdkconfig

使用CMake编译时,从sdkconfig文件中加载项目配置信息,生成 sdkconfig.cmake 和 sdkconfig.h 文 件,分别用在 CMake 和 C/C++ 中定义配置项。如果项目配置发生了更改,CMake 会自动重新运行,重 新生成上述两个文件,接着重新配置项目。通过idf.py menuconfig可以修改配置项。

README.md

项目的描述说明,markdown文档。 除了上面说的这些目录,还有部分文件是后期创建,但经常会用到的。

component

目录中是项目的部分自定义组件,并不是每个项目都需要这种自定义组件,但它组件有助于构建可复用 的代码或者导入第三方(不属于 ESP-IDF)的组件。 最基础的组件包含着一个.c文件和对应的.h文件,以及一个CMakelists.txt。

在这里插入图片描述
三、CMakelists.txt

esp-idf在4.0版本之后是采用cmake来建立工程的,一般的工程中cmake都分为最外层(顶层)和内层 (其他层)。 我们最小工程helloworld中的cmake来简单分析一下cmake中的代码。

打开工程根目录编译脚本CMakeLists.txt可以看到下图我用蓝色标识出来的那条语句,其中IDF_PATH就是ESP-IDF在本机中的安装路径,例如我的安装路径就是这样的:“IDF_PATH”: “E:/Espressif/esp-idf”。

最外层分析
在这里插入图片描述
在cmake中,井号#表示注释的意思,等同于c语言中的//。

cmake_minimum_required 指的是cmake需要的最小版本,上面表示cmake版本需要3.5

include 表示需要导入esp-idf中的某个cmake文件,这个文件的作用是把esp-idf中所有的库放到我们的 工程中,只有这样我们才能在工程里面调用esp-idf库中的函数

project 这里是工程的命名,这个名字可以自取

最外层的CMakelists.txt 一般无需修改

内层分析
在这里插入图片描述
idf_component_register 这个函数是来自外层导入的文件,我们通过这个函数将自己的文件加入工程。

SRCS就是添加.c文件,而INCLUDE_DIRS则是用来添加.h文件所处的文件夹,这里加入.表示自身路径。

由于工程中.c文件的名字修改需要cmakelists.txt同步修改,所以我们直接用file函数利用正则将自身路 径下的所有.c文件列出来赋值给 SOURCES变量,并在SRCS中引入,这样就可以省去在cmakelists.txt中 修改.c名字的步骤。

CMakelists.txt 万能模板

最外层:
cmake_minimum_required(VERSION 3.5)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(project_name)
其他层:
file(GLOB_RECURSE SOURCES *.c)
idf_component_register(SRCS ${SOURCES}
INCLUDE_DIRS “.”)

相关文章:

ESP32 :项目的创建及项目架构解析

一、项目的创建 方式一:基于IDF示例创建 在ESP-IDF中有example示例库,以其中的一个示例为模板创建项目。 1、打开示例库 查看 - 命令面板(也可以按住CtrlShiftP 或 F1) 输入 show examples projects 2…...

TI EDI 项目数据库方案开源介绍

TI EDI 工作流简介 TI EDI到SQL Server示例流具有预配置的端口,用于从TI的EDI集成规范转换以下交易集: 850 采购订单,企业 -> TI855 采购订单确认,TI -> 企业860 采购订单变更,企业 -> TI865 采购订单变更确认,TI -> 企业856 发货通知,TI …...

报表控件FastReport使用指南——使用NuGet包创建PDF文档

FastReport 是功能齐全的报表控件,可以帮助开发者可以快速并高效地为.NET,VCL,COM,ActiveX应用程序添加报表支持,由于其独特的编程原则,现在已经成为了Delphi平台最优秀的报表控件,支持将编程开…...

策略模式-类型统计

文章目录 前言一、策略模式是什么?二、策略模式应用场景三、策略模式优点四、策略模式缺点五、场景案例:类型统计1.项目结构2.UML图解3.代码实现3.1 指标枚举3.2 请求体3.3 响应体3.4.分析统计指标策略3.5.接口3.6.扩展接口3.7.接口实现3.8.控制层 六、P…...

android 12.0app应用安装白名单

1.概述 在12.0定制化开发中,客户需求要实现应用安装白名单功能,在白名单之中的应用可以安装,其他的app不准安装,实现一个 控制app安装的功能,这需要从app安装流程入手就可以实现功能 PMS就是负责管理app安装的,功能就添加在这里就可以了, 2.app应用安装白名单核心代码 …...

android 12.0Launcher3禁止拖动图标到Hotseat

1.概述 在12.0系统Launcher3进行定制化开发中,对于hotseat的开发中,由功能需求要求禁止拖动图标到Hotseat的功能,而拖拽也是在workspace.java中处理的 接下来就从workspace.java 开始找解决的办法 2.Launcher3禁止拖动图标到Hotseat相关代码分析 packages/apps/Launcher3…...

Java阶段三Day03

Java阶段三Day03 文章目录 Java阶段三Day03JavaScript语言JavaScript概述什么是JavaScript语言特点一门编程语言包括哪些内容 语言基础变量JavaScript常用数据类型运算符各种语句如何在HTML页面中引入JavaScript代码方法和页面相关的方法 BOM和DOM什么是BOMwindow对象location对…...

【STM32G431RBTx】备战蓝桥杯嵌入式→决赛试题→第七届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.h:main.h:main.h: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置,直接使用提供的资源包就行 2.ADC:开启ADCsingle-ended 3.LED:开启PC8-15,PD2输出模式就行了…...

Java日期时间调整的几种方式

一、Calendar类 我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。 Calendar类的…...

如何在Windows 11更新后解决C盘已满的问题?

Windows 11比Windows 10需要占用C盘更多的空间,在升级到Windows 11后,如果升级后出现问题,安装程序可以帮你退回到Windows 10。无论怎样,在升级到Windows 11后,系统会自动制作以前的数据的副本,这会占用大量…...

DJ6-1/2/3 文件系统

目录 6.1 文件系统概述 6.1.1 文件、记录和数据项 6.1.2 文件类型 6.1.3 文件系统模型 6.1.4 对文件的操作 6.2 文件的逻辑结构 6.2.1 文件逻辑结构的类型 6.2.2 顺序文件(Sequential File) 6.2.4 索引文件(Index File&…...

华为OD机试真题 Java 实现【打印文件】【2023Q1 100分】

一、题目描述 有 5 台打印机打印文件,每台打印机有自己的待打印队列。 因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10不同的优先级,其中数字越大优先级越高。 打印机会从自己的待打印队列中选择优先级最高的文件来打印。 如果存在两个优先级一样的文件,则选…...

基于LSB实现文本、图片、压缩包的隐藏

关于LSB的相关介绍: LSB全称为 Least Significant Bit(最低有效位),是一种基于图片最低有效位修改储存信息的隐写方法,在CTF杂项中经常会遇到,LSB属于空域算法中的一种,是将信息嵌入到图像点中…...

(万字长文)Linux——IO之重定向+缓冲区 +重定向 +缓冲区原理实现 +带重定向的简易版shell+标准输出标准错误

索引 文件描述符分配规则重定向 缓冲区1.什么是缓冲区2.缓冲区在哪里 重定向源码模拟实现缓冲区原理带重定向的简易版Xshell标准输入和标准错误 文件描述符分配规则 文件描述符的分配规则 从头遍历数组fd_array[],找到一个最小的,没有被使用的下标,分配…...

面试:js 延迟加载方式

相关知识点: js 延迟加载,也就是等页面加载完成之后再加载 JavaScript 文件。 js 延迟加载有助于提高页面加载速度 一般有以下几种方式: defer 属性 async 属性 动态创建 DOM 方式 使用 setTimeout 延迟方法 让 JS 最后加载 js 的加载…...

将Oracle数据文件导入SQL Server的方法

审计过程中,采集的业务数据有Oracle备份数据,备份文件的后缀名为.dmp。如何将*.dmp文件导入审计人员熟悉的SQL Server中呢?以下是现场审计数据导入方法介绍。 一、将*.dmp文件导入oracle数据库 *.dmp文件为Oracle数据库备份文件,因…...

《汇编语言》- 读书笔记 - 实验5 编写、调试具有多个段的程序

《汇编语言》- 读书笔记 - 实验5 编写、调试具有多个段的程序 题目1题目2题目3题目4题目5题目6总结 题目1 将下面的程序编译、连接,用 Debug 加载、跟踪,然后回答问题 assume cs:code, ds:data, ss:stack data segmentdw 0123h,0456h,0789h,0abch,0def…...

剑指offer -- 二维数组中的查找

二维数组中的查找_牛客题霸_牛客网 (nowcoder.com) 暴力查找法: 是一种简单直接的解决方法,可以用于在二维数组中查找目标值。该方法的思路是遍历数组的每个元素,逐个与目标值进行比较。 具体步骤如下: 从数组的第一行第一列开始,…...

3. 自然语言处理NLP:具体用途(近义词类比词;情感分类;机器翻译)

一、求近义词和类比词 1. 近义词 方法一:在嵌入模型后,可以根据两个词向量的余弦相似度表示词与词之间在语义上的相似度。 方法二:KNN(K近邻) 2. 类比词 使用预训练词向量求词与词之间的类比关系。eg:man&a…...

Hibernate的FlushMode

一、Session中FlushMode的设置: 在事务开启前设置FlushMode属性,方法: // session.setFlushMode(FlushMode.Always|AUTO|COMMIT|NEVER|MANUAL)。Service public class TestService {Logger log LoggerFactory.getLogger(getClass());AutowiredEntityM…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...