5. ESP8266韌體的編譯(RTOS SDK韌體)
阿新 • • 發佈:2019-02-19
在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)
串列埠開啟後,可看到如下資訊: