Non-OS
SDK 为⽤户提供了⼀套应⽤程序编程接⼝ (API),能够实现
ESP8266 的核⼼功能改,例如数据接收/发送、TCP/IP 功能、硬件接⼝功能,以及基本的系统管理功能等。⽤户不必关⼼底层⽹络,如 Wi-Fi、TCP/IP 等的具体实现,只需要专注于物联⽹上层应⽤的开发,利⽤相应接⼝实现各种功能即可。ESP8266 物联⽹平台的所有⽹络功能均在库中实现,对⽤户不透明。⽤户应⽤的初始化功能可以在 user_main.c 中实现。void&n
BSP; user_init(void) 是上层程序的⼊⼝函数,给⽤户提供⼀个初始化接⼝,⽤户可在该函数内增加硬件初始化、⽹络参数设置、定时器初始化等功能。
代码结构
Non-OS SDK 适⽤于⽤户需要完全控制代码执⾏顺序的应⽤程序。由于没有
操作系统,
non-OS SDK 不⽀持任务调度,也不⽀持基于优先级的抢占。
Non-OS SDK 最适合⽤于事件驱动的应⽤程序。由于没有操作系统,non-OS SDK 没有单个任务堆栈⼤⼩的限制或者执⾏时隙要求。
Non-OS SDK 不像基于
RTOS 的应⽤程序⽀持任务调度。Non-OS SDK 使⽤四种类型的函数:
- 应⽤函数
- 回调函数
- ⽤户任务
- 中断服务程序 (Interrupt Service Routines, ISR)
系统性能
• ESP8266 通常的运⾏速率为 80 MHz,在⾼性能应⽤中也可以配置为160 MHz。请注意,外设不受
CPU 频率设置的影响,因为它们使⽤了不同的时钟源。
• 设置更⾼的时钟频率或者禁⽤睡眠模式,会导致更⼤的功耗,但能获得更好的性能。应⽤程序应考虑两者之间的平衡。
• 添加了ICACHE_FLASH_ATTR的代码通常⽐使⽤IRAM_ATTR标记的代码执⾏得慢。然⽽像⼤多数嵌⼊式平台⼀样,ESP8266的iRAM空间有限,因此建议⼀般代码添加ICACHE_FLASH_ATTR,仅对执⾏效率要求⾼的代码添加 IRAM_ATTR宏。
• Flash模式和频率直接影响代码执⾏速度。将flash设置为更⾼的频率和QIO模式会产⽣更好的性能,但会导致更⼤的功耗。
系统存储
• ESP8266⽀持⾼达 128 Mbits 的外部 Q
spi flash,⽤于存储代码和数据。也可以使⽤辅助存储芯⽚来存储⽤户数据。
• ESP8266没有存储⽤户代码或数据的⾮易失性存储。
ESP8285 是⼀款在 ESP8266的基础上集成了 flash 的芯⽚。
• ESP8266 带有 160 KB 的 RAM,其中 64 KB 为 iRAM,96 KB 为 dRAM。iRAM 进⼀步分成两块:32 KB iRAM 块运⾏标有 IRAM_ATTR 的代码,另⼀个 32 KB 块⽤作cache,运⾏标有 ICACHE_FLASH_ATTR 的代码。
• 从 ESP8266_NonOS_SDK_V3.0 开始,增加了⽀持使⽤ iRAM 作为内存的功能,能够多提供约 17 KB 的内存, 对性能可能有⼀定的影响,请根据实际应⽤需求设置,并建议做详细测试进⾏确认。使⽤⽅法如下:
- 在应⽤中定义 user_iram_
memory_is_
enabled 函数并设置返回值为 1。示例:
#define CONFIG_ENABLE_IRAM_MEMORY 1
#ifdef CONFIG_ENABLE_IRAM_MEMORY
uint32 user_iram_memory_is_enabled(void)
{
return CONFIG_ENABLE_IRAM_MEMORY;
}
#endif
- 如上设置后,默认使⽤ IRAM 作为内存,os_malloc、os_zalloc 和 os_
calloc 优先从 iRAM 分配,iRAM ⽤尽后会继续使⽤ dRAM 分配;
- 或者直接调⽤ os_malloc_iram、os_zalloc_iram、os_calloc_iram 指定从 iRAM 分配内存,iRAM ⽤尽后会继续使⽤ dRAM 分配;直接调⽤ os_malloc_dram、os_zalloc_dram、os_calloc_dram 指定从 dRAM 分配内存;
- 如需与旧版本兼容,可使能宏 MEM_DEFAULT_USE_DRAM,os_malloc、os_zalloc和 os_calloc 将从 dRAM 分配,⽽ os_malloc_iram、os_zalloc_iram、os_calloc_iram 可以指定从 iRAM 分配,iRAM ⽤尽后会继续使⽤ dRAM 分配。
更多内容请下载附件查看