--- title: ESP8266工程的裁剪和编译 categories: - ESP8266 abbrlink: 2e11c696 date: 2018-01-23 16:35:39 tags: --- ## 前言 本篇文章主要讲一下,乐鑫官方给的ESP8266 Demo怎么裁剪成我们要的样子以及编译。 ## 模板工程所需文件 由于官方给的工程是包含了全部的Demo和库所以我们直接使用是不能编译的。我们就从一个最基础的工程模板开始裁剪,因为其他的功能都可以通过工程模板添加库和代码来实现。首先亮一下官方原版的RTOS SDK的工程结构(下左图)。 ![1.png](https://s1.ax1x.com/2018/01/23/pIQc7j.png) 我们需要把这个工程做成一个最基本的模板那么就需要把里面冲突的和暂时不需的都给删除。如下图是需要裁剪的内容: 红色的是需要删除的。紫色的删了节省空间。 ![2.png](https://s1.ax1x.com/2018/01/23/pI1hOU.png) 所以我们把刚刚标记这些都全部删除(别忘了备份一个原版的以后用)之后,这样就会少了很多东西。 那现在可以编译了吗?打扰了,并不行。因为makefile这个神奇的东西存在,所以我们需要做一些调整和更改使得makefile能正确的识别、编译、链接整个工程。至于makefile是什么东西大家上网搜查看!这里就不展开讲了,因为就那个就可以做一个专题23333。 你暂时只需要知道编译整个工程需要它掌控整个工程的各个文件的信息和关系的,所以我们需要告诉它各个文件的信息和之间的关系,所幸的是官方给的makefile已经很通用了,我们稍微做改变就可以了(感谢ing...) ## 模板工程文件的调整 下面的操作就是属于比较灵性的,不要问我为什么因为我个人觉得这样比较好。先按照我的来,等你学会了就可以去装逼了。先约定"/"就是工程的根目录,用绝对路径目录有点长。 1. 剪切 /driver_lib/driver ---> /examples/project_template/ 2. 剪切 /driver_lib/include/ 的所有头文件 ---> /examples/project_template/include/ 3. 改名 /examples/project_template ---> app 4. 复制 /examples/app ---> / 5. 删除 /app/sample_lib 目录 6. 删除 /driver_lib 目录 7. 删除 /examples 目录 这样就完成了工程文件的调整:把相关的硬件驱动移到app目录下面,并且删除了示例的库。调整完成之后的目录如下图(documents目录删不删不影响): ![3.png](https://s1.ax1x.com/2018/01/23/pouGqJ.png) ## MakeFile文件的修改 1. 修改/Makefile文件 - 文件里添加两句话SDK_PATH=××× BIN_PATH=xxx 比如我的工程根目录在 " e:/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template "那么我的文件修改如下: ```makefile .... ifndef PDIR endif SDK_PATH=e:/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template BIN_PATH=e:/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template/bin ifeq ($(COMPILE), xcc) ... ``` 2.修改/app/Makefile文件 - 文件里添加一句话SDK_PATH=××× 添加在文件的17行左右,内容就是你工程的根目录。 - 文件里的SUBDIR=××× 把所有包含了c文件的子目录都添加进去。('\'表示续一行),ctrl+f可快速查找,修改位置大概在23行左右。 - 修改完成之后如下: ```makefile ...上续 #FLAVOR = release FLAVOR = debug SDK_PATH=e:/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template #EXTRA_CCFLAGS += -u ifndef PDIR # { GEN_IMAGES= eagle.app.v6.out GEN_BINS= eagle.app.v6.bin SPECIAL_MKTARGETS=$(APP_MKTARGETS) SUBDIRS= \ user \ driver endif # } PDIR ...下续 ``` - 把COMPONENTS_eagle.app.v6=××× 需要的.a文件修改为子目录下生成对应的.a文件(听不懂没关系,看效果代码),大概在48行左右。 ```makefile ...上续 ifeq ($(FLAVOR),release) TARGET_LDFLAGS += -g -O0 endif COMPONENTS_eagle.app.v6 = \ user/libuser.a \ driver/libdriver.a LINKFLAGS_eagle.app.v6 = \ -L$(SDK_PATH)/lib \ -Wl,--gc-sections \ ...下续 ``` 这样就修改完成了。 ## 工程的编译 1. 左键点击工程名选中工程->右键弹出菜单->BuildProject 即可编译。如果出现BuildProject选项灰色就是你没选中。如果失败可以尝试CleanProject(就在BuildProject下面)一下工程再编译。 2. 编译之后输出窗口大致如下,输出两个bin文件:eagle.flash.bin 和 eagle.irom0text.bin ,这样就完成了工程的编译。这个固件是不支持OTA升级的,所以也不需要boot。也没有user1.bin和user2.bin。所以不要觉得奇怪。 ```N 23:48:32 **** Incremental Build of configuration Default for project ESP8266_RTOS_SDK-1.5-project_template **** make all make[1]: Entering directory '/cygdrive/e/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template/app' make[2]: Entering directory '/cygdrive/e/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template/app/user' make[2]: Leaving directory '/cygdrive/e/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template/app/user' make[2]: Entering directory '/cygdrive/e/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template/app/driver' make[2]: Leaving directory '/cygdrive/e/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template/app/driver' !!! SDK_PATH: e:/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template BIN_PATH: e:/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template/bin No boot needed. Generate eagle.flash.bin and eagle.irom0text.bin successully in BIN_PATH eagle.flash.bin-------->0x00000 eagle.irom0text.bin---->0x20000 !!! make[1]: Leaving directory '/cygdrive/e/esp8266/leixing/ESP8266_RTOS_SDK-1.5-project_template/app' 23:48:37 Build Finished (took 4s.472ms) ``` ## 后记 这篇说的可能看起来有点云里雾里。因为和平时大家用的的不需要自己编写编译规则的IDE不同。像keil的话你添加的头文件也需要的手动添加到工程的IncludePath里面去。但是用这个eclipse开发esp8266完全使用makefile控制的,你的目录,头文件,c文件都是需要你手动配置makefile的,道理都一样都是要告诉编译器怎么去编译链接文件。不过是你自己找到makefile添加而已。之后会专门有一篇大概说一下整个工程如果我们想添加新的功能文件夹(比如实现一个tcp客户端功能),我们怎么去修改makefile。有什么疑问欢迎联系我。