5. ESP8266固件的編譯(RTOS SDK固件)

在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)

串口打開後,可看到如下信息:
**這裏寫圖片描述**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章