5. ESP8266固件的编译(RTOS SDK固件)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ydogg/article/details/72598829

在RTOS SDK下,除了用户程序入口函数名字是user_init()以外,
整个的编程感觉很像linux(当然具体是非常不一样的)下编程,也有tcp/ip协议栈,就像传统的C开发。

1)固件代码准备
一般来说,固件是和具体的业务应用有关,这里以examples/project_template为例,
仅仅输出SDK的版本信息和hello world。

ESP8266_RTOS_SDK 默认使用 UART0 打印调试信息,默认波特率为 74880
这种波特率很多软件都不支持,用起来颇为不便,因此改为115200。

修改user/user_main.c如下

在头文件引入处增加
#include “uart.h”

修改后的代码

#include "uart.h"

...

void user_init(void)
{
    // 115200
    UART_ConfigTypeDef  uart_config;
    uart_config.baud_rate               =   BIT_RATE_115200;
    uart_config.data_bits               =   UART_WordLength_8b;
    uart_config.parity                  =   USART_Parity_None;
    uart_config.stop_bits               =   USART_StopBits_1;
    uart_config.flow_ctrl               =   USART_HardwareFlowControl_None;
    uart_config.UART_RxFlowThresh       =   120;
    uart_config.UART_InverseMask        =   UART_None_Inverse;
    UART_ParamConfig(UART0, &uart_config);

    printf("SDK version:%s¥n", system_get_sdk_version());
    printf("hello world!¥n");
}

Makefile
需要在LINKFLAGS_eagle.app.v6定义中增加【-ldriver】, 以链接uart的库。

LINKFLAGS_eagle.app.v6 = ¥
    -L$(SDK_PATH)/lib        ¥
    -Wl,--gc-sections   ¥
    -nostdlib   ¥
    -T$(LD_FILE)   ¥
    -Wl,--no-check-sections ¥
    -u call_user_start  ¥
    -Wl,-static                     ¥
    -Wl,--start-group                   ¥
    -lcirom ¥
    -lcrypto    ¥
    -lespconn   ¥
    -lespnow    ¥
    -lfreertos  ¥
    -lgcc                   ¥
    -lhal                   ¥
    -ljson  ¥
    -llwip  ¥
    -lmain  ¥
    -lmesh  ¥
    -lmirom ¥
    -lnet80211  ¥
    -lnopoll    ¥
    -lphy   ¥
    -lpp    ¥
    -lpwm   ¥
    -lsmartconfig   ¥
    -lspiffs    ¥
    -lssl   ¥
    -lwpa   ¥
    -lwps       ¥
    -ldriver        ¥
    $(DEP_LIBS_eagle.app.v6)                    ¥
    -Wl,--end-group

2)环境变量设置

#指示RTOSSDK路径
export SDK_PATH=/绝对路径/.../ESP8266_RTOS_SDK
#存放生成的固件
export BIN_PATH=/绝对路径/fireware-bin

4) 编译
和NonOS SDK是一样的,为简单起见,这里编译的是Non-FOTA类型的固件,也就是所谓Eagle固件。

执行

bash gen_misc.sh

按提示编译,也可用如下命令直接编译。

ESP-01模块(Flash容量为1M,4Mbit)

make COMPILE=gcc BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=2

ESP-12系列(Flash容量为8M,32Mbit)

make COMPILE=gcc BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=4

如果是Nodemcu,则注意SPI选择DIO模式,而非QIO

make COMPILE=gcc BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=DIO SPI_SIZE_MAP=4

编译成功后,会在指定的BIN_PATH目录下生成,eagle固件。

No boot needed.
Generate eagle.flash.bin and eagle.irom0text.bin successully in BIN_PATH
eagle.flash.bin-------->0x00000
eagle.irom0text.bin---->0x20000

注意下载时,eagle.irom0text.bin的地址为0x20000(通常为0x10000)

串口打开后,可看到如下信息:
**这里写图片描述**

展开阅读全文

没有更多推荐了,返回首页