02-在 ESP-IDF 项目中添加 .c 和 .h 文件的

在 ESP-IDF 项目中添加 .c 和 .h

ESP-IDF(Espressif IoT Development Framework)是一个用于开发基于 ESP32 和 ESP8266 微控制器的嵌入式应用程序的框架。在 ESP-IDF 项目中添加新的 .c 和 .h 文件是很常见的,但要确保这些文件能够正确地被编译和链接到项目中,需要适当地配置 CMakelists.txt 文件。

CMakelists.txt 文件

首先,定位到你的 ESP-IDF 项目目录下的 main 目录,你会找到一个名为 CMakeLists.txt 的文件。这个文件是项目的 CMake 构建系统配置文件。
在这里插入图片描述

添加新的源文件

假设你要添加一个名为 LED.c 的源文件和一个名为 LED.h 的头文件到你的项目中。

在项目文件下下创建一个新的目录,例如 components,然后在 components 目录下创建一个名为 LED 的子目录。

LED 目录下,放置你的 LED.cLED.h 文件。
在这里插入图片描述

编写 CMakelists.txt

打开 components 目录下的 CMakeLists.txt 文件,如果没有这个文件,你可以创建一个。

下面是一个简单的示例 CMakeLists.txt 文件

1. 设置源文件目录和包含目录

在 ESP-IDF 项目中,首先要设置源文件目录和包含目录。这告诉编译器在哪里可以找到源文件和头文件。

在这里插入图片描述

LED 的目录下,其中包含了我们要添加到项目中的源文件和头文件。

  • set(src_dirs LED):这一行设置了一个名为 src_dirs 的变量,其中包含了要编译的源代码目录。在这种情况下,只有一个目录 LED 被设置为源代码目录。
  • set(include_dirs LED):这一行设置了一个名为 include_dirs 的变量,其中包含了需要包含的头文件目录。与源代码目录类似,只有一个目录 LED 被设置为头文件目录。
  • set(requires driver):这一行设置了一个名为 requires 的变量,用于指定当前组件所需的其他组件。在这里,指定一个名为 driver 的组件是必需的。

2. 注册组件和设置依赖项

一旦我们设置了源文件目录和包含目录,我们就可以使用 idf_component_register 函数来注册组件并设置依赖项。

在这里插入图片描述

idf_component_register 是 ESP-IDF 提供的一个函数,用于注册组件。通过这个函数,你可以指定该组件的源文件目录、头文件目录和它所依赖的其他组件。

  • SRC_DIRS 参数使用了之前设置的 src_dirs 变量
  • INCLUDE_DIRS 参数使用了 include_dirs 变量
  • REQUIRES 参数使用了 requires 变量。

3. 设置编译选项

设置编译选项是优化代码和确保代码质量的重要步骤。在 ESP-IDF 中,我们可以使用 component_compile_options 函数来设置编译选项。以下是一个示例:

在这里插入图片描述

启用了快速数学运算优化 (-ffast-math),设置了编译器优化级别为 3 (-O3),并禁用了与格式相关的警告。-Wno-error=format=-Wno-format 选项禁用了关于格式错误的警告,并防止它们被视为错误。这些选项可以根据需要进行调整,以优化组件的编译和运行性能。

CMakeLists.txt完整代码

大家可以参考下面的示例进行修改自己的项目

set(src_dirs
            LED)

set(include_dirs
            LED)

set(requires
            driver)

idf_component_register(SRC_DIRS ${src_dirs} INCLUDE_DIRS ${include_dirs} REQUIRES ${requires})

component_compile_options(-ffast-math -O3 -Wno-error=format=-Wno-format)

保存并构建项目

别忘了保存你的 CMakeLists.txt 文件,并重新构建你的 ESP-IDF 项目。大功告成,LED.h LED.c
两个文件成功添加到项目中了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/446518.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++类和对象(下篇)

目录 一.再谈构造函数 二.static成员 三.友元 四.内部类 五. 再次理解类和对象 一.再谈构造函数 1.构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month…

js 获取浏览器相关的宽高尺寸

window 屏幕 屏幕分辨率的高: window.screen.height 屏幕分辨率的宽: window.screen.width 屏幕可用工作区高度: window.screen.availHeight 屏幕可用工作区宽度: window.screen.availWidth document 网页 网页可见区域宽&#xf…

JavaEE+springboot教学仪器设备管理系统o9b00-springmvc

本文旨在设计一款基于Java技术的教学仪器设备销售网站,以提高网站性能、功能完善、用户体验等方面的优势,解决现有教学仪器设备销售网站的问题,并为广大教育工作者和学生提供便捷的教学仪器设备销售渠道。本文首先介绍了Java技术的相关基础知…

三维不同坐标系下点位姿态旋转平移变换

文章目录 前言正文计算方法思路Python实现总结前言 本文主要说明以下几种场景3D变换的应用: 3D相机坐标系下长方体物体,有本身坐标系,沿该物体长边方向移动一段距离,并绕长边轴正旋转方向转90度,求解当前物体中心点在相机坐标系下的位置和姿态多关节机器人末端沿工具坐标…

Redis基础篇:初识Redis(认识NoSQL,单机安装Redis,配置Redis自启动,Redis客户端的基本使用)

目录 1.认识NoSQL2.认识Redis3.安装Redis1.单机安装Redis2.配置redis后台启动3.设置redis开机自启 4.Redis客户端1.Redis命令行客户端2.图形化桌面客户端 1.认识NoSQL NoSQL(Not Only SQL)数据库是一种非关系型数据库,它不使用传统的关系型数…

我们的一生都是在挤火车。

哈喽,你好啊,我是雷工! 昨天从燕郊坐火车回石家庄,由于赶上元旦假期,所有高铁票都售罄,一张普通火车票,还是一周前就买才买到的。 从燕郊站,到北京站,然后地铁去北京西站…

C语言动态内存管理面(下)常⻅的动态内存的错误

我们接着C语言动态内存管理(上)没讲完整的继续来深度讲解。、 4. 常⻅的动态内存的错误 4.1 对NULL指针的解引⽤操作 主要的原因还是自己的粗心大意没有对malloc的值进行判断 void test() { int *p (int *)malloc(INT_MAX/4); *p 20; //如果p的值是…

JavaScript原型和原型链

JavaScript每个对象拥有一个原型对象 需要注意的是,只有函数对象才有 prototype 属性 当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索&#xff…

OpenGrok代码服务器搭建,解决代码检索慢的问题

一、背景 在前一家公司,公司提供了OpenGrok服务器供大家检索查阅代码。但在新公司,大家都使用vscode或Sourse Insight,这就存在一些问题: 不能跳转或者跳转比较慢。 搜索查询速度慢,且结果展示不易查看。 这严重影…

题目:泡澡(蓝桥OJ 3898)

问题描述: 解题思路: 图解:(以题目样例为例子) 注意点:题目的W是每分钟最大出水量,因此有一分钟的用水量大于出水量则不通过。 补充:差分一般用于对一段区间每个元素加相同值&#x…

nicegui学习使用

https://www.douyin.com/shipin/7283814177230178363 python轻量级高自由度web框架 - NiceGUI (6) - 知乎 python做界面,为什么我会强烈推荐nicegui 秒杀官方实现,python界面库,去掉90%事件代码的nicegui python web GUI框架-NiceGUI 教程…

2024护网面试题精选(二)完

0x02. 内网渗透篇 00- 内网渗透的流程 拿到跳板后,先探测一波内网存活主机,用net user /domian命令查看跳板机是否在域 内,探测存活主机、提权、提取hash、进行横向移动,定位dc位置,查看是否有能直接提权域 管的漏洞…

JavaSE面试——多态

多态 1. 多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。 2. 多态性分为编译时多态和运行时多态,方法重载(overload)实现的是编译时多态,而方法重写 &…

【运维】本地部署Gemma模型(图文)

工具简介 我们需要使用到两个工具,一个是Ollama,另一个是open-webui。 Ollama Ollama 是一个开源的大语言平台,基于 Transformers 和 PyTorch 架构,基于问答交互方式,提供大语言模型常用的功能,如代码生…

给 spyter/all-spark-notebook 添加scala支持

spyter/all-spark-notebook默认没有安装scala notebook,需要手动添加。 你可以创建一个新的 Dockerfile,在其中添加你需要的配置和组件。以下是一个简单的例子: FROM jupyter/all-spark-notebook:x86_64-ubuntu-22.04 #冒号后可以是latest&a…

CAE模拟仿真工具CEETRON Envision:大数据可视化助力工业设计与协同

行业: 制造业; 工业设计; 汽车;航天 挑战:工业客户需要有效的方法来处理CAE数据;ESTECO寻求提供CAE可视化功能来帮助客户做出决策;许多可用的可视化工具无法提供对模型中数据的完全访问以进行深入分析 解决方案&…

快速排序hoare优化

目录 三数取中法选key 优化点 基本思想 代码实现 小区间优化 优化点 基本思想 代码实现 由于hoare版快排在一些特殊情况下性能并不优,这里我们进行一些优化。 三数取中法选key 优化点 当数据有序时,快排就会很吃力,这是为什么呢…

OpenJDK 目前主要发展方向

Loom:得赶紧解决 synchronized pin 线程的问题(据说 Java 23 会解决,现在有预览版)。各个 Java 库需要改造原来使用 ThreadLocal 的方式:如果是为了穿参数,则可以使用 ScopedLocal;如果是对象池…

如何解决新版的anaconda notebook 打不开浏览器

1 安装nodejs 先安装nodejs,里面有很多需要用node来启动服务 2 一片空白 安装jupyter以后启动, 结果就得到了如下,在chrome里面打开以后,一片空白 3 列出环境 conda create --name pytorch python3.9 conda env list cond…

【数学建模】Topsis法python代码

昨天学习了Topsis法的基本概念,今天就来一起实践一下,用python实现topsis法 代码分块解释 1、引入numpy库 numpy as np 2、输入参评与指标数目 # 用户输入参评数目和指标数目,将输入的字符串转换为数值 print("请输入参评数目&#…