简介
本文简要介绍 ESP8266
内部系统级 task
功能和相关参数说明。
task 名称 | task 初始化堆栈大小 | task 堆栈大小是否可配置 | task 创建顺序 | task 优先级 |
---|---|---|---|---|
uiT | 3584 | 是 | 1 | 14 |
IDLE | 1024 | 是 | 2 | 0 |
Tmr | 2048 | 是 | 3 | 2 |
tiT | 2048 | 是 | 4 | 8 |
esp_event_loop_task | 2048 | 是 | 5 | 10 |
ppT | 2048 | 是 | 6 | 13 |
pmT | 1024 | 否 | 7 | 11 |
rtT | 2048 | 否 | 8 | 12 |
task 堆栈大小可配置选项,可在
make menuconfig
中配置,但通常不建议用户修改。
task 说明
-
uiT (user init task)
此 task 初始化ESP8266
:包括文件系统,RTC
,MAC
,GPIO
, 频偏校准,WDT
,倍频等 -
IDLE
这是FreeRTOS
内部创建的IDLE task
。 当前主要处理task watchdog
和芯片睡眠 (sleep
) 功能 -
Tmr (timer)
这是FreeRTOS
内部创建的timer task
。当前主要处理所有软件定时器功能 -
tiT (tcp/ip task)
这是LWIP
核心 task。负责整个TCP/IP
协议栈的维护。 -
esp_event_loop_task
负责向用户层传递 ESP8266 系统事件。例如 WiFi 事件,TCP/IP 事件。 -
ppT (packet process task)
这是WiFi
核心 task。负责处理802.11
协议栈 LLC 层和TCP/IP
协议栈底层交互。 -
pmT (power management task)
系统低功耗管理 task。负责处理RF
开关,CPU
开关,外设等影响系统功耗的电源管理模块。 -
rtT (RTC timer)
系统高精度硬件定时器 task (FRC2
寄存器)。负责维护WiFi
实时事件。
笔记
-
建议不要在
app_main()
中添加一直阻塞的代码
因为app_main()
是在uiT task
之中,uiT task
调用完app_main()
后,会自动删除task
, 可为系统腾出约3KB+
内存 -
建议应用代码尽量不要使用硬件定时器
因为硬件定时器callback
阻塞而导致 WiFi 底层接收包受影响 -
用户创建的 task 优先级建议 1-9 之间
task 优先级过低,可能会影响一点数据吞吐。task 优先级过高,可能会打破系统稳定性。建议用户深入了解后合理设置。