1. 程式人生 > >5. ESP8266韌體的編譯(RTOS SDK韌體)

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)

串列埠開啟後,可看到如下資訊:
**這裡寫圖片描述**