前言
最近想搞ESP32了,相中它的WIFI、蓝牙功能。
STM32寄存器开发习惯了,身为一个老顽固,底层还是想用寄存器开发(IO、通信啥的)。
使用VSCode开发,Keil和IAR这种开发软件不需要配置啥,没接触过感觉寸步难行,头文件的包涵就有问题了,不知道是不是我打开的方式不对,一直搜不到解决方法,没有针对我这种疑难杂症的,反复琢磨,今天终于包涵成功了,记录一下方法,可能会对同好有所帮助。
正文
新建一个空白工程如下图所示。
在工程文件夹内先建立 components 文件夹。
注意: 一定要在 components 文件夹中添加自己的.c文件,否则会调用失败。
如果不在 components 文件夹中添加自己的.c文件,只引用.h文件是没有问题的。
再在刚刚建立的 components 文件夹中建立 inc 和 src。
在 inc 和 src 中分别添加自己的 工程文件,下面以 我自己创建的 ESP32_Core.c (该文件一定要在 components 文件夹中)和 ESP32_Core.h 为例。
如下图。
简单的写一下 ESP32_Core.c 和 ESP32_Core.h 里面的内容,方便接下来的调用。
ESP32_Core.c 文件内容如下
#include "ESP32_Core.h"
void SysClock_Init(void)
{
}
ESP32_Core.h文件内容如下
#ifndef __ESP32_Core_H
#define __ESP32_Core_H
//-----------------------------------------------------------------------------------------------
#define SUCCEED ((uint8_t)0)
#define FAILED ((uint8_t)1)
#define OFF ((uint8_t)0)
#define ON ((uint8_t)1)
//-----------------------------------------------------------------------------------------------
void SysClock_Init(void);
//-----------------------------------------------------------------------------------------------
#endif
然后在 main.c 中调用 SysClock_Init() 函数。
#include <stdio.h>
#include "ESP32_Core.h"
void app_main(void)
{
SysClock_Init();
}
此时编译,可以看到编译不过去,找不到ESP32_Core.h
在使用 Keil 或者 IAR 时,如果要包涵自己的头文件,也需要配置 .h 的路径。
那么在这里需要怎么配置呢?就是在 CMakeLists.txt 中配置路径。
将 main.c 所在的文件夹内的 CMakeLists.txt 复制到 ESP32_Core.c 所在的文件夹中,即复制到 src 中,然后修改配置如下,添加 ESP32_Core.c 所需要的路径。
配置完 ESP32_Core.c 的 CMakeLists.txt 后,还需要配调用 ESP32_Core.h 的 main.c 的 CMakeLists.txt 文件。
修改 main.c 所在文件夹内的 CMakeLists.txt 文件,添加 ESP32_Core.h 的路径。
然后再编译,解决了,编译通过。
但是可以看到,当前 CMakeLists.txt 使用的是绝对路径,如果复制该工程后,还需要但需修改路径,很不方便,那么就可以使用相对路径。
可以看到,这回就是相对路径了。我原来就是纠结怎么退到上一层文件夹,现在知道了
“…/components/inc”就代表上一层文件夹 中的 components 文件夹的 inc,
“…/inc”就代表上一层文件夹 中的 inc,
这样就可以随心所欲的引用不同路径了。
idf_component_register(SRCS "main.c"
INCLUDE_DIRS "."
"../components/inc")
idf_component_register(SRCS "ESP32_Core.c"
INCLUDE_DIRS "."
"../inc")