ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ESP-IDF components 참조 cMakeLists (vscode)
    소프트웨어 2023. 3. 25. 00:51

    #esp32 윈도우 vscode 환경
    #선행(필수) ESP-IDF 윈도우 개발환경 세팅(vscode)
    #선행(필수) ESP-IDF 외부 폴더에서 예제 파일 실행(vscode)
    #선행(필수) ESP-IDF .c .h 참조 cMakeLists (vscode)


    1) components 참조

    ESP-IDF .c .h 참조 cMakeLists (vscode) 의 최종 예제 파일을 불러 옵니다.
    main.c에서 plus.c 를 참조하기 위해서는  #include "plus.h" 가 필요 했습니다.
    #include "plus.h" 를 포함하기 위해서는 CMakeLists.txt 를 수정해야 했습니다.

    그런데 main.c 에서 #include "driver/gpio.h" 라는 헤더 파일을 포함하면
    CMakeLists.txt의 수정 없이도 오류 없이 컴파일 됩니다.
     
    이 이유는 ESP-IDF 빌드 시스템이 main 폴더의 파일을 빌드할 때는
    C:\Espressif\frameworks\esp-idf\components\ 의 하위 경로를 참조하기 때문입니다.
    모든 하위 경로를 다 참조하지는 않고, components\ 의 하위 경로 중에서
    폴더명이 include 인 폴더만 참조를 합니다.
    include 의 상위 경로나 하위 경로는 참조하지 않습니다.

    예를 들어, gpio.h 헤더 파일은
    C:\Espressif\frameworks\esp-idf\components\driver\include\driver\gpio.h 경로에 있습니다.
    gpio.h를 main.c에 포함하기 위해서는 #include "driver/gpio.h" 라고 작성을 해야 합니다.
    gpio.h 파일이 include 안의 driver 폴더 안에 있기 때문입니다.
    #include "gpio.h" 이렇게 작성을 하면 컴파일 에러가 발생 합니다.
    nvs.h 헤더 파일은 C:\Espressif\frameworks\esp-idf\components\nvs_flash\include\nvs.h 경로에 있습니다.
    main.c 에서 #include "nvs.h" 이렇게 작성해 주면 됩니다.
     

     

    main 폴더 이외의 경로에 있는 소스 코드는,
    C:\Espressif\frameworks\esp-idf\components\ 의 하위 경로를 참조 하지 않습니다.
    plus.c에서 #include "driver/gpio.h" 이렇게 작성하면 컴파일 에러가 발생합니다.
    위의 plus.c에서  C:\Espressif\frameworks\esp-idf\components\ 의 특정 헤더 파일을 참조하기 위해서는,
    components/plus/CMakeLists.txt 를 아래와 같이 수정해 주어야 합니다.

    idf_component_register(SRCS
                        "plus.c"
                        INCLUDE_DIRS
                        "."
                        REQUIRES  // 추가
                        "driver"  // 추가
                        )

    plus.c 가 main.c 처럼 C:\Espressif\frameworks\esp-idf\components\ 의 하위 모든 include 폴더를
    참조할 방법은 없습니다. 필요한 헤더 파일에 맞추어 아래와 같이 REQUIRES 를 작성해 주어야 합니다.
    필요한 헤더 파일이
    C:\Espressif\frameworks\esp-idf\components\driver\include\driver\gpio.h
    이 경로에 있다면, REQUIRES "driver"  ->  #include "driver/gpio.h"

    C:\Espressif\frameworks\esp-idf\components\nvs_flash\include\nvs.h
    이 경로에 있다면, REQUIRES "nvs_flash"  ->  #include "nvs.h"

    REQUIRES에 작성한 경로의 하위 include 를 참조 하겠다는 뜻 입니다.

    *예외적으로 freertos, log, esp_common 등의 components는 컴파일시 기본 경로 참조를 하고 있기 때문에 REQUIRES 작성이 필요 없습니다.
     

    2) 외부 경로 components 참조

    프로젝트 폴더나 C:\Espressif\frameworks\esp-idf\components\ 경로가 아닌 외부 폴더의 components 참조 방법.

    참조할 헤더 파일이 C:/ESP_test/components/plus (임의 경로) 에 있다면 /main 의 CMakeLists.txt 가 아닌 루트 폴더의 CMakeLists.txt 를 아래와 같이 수정해 줍니다.

    cmake_minimum_required(VERSION 3.16)
    
    set(EXTRA_COMPONENT_DIRS C:/ESP_test/components/plus) // 외부 경로
    
    include($ENV{IDF_PATH}/tools/cmake/project.cmake)
    project(hello_world)

    set(EXTRA_COMPONENT_DIRS C:/ESP_test/components/plus) 라인만 추가가 되었습니다.
     


     

    *공부하는 입장에서 정리중인 자료들 입니다.


    ESP-IDF 윈도우 개발환경 세팅 (VSCODE)
    ESP-IDF 외부 폴더에서 예제 파일 실행 (VSCODE)
    ESP-IDF GPIO 인풋, 아웃풋 (VSCODE)
    ESP-IDF 인터럽트 (VSCODE)

    ESP-IDF 디바운싱 (esp32, vscode)
    ESP-IDF .c .h 참조 cMakeLists (vscode)

    ESP-IDF components 참조 cMakeLists (vscode)
    ESP-IDF LCD 출력(vscode)
    ESP-IDF 메모리 - Flash (vscode)
    ESP-IDF 메모리 - SRAM (vscode)
    ESP-IDF FreeRTOS - buffer (vscode)

    ESP-IDF 쿨링팬 FG센서, PWM제어(vscode)

     



    <포스트 예정>

    *ESP-IDF 메모리 - ROM
    *LCD - 메뉴 만들고 버튼으로 메뉴 이동(터미널로 작업)
    *LCD - 2차원 배열로 메뉴 진입, 뒤로가기(터미널로 작업)
    *LCD - 메뉴 만든 것 LCD 출력
    *LCD - 메뉴 UI 제작.  연두색 블럭은 메인 메뉴 회색 블럭은 서브 메뉴
            (1.팬  1-1.ON  1-2.OFF  1-3.BACK   2.LED  2-1.밝기 약  2-2.밝기 중  2-3.밝기 강   2-4.BACK   3.빛 밝기 출력 lux(+PPFD 변환)
    *Easy EDA툴 활용하여 커스텀 ESP32 보드 제작
    *LCD - LCD , 팬 , 펌프 ,  ESP32 연결 가능한 PCB 제작 주문.
    *LCD - 간이 스마트팜 제작
    *ESP32 JTAG 디버그
    *FreeRTOS
    *FreeRTOS - QUEUE
    *FreeRTOS - timer
    *FreeRTOS - Semaphore , mutex
    *FreeRTOS - event group , notification
    *ESP-IDF I2C SPI UART
    *ESP-IDF wifi
    *ESP-IDF MQTT
    *ESP-IDF Server (XAMPP 로컬 서버 연결)

    *DIY 컨테이너 / 유리온실 스마트팜 제작

     
     
     
     
     
     
     
     
     

    '소프트웨어' 카테고리의 다른 글

    ESP-IDF 메모리 - Flash (vscode)  (0) 2023.03.25
    ESP-IDF LCD 예제(vscode)  (0) 2023.03.25
    ESP-IDF .c .h 참조 cMakeLists (vscode)  (0) 2023.03.24
    ESP-IDF 디바운싱 (vscode)  (0) 2023.03.23
    ESP-IDF 인터럽트 (vscode)  (0) 2023.03.18
Designed by PixelSpace