一、前言
在完成了搭建环境与编译烧录后,接下来需要了解一下3.0版本的程序架构。
二、本文参考资料
1.esp8266_nonos_3.0版本的API使用文档.pdf(乐鑫官方文档)
2.https://www.bilibili.com/video/BV1dJ411S723?p=12(技小新8266教程)
三、正文部分
3.1 程序架构
ESP8266的SDK编程是基于“内核回调”的方式
user_main.c 文件中:
void user_init(void) //8266内核为用户提供的初始化接口:用户的【应用功能初始化】入口
{
初始化...; //IO口、定时器、设置中断...
}
用户看不见,不能修改
{
内核初始化...
user_init(); //执行 用户的【应用功能初始化】
while(1) //类似主循环
{
执行内核功能...
执行用户功能... //比如:用户初始化中设置了1s定时,那么在这里将会进行定时器计时
}
}
回调函数 //当满足某条件时,内核调用这些回调函数
void xxx_cb(void)
{
LED闪烁...
}
任务函数 //如果安排了任务,在系统空闲时,内核会调用任务函数
void xxx_Task(void)
{
...
}
中断函数 //当触发中断时,进入中断函数
void xxx_IRQHandler(void)
{
...
}
以下是官方文档的介绍
Non-OS SDK 为用户提供了一套应用程序编程接口 (API),能够实现 ESP8266 的核心功能,例如数据接收/发送、 TCP/IP 功能、硬件接口功能,以及基本的系统管理理功能等。用户不必关心底层网络,如 Wi-Fi、 TCP/IP 等的具体实现,只需要专注于物联网上层应用的开发,利用相应接口实现各种功能即可。
ESP8266 物联网平台的所有⽹网络功能均在库中实现,对用户不不透明。用户应用的初始化功能可以在 user_main.c 中实现。
void user_init(void) 是上层程序的入口函数,给用户提供一个初始化接口,用户可在该函数内增加硬件初始化、网络参数设置、定时器器初始化等功能。
• 对于 ESP8266_NONOS_SDK_v3.0.0 及之后版本,请在 user_main.c 增加函数void ICACHE_FLASH_ATTR user_pre_init(void),并且user_pre_init 中注册自己的 partition table。
对于 ESP8266_NONOS_SDK_v2.1.0 及之后版本,用户如果并未使用 DIO-To-QIO flash,可以在 user_main.c 中增加空函数 void user_spi_flash_dio_to_qio_pre_init(void)来优化 iRAM 空间。
SDK 中提供了了对 JSON 包的处理理 API,用户也可以采用自定义数据包格式,自行对数据进行处理。
Non-OS SDK 不像基于 RTOS 的应用程序支持任务调度。 Non-OS SDK 使用四种类型的函数:
- 应用函数
- 回调函数
- 用户任务
- 中断服务程序 (Interrupt Service Routines, ISR)
3.2 SDK编程注意事项
1. 请勿频繁调用定时器
2. 微秒定时器不是很精确
3. ESP8266 通常的运行速率为 80 MHz,在高性能应用中也可以配置为160MHz。请注意,外设不受CPU 频率设置的影响,因为它们使用了不同的时钟源。
4. 添加了 ICACHE_FLASH_ATTR 的代码通常比使用 IRAM_ATTR 标记的代码执行得慢。然而,像大多数嵌入式平台一样, ESP8266 的 iRAM 空间有限,因此建议一般代码添加ICACHE_FLASH_ATTR,仅对执行效率要求高的代码添加 IRAM_ATTR宏。
5. RAM 和 flash 访问必须是 4 字对齐的,请勿直接进行指针转换。请使用os_memcpy 或其他 API 进行内存操作
3.3 如何添加第三方文件
1.添加uart.c文件
2.添加uart.h与uart_register.h