|  | 
 
 
| 本帖最后由 wywa123 于 2021-1-13 19:20 编辑 
 ESP8266 windows原生编译入门指引
 
 ESP8266EX芯片,简单理解为一个带wifi功能的单片机。
 厂家乐鑫科技,
 https://www.espressif.com/
 
 
 由于内置存储极小,所以一般外挂一个存储芯片,比如25系列flash存储芯片,用来存储下载的程序(固件)。
 再外加上晶振,(天线),加上铁壳盖住,组成一个PCB小板,有人称为模组,例如ESP-12F。
 
 
 
 再加上AMS1117(供电),CH340(USB to TTL),构成一个小开发板,插上USB线便可下载程序。
 
 后文便以这种带CH340的小开发板为例。
 
 在乐鑫官方的所有编程帮助文档中,windows平台下,开幕雷击的是,让读者下载他们的linux虚拟机,导入虚拟机去编译。
 这种windows平台编译指南,有mao用?
 
 自己动手,丰衣足食。
 
 编译器:
 查阅资料发现,ESP8266内的单片机部分是Tensilica L106,GCC有对应的交叉编译器,有对应的windows bin。
 乐鑫官方有下载,但是页面藏的很深:
 https://docs.espressif.com/proje ... /windows-setup.html
 推荐下载v4.8.5版(26.6MB):
 https://dl.espressif.com/dl/xten ... e0bdc1-4.8.5.tar.gz
 
 SDK:
 SDK分为两种,non-OS 和 freeRTOS的,推荐下载freeRTOS。
 freeRTOS有很多版本,主要是3.X版和2.X版。
 
 笔者推荐下载2.1.0版,2.X里最新的版本,笔者曾下载过2.0.0,不过缺少libdriver.a,这么粗心的人。
 https://github.com/espressif/ESP8266_RTOS_SDK/releases/tag/v2.1.0
 官方是放在github里的,由于某些恶势力对互联网的迫害,下载非常缓慢。
 
 选择2.1.0而不是3.X最新版的根据是,软件生命周期里的真香定律。
 刚开始,一帮牛逼的人,把一个软件做强大,然后火了。他们有钱撩妹,功成身退了。
 另一帮苍蝇,闻到这个软件火了,千方百计加入开发团队,成功把它搞成一坨X。
 
 作为行外人不了解软件的开发团队,如何判断这个软件好坏?
 当一个软件某个时间点体积暴增的时候,它一定被加入了XXX。。
 
 v2.1.0版不到7MB,v3.3版125MB,这里不言自明。
 
 
 其实下载完SDK与编译工具,理论上就可以编译了(还有些环境变量等)。
 编译和链接的参数,在makefile里有。
 但编译和链接的参数又臭又长,例如笔者摘出来如下:
 
 编译:
 
 xtensa-lx106-elf-gcc -M -Os -g -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -
 
 mtext-section-literals -ffunction-sections -fdata-sections -fno-builtin-printf -fno-jump-tables -DICACHE_FLASH
 
 -I ../include -I ../../include -I ../../extra_include -I ../../include/espressif -I ../../include/lwip -I
 
 ../../include/lwip/ipv4 -I ../../include/lwip/ipv6 -I ../../include/nopoll -I ../../include/spiffs -I ../../include/ssl
 
 -I ../../include/json -I ../../include/openssl -I ../../include/mqtt
 
 -o .output/eagle/debug/obj/hw_timer.o -c hw_timer.c
 
 链接:
 
 xtensa-lx106-elf-gcc -Ls:/ESP8266_RTOS_SDK-2.0.0/lib -Wl,--gc-sections -nostdlib -Ts:/ESP8266_RTOS_SDK-
 
 2.0.0/ld/eagle.app.v6.ld -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--start-group -lcirom -lcrypto -
 
 lespconn -lespnow -lfreertos -lgcc -lhal -ljson -llwip -lmain -lmirom -lnet80211 -lnopoll -lphy -lpp -lpwm -lsmartconfig
 
 -lspiffs -lssl -lwpa -lwps user/.output/eagle/debug/lib/libuser.a sample_lib/.output/eagle/debug/lib/libsample.a -Wl,--
 
 end-group user/.output/eagle/debug/lib/libuser.a sample_lib/.output/eagle/debug/lib/libsample.a -o 1.out
 
 为了方便,这里明显需要GNU的make和相关工具,这些工具在mingw32里有windows版,但是注意有依赖dll。
 比如:
 一定需要:
 make
 mkdir --- windows下是cmd的命令,而不是exe,而且路径分隔符不同'\''/';
 mv
 rm
 可能需要:
 sh
 bash
 
 需要修改的配置:
 把编译器的顶层bin目录加入path环境变量;
 新建 SDK_PATH 环境变量为你SDK的解压目录,这个路径的分隔符要用linux下的'/'而不是'\',目录尾不要加'\'或'/',否则会遇到烦人
 
 的错误;
 SDK根目录makefile里 SPI_SIZE_MAP?=0 ,这一句要根据flash容量大小改,比如4MB改成4.
 SDK根目录makefile里加一句"BIN_PATH := bin",bin是生成目录。
 
 SDK+编译工具+这些小程序,就能编译成功了。
 其中前两者加起来33.5MB,最后的小工具加起来才就几MB。
 就这些问题,难住了乐鑫官方的人,又整了个600MB的toolchain出来,还没法用。
 
 下载到8266的image,还需要特别处理,他们官方的makefile会调用python处理,需要你装好python并加到环境变量path里.
 
 最后编译方法是,cmd cd到 ESP8266_RTOS_SDK-2.1.0\examples\project_template\下,输入你找来的make(笔者用的是mingw32-make)
 
 ,回车就OK了。
 
 PS:编译的时候,在你工程目录里的makefile文件,注意要引用你调用函数所在的库,否则找不到函数。
 
 参考资料:
 https://www.espressif.com/
 https://blog.csdn.net/yannanxiu/article/details/79495897
 https://my.oschina.net/lgl88911/blog/483705
 
 
 | 
 
x本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?立即注册 
    打赏
查看全部打赏
 |