学习记录
ESP8266 01S
内核回调
ESP8266的SDK编程是基于“内核回调”的方式
初始化
在user main. c文件中:
vold user_init(void)
{
初始化…
}
ESP8266内核为用户提用的初始化接口:用户的[应用功能初始化]入口
可初始化IO口、定时器、设置中断等
内核
内核是用户看不见,不能饰改
内核首先进行内核初始化
接着进行用户初始化
在while循环中
首先执行内核功能
接着执行用户功能
回调函数
当满足某条件时,内核调用回调函数
任务函数
系统空闲时,内核会调用任务函数
中断
触发中断时,执行中断函数
对于 ESP8266_NONOS_SDK_v1.5.2 至 ESP8266_NONOS_SDK_v2.2.1 之间的版
本,请在 user_main.c 增加函数 void user_rf_pre_init(void) 和 uint32 user_rf_cal_sector_set(void)。
编程注意事项
请勿频繁调⽤定时器,建议频率不高于每 5 ms 一次(微秒计时器则为 100 μs)。有关定时器使⽤的详细信息,请参阅 os_timer_arm() 和相关的 API 说明。
微秒定时器不是很精确,请在回调中考虑 500 μs 的抖动。如需实现⾼精度的定时,可以参考驱动程序 (driver_lib) 使⽤硬件定时器。请注意,PWM API 不能与硬件定时器同时使用。
ESP8266 通常的运⾏速率为 80 MHz,在⾼性能应⽤中也可以配置为160 MHz。请注意,外设不受 CPU 频率设置的影响,因为它们使用了不同的时钟源。
添加了 ICACHE_FLASH_ATTR 的代码通常比使⽤ IRAM_ATTR 标记的代码执行得慢。然⽽,像大多数嵌⼊式平台一样,ESP8266 的 iRAM 空间有限,因此建议一般代码添加ICACHE_FLASH_ATTR,仅对执⾏效率要求高的代码添加 IRAM_ATTR 宏。
RAM 和 flash 访问必须是 4 字对齐的,请勿直接进⾏指针转换。请使用 os_memcpy 或其他 API 进行内存操作。
看到这儿了,点个赞吧!