ESP32(Espressif-IDE)添加外部(.c .h)文件 (error:undefined reference to)

2023-05-16

0x00:前言

笔记文件

用习惯了keil和iar之类的开发软件,一下子转换到ESP32是特别的不习惯,这里使用的开发环境是乐鑫官方推出的Espressif-IDE,也是刚学折腾ESP32,刚开始就遇到难题了,按照以往的习惯,一般开发大一点的项目工程都是需要将不同的功能分开不同的文件写,一般都不会全写在main文件里。

这里主要就是记录一下Espressif-IDE添加外部文件的过程

可能这个过程中也是有错误的地方。具体我也是网上找了很久的方法,最后自己总结一下。主要自己做为笔记记录,具体原理呢,我也是一知半解,我也没有具体去学习CMake,我也是照葫芦画瓢,能用!

这里通过一个案例来说明整个操作流程,

设计一个程序,分别包含myGPIO和myLED两个文件夹,的程序

myGPIO文件夹包含:myGPIO.c     myGPIO.h      用于初始化 IO

myLED文件夹包含:  myLED.c       myLED.h        用于闪烁LED程序

0x01:向工程添加文件

这里以官方给出的  hello_world  工程为模板添加自己写的文件,

1、新建myDrives

2、myDrives 文件夹下添加 myGPIO文件夹和 myLED文件夹

 

 

 3、myGPIO

myGPIO.c文件

#include "myGPIO.h"
#include "myLED.h"

void myGPIO_Init(void )
{
	gpio_set_direction(GPIO_NUM_1,GPIO_MODE_OUTPUT);
}

myGPIO.文件

#ifndef MYDRIVES_MYGPIO_MYGPIO_H_
#define MYDRIVES_MYGPIO_MYGPIO_H_

void myGPIO_Init(void );

#endif /* MYDRIVES_MYGPIO_MYGPIO_H_ */

 4、myGPIO

myLED.c

#include "myLED.h"
#include "myGPIO.h"

void myLED_Init(void )
{
	myGPIO_Init();
}
void myLED_Function(void )
{
	myLED_H;
	printf("myLED_H\n");
	vTaskDelay(500);
	myLED_L;
	printf("myLED_L\n");
	vTaskDelay(500);
}

 myLED.h

#ifndef MYDRIVES_MYLED_MYLED_H_
#define MYDRIVES_MYLED_MYLED_H_

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"

#define myLED_H gpio_set_level(GPIO_NUM_1,1)
#define myLED_L gpio_set_level(GPIO_NUM_1,0)

void myLED_Init(void );
void myLED_Function(void );

#endif /* MYDRIVES_MYLED_MYLED_H_ */

 4、main 主函数修改

#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "myGPIO.h"
#include "myLED.h"

void app_main(void)
{
    printf("Hello world!\n");
    myLED_Init();

    while(1)
    {
    	myLED_Function();

    }
}

 0x02:修改CMakeLists.txt文件

这里只修改 main 文件夹下的CMakeLists.txt文件

 

 

set(src
"hello_world_main.c"
../myDrives/myGPIO/myGPIO.c 
../myDrives/myLED/myLED.c 

)

set(inc
"."
../myDrives/myGPIO 
../myDrives/myLED
)


idf_component_register(
SRCS ${src}
INCLUDE_DIRS ${inc})

  0x03:编译运行

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32(Espressif-IDE)添加外部(.c .h)文件 (error:undefined reference to) 的相关文章

  • Visual Studio 2012 - “添加”上下文菜单的项模板

    我成功创建新的项模板并将其添加到 Visual Studio 2012 现在我可以使用右键单击来创建新项目 解决方案资源管理器 添加 新项目 dialog But how I can add this Item Template to ap
  • CLion 行注释的自动缩进不一致

    CLion 中出现一些奇怪的自动缩进 我不明白为什么 这是一个例子 int i1 5 some comments then I hit Enter auto indentation goes here I hit Enter again I
  • 是否有一个项目可以使用 Eclipse 代码库为 Emacs、VIM 和其他编辑器提供高级语言支持?

    这里有很多关于 IDE 与编辑器以及哪个更适合现代软件开发的问题 在答案中 一个常见的观点是 Eclipse 有更好的语言支持 例如for Java http help eclipse org indigo index jsp topic
  • 为什么 Git 中会忽略 IDE 特定的项目文件?

    我看到 Github 上发布的许多项目都有一个 gitignore文件明确排除与 IDE 相关的控制文件 这些控制文件广泛用于定义项目及其依赖项 这些可以是 sln对于 NET 或 project对于 Eclipse 我想问为什么这种做法被
  • 保存文件时禁用重新格式化代码

    我在 IntelliJ 中对旧的 java 文件做了一个小更改 当我保存该文件时 IDE 会自动重新格式化所有代码 通常这会更好 但是似乎几乎每一行都有不必要的空白需要清理 现在看来整个文件都被修改了 尽管我只做了一个小修复 这将使查看 V
  • 如何清除“运行”->“参数”菜单中的“参数”字段?

    我正在使用 CodeGear RAD Studio IDE 为了使用命令行参数测试我的应用程序 我多次使用 运行 gt 参数 菜单中的 参数 字段 但每次我为它提供一个新值时 它都无法从 下拉框 中删除 我需要清理这个字段 删除所有值 因为
  • 适用于 Mac 的 C IDE 好用吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我刚刚开始在 Mac 上用 C 进行编程的工作 这是我第一次使用 Mac 进行开发 现在我使用 Xcode 作为编辑器 然后在命令行中使用
  • 解析具有未定义值的 JSON?

    可能的重复 解析或修复具有特殊 未定义 值的 JSON https stackoverflow com questions 59304404 parsing or fixing jsons with special undefined va
  • 仅当值既不为 null 也不未定义时才调用函数

    单击按钮时 我检查本地存储键中是否存在某些内容 如下所示 var a localStorage getItem foo if typeof a undefined Function 但如果该键根本不存在 则返回 null 我怎样才能打电话如
  • 用于 Java 项目的 NetBeans 远程编辑?

    我的项目使用了 Play 框架 所以我不需要可以编译的编辑器 我通常喜欢 NetBeans 但希望远程编辑服务器上的源文件以节省时间 我还经常在台式机 上网本之间切换进行开发 因此远程编辑可以使我免于同步开发环境 我对 Netbeans 远
  • Firefox 中的 JavaScript 错误

    我在 Firefox 中运行 JavaScript 时遇到问题 下面的脚本在除 Firefox 之外的其他浏览器中运行没有问题 var vars hash var hashes window location href slice wind
  • 如何让 js2-mode 在 Emacs 中使用空格而不是制表符?

    我在用js2 mode http code google com p js2 mode 在 Emacs 中编辑 Javascript 但我似乎无法让它停止使用制表符而不是空格进行缩进 我的其他模式工作正常 只是遇到 js2 问题 你有 se
  • 用于 PHP 开发的 Eclipse PDT 与 NetBeans [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对于 PHP 开发 Eclipse PDT 与 NetBeans 相比如何 我刚刚买了一台装有 Windows 7 的新电脑 我开始设置
  • 如何在 IDE 中使用 Grails 依赖项

    So I finally https stackoverflow com questions 1867064 grails and local maven dependencies让我的依赖项与 Grails 一起工作 现在 我的 IDE
  • 免费的 C 语言 IDE? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 谷歌搜索 c ide C 会产生太多 C 结果以及不相关的结果 这些搜索词似乎太短 无法产生相关结果 有人有免费的 Win32 C IDE
  • pytorch 的 IDE 自动完成

    我正在使用 Visual Studio 代码 最近尝试了风筝 这两者似乎都没有 pytorch 的自动完成功能 这些工具可以吗 如果没有 有人可以推荐一个可以的编辑器吗 谢谢你 使用Pycharmhttps www jetbrains co
  • 如何在 IDE 中输入提示上下文?

    我在用Closure call http php net manual en closure call php http php net manual en closure call php 在类上下文中调用外部闭包 这是一个简单的重现 c
  • IntelliJ IDEA 中查找方法/函数的快捷方式是什么?

    I know that Ctrl N is to find classes and it is very useful But what about methods ctrl F12 cmd F12 on macOS will show a
  • 设置 Emacs 进行 Erlang 编程

    Emacs 是 Erlang 编程的首选 IDE 有很多好的模式 distel erlware mode 默认的 erlang 模式 但是您对设置 Emacs 进行专业 Erlang 开发有何建议 按照中所述设置 erlang mode自述
  • Selenium IDE-自动化Select2搜索框

    我正在尝试自动化 selenium IDE 中的 select2 搜索框 我打开它并输入了我正在搜索的搜索关键字 但是 即使我有用于显示结果的代码 它也不起作用 问题是我猜字符输入得太快 因此结果不会显示在搜索框中 我确信我在某个地方出错了

随机推荐

  • FreeRTOS分析

    freertos是一个轻量级的rtos xff0c 它目前实现了一个微内核 xff0c 并且port到arm7 avr pic18 coldfire等众多处理器上 xff1b 目前已经在rtos的市场上占有不少的份额 它当然不是一个与vxw
  • STM32之FreeRTOS

    学习操作系统 xff0c 我并没有一开始就学习UCOS xff0c 而是选择了FreeRTOS FreeRTOS可以方便地搭建在各个平台上 xff0c 因为汇编相关 xff0c 都已经由官方完成 xff0c 我们要做的仅是添加自己的代码 x
  • FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion

    paper title FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion paper link https ar
  • 矩阵中的路径(C++)

    题目 xff1a 请设计一个函数 xff0c 用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径 路径可以从矩阵中的任意一个格子开始 xff0c 每一步可以在矩阵中向左 xff0c 向右 xff0c 向上 xff0c 向下移动一个格
  • TensorFlow入门(五)多层 LSTM 通俗易懂版

    欢迎转载 xff0c 但请务必注明原文出处及作者信息 64 author huangyongye 64 creat date 2017 03 09 前言 根据我本人学习 TensorFlow 实现 LSTM 的经历 xff0c 发现网上虽然
  • 程序员面试经历

    现在找工作 已经没有了毕业以后那时候找工作的那种紧张心情 自从在上家公司离职以后 自己进行了一段时间的工作 世界上本来没有面霸 面试的多了 也就成了面霸 不得不承认 一开始自己面试是有些紧张 但是 面试的多了 也就不觉得紧张 反而有些平淡了
  • keil中快速注释一段代码

    方法一 xff1a 在该段代码的前面加 在该段代码的后面加 代码 方法二 xff1a 自行添加快捷键 lt 1 gt 点击configuration lt 2 gt 点击shortcut keys xff0c 选择Edit Advanced
  • java实习两个月总结

    实习两个月总结 刚开始实习的时候激情满满 慢慢的激情也退却了 在杭州月薪3000干了两个月我自己都觉得不可思议 杭州的物价大家有目共睹 先谈谈收获 认识了java8的新特性 了解了开发中常用的工具和工具包 持续集成部署的jenkins sw
  • 一台电脑如何装3个系统操作教程

    很多小伙伴都想安装个三系统试试 xff0c 但是安装三系统需要一些装机基础才能成功安装 xff0c 电脑如何安装三系统 接下来快启动小编带大家了解电脑如何安装三系统的详细操作 xff0c 希望给走入迷途的小伙伴一些正能量 电脑三系统安装准备
  • Modbus的常见问题解答:多台设备如何连接?为什么要加终端电阻?RS485总线可挂接多少个设备?在RS485通讯中,最大传输距离是多少?

    多台RS485设备如何连接呢 xff1f 使用屏蔽双绞线 xff0c 采用手拉手菊花链式拓扑结构将网关和各串行设备节点连接起来 xff0c 并在网络起始端和末尾端设备的RS485 43 和RS485 之间各并接一个120 电阻以减少信号在两
  • ADRC学习|TD微分跟踪器(原理解析和Matlab实现)

    系列文章目录 TD微分跟踪器 原理解析和Matlab实现 状态扩张观测器 目录 系列文章目录前言微分跟踪器作用原理线性TD非线性TDTD的一个定理最速离散控制函数 Matlab实现参考文献 前言 学习韩老师的ADRC xff0c 把学习过程
  • ROS踩坑|warning:clock skew detected. Your build may be incomplete

    报错展示 warning xff1a clock skew detected Your build may be incomplete 问题分析 ROS编译时遇到这个问题95 是因为系统时钟错误了 xff0c 比如说你之前的编译的时间时20
  • ros学习|功能包相关|查找、安装、卸载删除某个功能包

    在运行别人的demo时 xff0c 是不是会出现找不到功能包的情况 所以查找 安装和卸载某个功能包是蛮重要的 查找 查询当前安装完成的所有包文件 rospack list 查询ros的所有功能包 span class token funct
  • Vector数组类型在ROS开发中的用法小结

    目录 前言数组类型在不同消息类型中的定义在ROS消息中的定义在C 43 43 中定义数组 vector数组的一些常用操作基本操作求数组的最值遍历数组排序数组查找数组注意 前言 ROS系统的一个显著优势就是分布式和灵活性 xff0c 用户可以
  • Java 核心技术卷一 随笔

    Java 易混 xff0c 重难点汇总 1 基础篇 整型 浮点 final 一般用于指示常量 xff0c 即变量只能被赋值一次 一旦被赋值 xff0c 就不能更改了 xff08 即没有set方法 xff09 命名规则一般使用全大写及下划线
  • Linux 面试最常问的十个问题

    如果你要去面试一个Linux系统运维工程师的职位 xff0c 下面这十个最常见的问题一定要会 xff0c 否则你的面试可能就危险了 这些都是比较基本的问题 xff0c 大家要理解 xff0c 不能光死记硬背 1 如何查看系统内核的版本 这里
  • 处理iOS开发中的各种警告

    iOS开发中我们会遇到各种警告 包括第三方不再支持更新导致的警告 苹果一些过时方法的警告 其中尤其是ASIHttpRequest的不支持更新导致有很多的警告 所以我在这里做了罗列 Semantic Warnings WarningMessa
  • c#利用虚拟串口工具进行串口通信数据的发送和接收

    原文 xff1a 我的个人博客 串口通信 串口通信 xff08 Serial Communications xff09 的概念非常简单 xff0c 串口按位 xff08 bit xff09 发送和接收字节 尽管比按字节 xff08 byte
  • stm32 移植 FreeRTOS

    1 建立裸机工程 在移植 freeRTOS 之前需要创建一个 stm32f103 的 keil5 裸机工程 所谓裸机工程就是包含 stm32f103 单片机的启动文件 xff0c 外设驱动固件库的文件集合 xff0c 也可以说是支持裸机开发
  • ESP32(Espressif-IDE)添加外部(.c .h)文件 (error:undefined reference to)

    0x00 xff1a 前言 笔记文件 用习惯了keil和iar之类的开发软件 xff0c 一下子转换到ESP32是特别的不习惯 xff0c 这里使用的开发环境是乐鑫官方推出的Espressif IDE xff0c 也是刚学折腾ESP32 x