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


    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文件

    1. #include "myGPIO.h"
    2. #include "myLED.h"
    3. void myGPIO_Init(void )
    4. {
    5. gpio_set_direction(GPIO_NUM_1,GPIO_MODE_OUTPUT);
    6. }

    myGPIO.文件

    1. #ifndef MYDRIVES_MYGPIO_MYGPIO_H_
    2. #define MYDRIVES_MYGPIO_MYGPIO_H_
    3. void myGPIO_Init(void );
    4. #endif /* MYDRIVES_MYGPIO_MYGPIO_H_ */

     4、myGPIO

    myLED.c

    1. #include "myLED.h"
    2. #include "myGPIO.h"
    3. void myLED_Init(void )
    4. {
    5. myGPIO_Init();
    6. }
    7. void myLED_Function(void )
    8. {
    9. myLED_H;
    10. printf("myLED_H\n");
    11. vTaskDelay(500);
    12. myLED_L;
    13. printf("myLED_L\n");
    14. vTaskDelay(500);
    15. }

     myLED.h

    1. #ifndef MYDRIVES_MYLED_MYLED_H_
    2. #define MYDRIVES_MYLED_MYLED_H_
    3. #include "freertos/FreeRTOS.h"
    4. #include "freertos/task.h"
    5. #include "driver/gpio.h"
    6. #define myLED_H gpio_set_level(GPIO_NUM_1,1)
    7. #define myLED_L gpio_set_level(GPIO_NUM_1,0)
    8. void myLED_Init(void );
    9. void myLED_Function(void );
    10. #endif /* MYDRIVES_MYLED_MYLED_H_ */

     4、main 主函数修改

    1. #include <stdio.h>
    2. #include "sdkconfig.h"
    3. #include "freertos/FreeRTOS.h"
    4. #include "freertos/task.h"
    5. #include "esp_system.h"
    6. #include "esp_spi_flash.h"
    7. #include "myGPIO.h"
    8. #include "myLED.h"
    9. void app_main(void)
    10. {
    11. printf("Hello world!\n");
    12. myLED_Init();
    13. while(1)
    14. {
    15. myLED_Function();
    16. }
    17. }

     0x02:修改CMakeLists.txt文件

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

     

     

    1. set(src
    2. "hello_world_main.c"
    3. ../myDrives/myGPIO/myGPIO.c
    4. ../myDrives/myLED/myLED.c
    5. )
    6. set(inc
    7. "."
    8. ../myDrives/myGPIO
    9. ../myDrives/myLED
    10. )
    11. idf_component_register(
    12. SRCS ${src}
    13. INCLUDE_DIRS ${inc})

      0x03:编译运行

     

     

     

     

     

     

     

  • 相关阅读:
    maven了解
    使用 Vue.js 实现一个电子签名系统
    使用docker部署ELK日志框架-Elasticsearch
    学生指南|记着完善你的项目申请书
    echarts常用功能配置项
    让你的客户为你工作!推荐系统是如何运作的?
    学习笔记6--卫星定位技术(上)
    认识字符集、ASCII、GBK、Unicode、UTF-8
    springboot jar包瘦身
    C#【必备技能篇】ConfigurationManager 类的使用(文件App.config的使用)
  • 原文地址:https://blog.csdn.net/jgagdwp/article/details/125556891