在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)
串口打開後,可看到如下信息: