ESP32开发(4):构建自己的工程

ESP32开发初学者,文章内容纯属个人经验,有错误在所难免,望见谅!
2019-4-12更新: 有网友反映,那个宏编译没有起作用,经过测试的确存在这样的问题,改正方法是,将宏判断写在主函数所在的文件中。

最小工程

ESP32通过Makefile和component.mk编译和组织工程文件。
下图是一个最小的可编译的工程框架
ESP32开发(4):构建自己的工程_第1张图片
我们来看各个文件的内容
component.mk

#
# "main" pseudo-component makefile.
#
# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)

对的,你没看错,只有几行注释,但是这个文件却是必须有的,没有这个文件,Makefile在编译工程时就会找不到app_main这个启动函数。在这个文件中也可以写入main文件夹下的头文件和源文件路径,这个后面再说。
user_app_main.c

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"

static const char* TAG = "APP MAIN";

void app_main()
{
    uint8_t count = 0;
    ESP_LOGI(TAG,"=====this is a test project======");
    while(1)
    {
       ESP_LOGI(TAG,"count:%d",count++);
       vTaskDelay(1000);
    }
}

一个比较简单的测试例程,每隔一段时间在终端打印一次count
Makefile

#
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
# project subdirectory.
#

PROJECT_NAME := my_project

include $(IDF_PATH)/make/project.mk

每个ESP32工程都会有这样一个Makefile文件,用来配置整个项目。没有这个文件,就不能使用make命令来编译你的工程。
第一行PROJECT_NAME := my_project用来设置工程编译完成后的bin文件的名称;
第二行include $(IDF_PATH)/make/project.mk用来设置编译所需的组件库的路径,将你的工程文件和esp-idf这个组件库链接起来。
现在,我们在终端输入make来编译整个工程
ESP32开发(4):构建自己的工程_第2张图片
会发现多了一个build文件夹和sdkconfig文件,build文件夹用来放编译过程中产生的输出文件,sdkconfig文件用来存放menuconfig的配置文件,就是上面那个菜单的有关配置。
编译完成后,会产生三个bin文件,其中一个就是我们刚才在Makefile中设置的my_project.bin
ESP32开发(4):构建自己的工程_第3张图片

添加自己的组件

我们在工程主目录下,建立一个components文件夹用来放置我们自定义的组件
在这里插入图片描述
然后在components中创建如下目录,文件作用我们后说。
ESP32开发(4):构建自己的工程_第4张图片
在component,mk中输入以下内容

COMPONENT_ADD_INCLUDEDIRS := include

表示组件源文件所需的头文件都到component.mk所在目录的include文件夹下找,别的组件如果引用到本组件的所包含的头文件也会到这个include文件夹下找。如果组件框架比较复杂,我们可能还需要添加其他路径,假如my_comp组件下还含有lib/inc(.h文件)和lib/src(.c文件)文件夹,那我们就需要将其路径添加在component.mk中,以便编译器能找到它们。

COMPONENT_ADD_INCLUDEDIRS := ./lib/inc ./include
COMPONENT_SRCDIRS :=  ./ lib/src

在Kconfig文件中输入如下代码

menu "MY_COMP"
config MY_COMP_ENABLE
bool "Enable my_comp"
default "y"
endmenu

这段代码的作用,是在menuconfig主菜单下添加一个我们自定义的组件MY_COMP,在这个组件中有一个宏MY_COMP_ENABLE,它的默认值为“y”(意思就是选中),通过这样的方式,我们就可以配置和裁剪我们的工程,这将非常有利于我们的开发工作,在ESP32自带的组件中,我们可以看到很多这样的文件。
ESP32开发(4):构建自己的工程_第5张图片
我们可以在程序中通过这个宏来控制程序的条件编译,我们来看
my_comp.c

#include 
#include "my_comp.h"

void my_comp_test(void)
{
#if(CONFIG_MY_COMP_ENABLE == y)
printf("my_comp is configed\n");
#else
printf("not config");
#endif
}

标准格式的头文件……
my_comp.h

#ifndef _MY_COMP_H_
#define _MY_COMP_H_

void my_comp_test(void);

#endif

然后在app_main函数中执行测试函数,编译下载到开发板,我们直接来看运行结果
ESP32开发(4):构建自己的工程_第6张图片
至此,我们就实现了一个ESP32开发的最基本框架。我们可以在此基础上,再添加其他组件,比如wifi、TouchPad和LED等等。

你可能感兴趣的:(ESP32)