ESP32学习2:定制工程
作者:互联网
一、工程文件介绍:
新建工程文件如下图:
由于ESP-IDF使用的编译工具为CMake,而CMake可以通过编写CMakeLists.txt文件来定制整个编译流程,然后再根据用户平台生成Makefile和工程文件。也就是说编译过程完全依赖于CMakeLists.txt。
CMakeLists.txt文件内容分析
main/CMakeLists.txt内容如下:(其他CMakeLists.txt文件类同)
idf_component_register(SRCS "blink.c"
INCLUDE_DIRS ".")
该文件中的内容很简单,只有一句话,意思是注册并编译源文件blink.c和当前目录中的所有.h头文件。
根目录CMakeLists.txt内容如下:
# The following five lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.5)include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(blink)
该文件表明:
- 指定运行此配置文件所需的CMake最低版本为3.5
- 指定ESP-IDF应用的CMake配置文件
- 指定当前工程的名称为blink
二、通过CMakeLists.txt修改工程名称
通过以上CMakeLists.txt文件的介绍,修改工程名称。
- 修改工程文件名称为ESPTest
- 将main文件中的blink.c重命名为ESPTest.c
- 修改main/CMakeLists.txt文件,包含ESPTest.c。修改后如下:
- 修改根目录CMakeLists.txt文件,更改工程名为ESPTest
- 查看Makefile文件,将项目名称也改为ESPTest
- 最后,保存并编译程序。
三、添加驱动模块组件
添加.c.h组件最简单的方法,是直接将.c.h添加到main文件夹,之后修改main\CMakeLists.txt
。但此方法并没有将.c.h单独划分为模块,删减功能时会很麻烦,不利于大型工程的管理。
常规的做法是,将相似和关联的方法/函数封装为.c和.h文件,并以文件夹的方式加以区分管理。这样有利于系统对功能部件的删减,便于管理。
以下以LED闪烁的程序为例,单独编写led.c和led.h驱动文件:
1. 创建驱动组文件夹:
首先创建components文件夹,用来存储所有的驱动文件,然后再components文件夹中创建led文件夹,用来存储led驱动文件。再led文件夹下,创建led.c文件以及include文件夹,存放led.h文件。同时,复制CMakeLists.txt文件到led文件夹中。工程目录结构如图:
2.编写led,h及led.c驱动文件
led.h文件:
/*
* led.h
*
* Created on: 2021年12月4日
* Author: wangy
*/
#ifndef DRIVE_LED_LED_H_
#define DRIVE_LED_LED_H_
#include "sdkconfig.h"
#include "driver/gpio.h"
/* Can use project configuration menu (idf.py menuconfig) to choose the GPIO to blink,
or you can edit the following line and set a number here.
*/
#define BLINK_GPIO 2
void led_init(void);
void led_on(void);
void led_off(void);
#endif /* DRIVE_LED_LED_H_ */
led.c
/*
* led.c
*
* Created on: 2021年12月4日
* Author: wangy
*/
#include "led.h"
void led_init(void)
{
/* Configure the IOMUX register for pad BLINK_GPIO (some pads are
muxed to GPIO on reset already, but some default to other
functions and need to be switched to GPIO. Consult the
Technical Reference for a list of pads and their default
functions.)
*/
gpio_pad_select_gpio(BLINK_GPIO);
/* Set the GPIO as a push/pull output */
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
}
void led_on(void)
{
gpio_set_level(BLINK_GPIO, 1);
}
void led_off(void)
{
gpio_set_level(BLINK_GPIO, 0);
}
3.修改led驱动文件夹下的CMakeLists.txt文件
idf_component_register(SRCS "led.c"
INCLUDE_DIRS "include")
4.修改main/ESPTest.c
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
//#include "driver/gpio.h"
//#include "sdkconfig.h"
#include "led.h"
#define BLINK_GPIO 2
void app_main(void)
{
led_init();
/* Set the GPIO as a push/pull output */
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
while(1) {
/* Blink off (output low) */
printf("Turning off the LED\n");
led_on();
vTaskDelay(3000 / portTICK_PERIOD_MS);
/* Blink on (output high) */
printf("Turning on the LED\n");
led_off();
vTaskDelay(3000 / portTICK_PERIOD_MS);
}
}
结束
本文参考https://blog.csdn.net/Mark_md/article/details/113884641,这篇博客写的很详细,收益匪浅,再次对该博文作者表示感谢!
标签:CMakeLists,include,led,ESP32,学习,GPIO,定制,txt,void 来源: https://blog.csdn.net/sssxlxwbwz/article/details/121718943