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