Skip to content

Commit

Permalink
feat(wifi): optimize esp32c6 iperf performance
Browse files Browse the repository at this point in the history
  • Loading branch information
xuxiao111 authored and jack0c committed Sep 4, 2023
1 parent d6c5227 commit 8847eee
Show file tree
Hide file tree
Showing 17 changed files with 171 additions and 36 deletions.
2 changes: 1 addition & 1 deletion components/esp_rom/esp32c6/ld/esp32c6.rom.net80211.ld
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ ieee80211_is_tx_allowed = 0x40000b8c;
ieee80211_output_pending_eb = 0x40000b90;
ieee80211_output_process = 0x40000b94;
ieee80211_set_tx_desc = 0x40000b98;
sta_input = 0x40000b9c;
//sta_input = 0x40000b9c;
wifi_get_macaddr = 0x40000ba0;
wifi_rf_phy_disable = 0x40000ba4;
wifi_rf_phy_enable = 0x40000ba8;
Expand Down
1 change: 0 additions & 1 deletion components/esp_system/include/esp_task.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@
#else
#define ESP_TASKD_EVENT_STACK (CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE + TASK_EXTRA_STACK_SIZE)
#endif /* CONFIG_LWIP_TCPIP_CORE_LOCKING */
#define ESP_TASK_TCPIP_PRIO (ESP_TASK_PRIO_MAX - 7)
#define ESP_TASK_TCPIP_STACK (CONFIG_LWIP_TCPIP_TASK_STACK_SIZE + TASK_EXTRA_STACK_SIZE)
#define ESP_TASK_MAIN_PRIO (ESP_TASK_PRIO_MIN + 1)
#define ESP_TASK_MAIN_STACK (CONFIG_ESP_MAIN_TASK_STACK_SIZE + TASK_EXTRA_STACK_SIZE)
Expand Down
9 changes: 9 additions & 0 deletions components/esp_wifi/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,15 @@ menu "Wi-Fi"
When this option is disabled, more than 10Kbytes of IRAM memory will be saved
but Wi-Fi throughput will be reduced.

config ESP_WIFI_EXTRA_IRAM_OPT
bool "WiFi EXTRA IRAM speed optimization"
default y if IDF_TARGET_ESP32C6
default n
help
Select this option to place additional frequently called Wi-Fi library functions
in IRAM. When this option is disabled, more than 5Kbytes of IRAM memory will be saved
but Wi-Fi throughput will be reduced.

config ESP_WIFI_RX_IRAM_OPT
bool "WiFi RX IRAM speed optimization"
default n if (BT_ENABLED && SPIRAM && IDF_TARGET_ESP32)
Expand Down
19 changes: 19 additions & 0 deletions components/esp_wifi/linker.lf
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ entries:
entries:
.wifislprxiram+

[sections:wifi_extra_iram]
entries:
.wifiextrairam+

[scheme:wifi_iram]
entries:
wifi_iram -> iram0_text
Expand All @@ -43,6 +47,10 @@ entries:
entries:
wifi_slp_rx_iram -> iram0_text

[scheme:wifi_extra_iram]
entries:
wifi_extra_iram -> iram0_text

[sections:wifi_log_error]
entries:
.rodata_wlog_error+
Expand Down Expand Up @@ -70,6 +78,7 @@ entries:
wifi_slp_rx_iram -> flash_text
wifi_iram -> flash_text
wifi_rx_iram -> flash_text
wifi_extra_iram -> flash_text
if LOG_MAXIMUM_LEVEL <= 0:
wifi_log_error -> rodata_noload
else:
Expand Down Expand Up @@ -117,6 +126,9 @@ entries:
if ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY = y:
* (extram_bss)

if ESP_WIFI_EXTRA_IRAM_OPT = y:
* (wifi_extra_iram)

[mapping:net80211]
archive: libnet80211.a
entries:
Expand All @@ -135,9 +147,16 @@ entries:
if ESP_WIFI_RX_IRAM_OPT || ESP_WIFI_SLP_IRAM_OPT:
* (wifi_slp_rx_iram)

if ESP_WIFI_EXTRA_IRAM_OPT = y:
* (wifi_extra_iram)

[mapping:esp_wifi]
archive: libesp_wifi.a
entries:
if ESP_WIFI_IRAM_OPT = y:
esp_adapter:coex_pti_get_wrapper (noflash)
wifi_netif:wifi_sta_receive (noflash)
wifi_netif:wifi_transmit_wrap (noflash)
if ESP_WIFI_SLP_IRAM_OPT =y:
esp_adapter:wifi_clock_enable_wrapper (noflash)
esp_adapter:wifi_clock_disable_wrapper (noflash)
Expand Down
25 changes: 25 additions & 0 deletions components/lwip/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@ menu "LWIP"
could be used to convert network interface index to name
instead of IDF specific esp-netif APIs (such as esp_netif_get_netif_impl_name())

config LWIP_TCPIP_TASK_PRIO
int "LWIP TCP/IP Task Priority"
default 18
range 1 24
help
LWIP tcpip task priority. In case of high throughput, this parameter
could be changed up to (configMAX_PRIORITIES-1).

config LWIP_TCPIP_CORE_LOCKING
bool "Enable tcpip core locking"
default n
Expand All @@ -26,6 +34,15 @@ menu "LWIP"

If disable tcpip core locking,TCP IP will perform tasks through context switching

config LWIP_TCPIP_CORE_LOCKING_INPUT
bool "Enable tcpip core locking input"
depends on LWIP_TCPIP_CORE_LOCKING
default n
help
when LWIP_TCPIP_CORE_LOCKING is enabled, this lets tcpip_input() grab the
mutex for input packets as well, instead of allocating a message and passing
it to tcpip_thread.

config LWIP_CHECK_THREAD_SAFETY
bool "Checks that lwip API runs in expected context"
default n
Expand Down Expand Up @@ -70,6 +87,14 @@ menu "LWIP"

If this feature is disabled, all lwip functions will be put into FLASH.

config LWIP_EXTRA_IRAM_OPTIMIZATION
bool "Enable LWIP IRAM optimization for TCP part"
default n
help
If this feature is enabled, some tcp part functions relating to RX/TX in LWIP will be
put into IRAM, it can improve TCP throughput. On the other hand, it needs about 17KB
IRAM for these optimizations.

config LWIP_TIMERS_ONDEMAND
bool "Enable LWIP Timers on demand"
default y
Expand Down
78 changes: 65 additions & 13 deletions components/lwip/linker.lf
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,15 @@ archive: liblwip.a
entries:
if LWIP_IRAM_OPTIMIZATION = y:
sockets:get_socket (noflash_text)
sockets:tryget_socket (noflash_text)
sockets:tryget_socket_unconn (noflash_text)
sockets:sock_inc_used (noflash_text)
sockets:tryget_socket_unconn_nouse (noflash_text)
sockets:tryget_socket_unconn_locked (noflash_text)
sockets:done_socket (noflash_text)
sockets:lwip_recvfrom (noflash_text)
sockets:lwip_recv_tcp (noflash_text)
sockets:lwip_recv_tcp_from (noflash_text)
sockets:lwip_recvfrom_udp_raw (noflash_text)
sockets:lwip_send (noflash_text)
sockets:lwip_sendto (noflash_text)
sockets:event_callback (noflash_text)
sockets:lwip_select (noflash_text)
sockets:select_check_waiters (noflash_text)
api_lib:netconn_apimsg (noflash_text)
api_lib:netconn_recv_data (noflash_text)
api_lib:netconn_tcp_recvd_msg (noflash_text)
api_lib:netconn_tcp_recvd (noflash_text)
api_lib:netconn_recv_data_tcp (noflash_text)
api_lib:netconn_recv_tcp_pbuf_flags (noflash_text)
Expand All @@ -35,7 +26,6 @@ entries:
netbuf:netbuf_alloc (noflash_text)
netbuf:netbuf_free (noflash_text)
tcpip:tcpip_thread (noflash_text)
tcpip:tcpip_thread_handle_msg (noflash_text)
tcpip:tcpip_inpkt (noflash_text)
tcpip:tcpip_input (noflash_text)
tcpip:tcpip_callback (noflash_text)
Expand All @@ -55,14 +45,11 @@ entries:
ip4:ip4_output_if_opt_src (noflash_text)
ip4:ip4_output (noflash_text)
pbuf:pbuf_alloc (noflash_text)
pbuf:pbuf_add_header_impl (noflash_text)
pbuf:pbuf_add_header (noflash_text)
pbuf:pbuf_remove_header (noflash_text)
pbuf:pbuf_header_impl (noflash_text)
pbuf:pbuf_header (noflash_text)
pbuf:pbuf_free (noflash_text)
pbuf:pbuf_alloced_custom (noflash_text)
pbuf:pbuf_init_alloced_pbuf (noflash_text)
udp:udp_input_local_match (noflash_text)
udp:udp_input (noflash_text)
udp:udp_send (noflash_text)
Expand All @@ -79,6 +66,71 @@ entries:
sys_arch:sys_mbox_trypost (noflash_text)
sys_arch:sys_arch_mbox_fetch (noflash_text)
lwip_default_hooks:ip4_route_src_hook (noflash_text)
if COMPILER_OPTIMIZATION_DEBUG = y:
sockets:tryget_socket_unconn (noflash_text)
sockets:tryget_socket (noflash_text)
sockets:lwip_recvfrom_udp_raw (noflash_text)
sockets:tryget_socket_unconn_nouse (noflash_text)
sockets:sock_inc_used (noflash_text)
tcpip:tcpip_thread_handle_msg (noflash_text)
api_lib:netconn_apimsg (noflash_text)
sockets:lwip_recv_tcp_from (noflash_text)
sockets:select_check_waiters (noflash_text)
api_lib:netconn_tcp_recvd_msg (noflash_text)
pbuf:pbuf_header_impl (noflash_text)
pbuf:pbuf_add_header_impl (noflash_text)
pbuf:pbuf_init_alloced_pbuf (noflash_text)

if LWIP_EXTRA_IRAM_OPTIMIZATION = y:
api_msg:recv_udp (noflash_text)
inet_chksum:inet_chksum_pbuf (noflash_text)
inet_chksum:ip_chksum_pseudo (noflash_text)
inet_chksum:inet_chksum (noflash_text)
inet_chksum:lwip_standard_chksum (noflash_text)
pbuf:pbuf_copy (noflash_text)
pbuf:pbuf_copy_partial_pbuf (noflash_text)
pbuf:pbuf_clone (noflash_text)
tcp:tcp_fasttmr (noflash_text)
tcp:tcp_tmr (noflash_text)
tcp:tcp_update_rcv_ann_wnd (noflash_text)
tcp:tcp_recved (noflash_text)
tcp:tcp_slowtmr (noflash_text)
tcp:tcp_process_refused_data (noflash_text)
tcp:tcp_segs_free (noflash_text)
tcp:tcp_seg_free (noflash_text)
tcp:tcp_seg_copy (noflash_text)
tcp:tcp_recv_null (noflash_text)
tcp_in:tcp_input (noflash_text)
tcp_in:tcp_input_delayed_close (noflash_text)
tcp_in:tcp_oos_insert_segment (noflash_text)
tcp_in:tcp_receive (noflash_text)
tcp_in:tcp_parseopt (noflash_text)
tcp_out:tcp_route (noflash_text)
tcp_out:tcp_create_segment (noflash_text)
tcp_out:tcp_write (noflash_text)
tcp_out:tcp_split_unsent_seg (noflash_text)
tcp_out:tcp_rexmit_rto_prepare (noflash_text)
tcp_out:tcp_rexmit (noflash_text)
tcp_out:tcp_rexmit_fast (noflash_text)
tcp_out:tcp_output_control_segment (noflash_text)
tcp_out:tcp_rst (noflash_text)
tcp_out:tcp_send_empty_ack (noflash_text)
sys_arch:sys_arch_protect (noflash_text)
sys_arch:sys_arch_unprotect (noflash_text)
sys_arch:sys_thread_tcpip (noflash_text)
memp:memp_malloc (noflash_text)
mem:mem_malloc (noflash_text)
raw:raw_input (noflash_text)
if COMPILER_OPTIMIZATION_DEBUG = y:
tcp_in:tcp_free_acked_segments (noflash_text)
tcp_in:tcp_process (noflash_text)
tcp_out:tcp_output_segment (noflash_text)
tcp_out:tcp_output_fill_options (noflash_text)
tcp_out:tcp_output_alloc_header (noflash_text)
tcp_out:tcp_pbuf_prealloc (noflash_text)
tcp_out:tcp_write_checks (noflash_text)
raw:raw_input_local_match (noflash_text)
tcp_out:tcp_output_alloc_header_common (noflash_text)
memp:do_memp_malloc_pool (noflash_text)
if ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY = y:
* (extram_bss)
8 changes: 7 additions & 1 deletion components/lwip/port/include/lwipopts.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ extern "C" {
*/
#ifdef CONFIG_LWIP_TCPIP_CORE_LOCKING
#define LWIP_TCPIP_CORE_LOCKING 1
#ifdef CONFIG_LWIP_TCPIP_CORE_LOCKING_INPUT
#define LWIP_TCPIP_CORE_LOCKING_INPUT 1
#else
#define LWIP_TCPIP_CORE_LOCKING_INPUT 0
#endif
#define LOCK_TCPIP_CORE() do { sys_mutex_lock(&lock_tcpip_core); sys_thread_tcpip(LWIP_CORE_LOCK_MARK_HOLDER); } while(0)
#define UNLOCK_TCPIP_CORE() do { sys_thread_tcpip(LWIP_CORE_LOCK_UNMARK_HOLDER); sys_mutex_unlock(&lock_tcpip_core); } while(0)
#ifdef CONFIG_LWIP_CHECK_THREAD_SAFETY
Expand All @@ -51,6 +56,7 @@ extern "C" {

#else
#define LWIP_TCPIP_CORE_LOCKING 0
#define LWIP_TCPIP_CORE_LOCKING_INPUT 0
#ifdef CONFIG_LWIP_CHECK_THREAD_SAFETY
#define LWIP_ASSERT_CORE_LOCKED() do { LWIP_ASSERT("Required to run in TCPIP context!", sys_thread_tcpip(LWIP_CORE_LOCK_QUERY_HOLDER)); } while(0)
#endif /* CONFIG_LWIP_CHECK_THREAD_SAFETY */
Expand Down Expand Up @@ -787,7 +793,7 @@ static inline uint32_t timeout_from_offered(uint32_t lease, uint32_t min)
* The priority value itself is platform-dependent, but is passed to
* sys_thread_new() when the thread is created.
*/
#define TCPIP_THREAD_PRIO ESP_TASK_TCPIP_PRIO
#define TCPIP_THREAD_PRIO CONFIG_LWIP_TCPIP_TASK_PRIO

/**
* TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages
Expand Down
4 changes: 2 additions & 2 deletions docs/en/api-guides/lwip.rst
Original file line number Diff line number Diff line change
Expand Up @@ -428,11 +428,11 @@ The :example_file:`wifi/iperf/sdkconfig.defaults` file for the iperf example con

.. important:: Suggest applying changes a few at a time and checking the performance each time with a particular application workload.

- If a lot of tasks are competing for CPU time on the system, consider that the lwIP task has configurable CPU affinity (:ref:`CONFIG_LWIP_TCPIP_TASK_AFFINITY`) and runs at fixed priority ``ESP_TASK_TCPIP_PRIO`` (18). Configure competing tasks to be pinned to a different core, or to run at a lower priority. See also :ref:`built-in-task-priorities`.
- If a lot of tasks are competing for CPU time on the system, consider that the lwIP task has configurable CPU affinity (:ref:`CONFIG_LWIP_TCPIP_TASK_AFFINITY`) and runs at fixed priority (18). Configure competing tasks to be pinned to a different core, or to run at a lower priority. See also :ref:`built-in-task-priorities`.

- If using ``select()`` function with socket arguments only, disabling :ref:`CONFIG_VFS_SUPPORT_SELECT` will make ``select()`` calls faster.

- If there is enough free IRAM, select :ref:`CONFIG_LWIP_IRAM_OPTIMIZATION` to improve TX/RX throughput
- If there is enough free IRAM, select :ref:`CONFIG_LWIP_IRAM_OPTIMIZATION` and :ref:`CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION` to improve TX/RX throughput

.. only:: SOC_WIFI_SUPPORTED

Expand Down
4 changes: 2 additions & 2 deletions docs/en/api-guides/performance/speed.rst
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ Common priorities are:
- :doc:`/api-reference/system/esp_timer` system task to manage timer events and execute callbacks has high priority (22, ``ESP_TASK_TIMER_PRIO``)
- FreeRTOS Timer Task to handle FreeRTOS timer callbacks is created when the scheduler initializes and has minimum task priority (1, :ref:`configurable <CONFIG_FREERTOS_TIMER_TASK_PRIORITY>`).
- :doc:`/api-reference/system/esp_event` system task to manage the default system event loop and execute callbacks has high priority (20, ``ESP_TASK_EVENT_PRIO``). This configuration is only used if the application calls :cpp:func:`esp_event_loop_create_default`. It is possible to call :cpp:func:`esp_event_loop_create` with a custom task configuration instead.
- :doc:`/api-guides/lwip` TCP/IP task has high priority (18, ``ESP_TASK_TCPIP_PRIO``).
- :doc:`/api-guides/lwip` TCP/IP task has high priority (18).
:SOC_WIFI_SUPPORTED: - :doc:`/api-guides/wifi` task has high priority (23).
:SOC_WIFI_SUPPORTED: - Wi-Fi wpa_supplicant component may create dedicated tasks while the Wi-Fi Protected Setup (WPS), WPA2 EAP-TLS, Device Provisioning Protocol (DPP) or BSS Transition Management (BTM) features are in use. These tasks all have low priority (2).
:SOC_BT_SUPPORTED: - :doc:`/api-reference/bluetooth/controller_vhci` task has high priority (23, ``ESP_TASK_BT_CONTROLLER_PRIO``). The Bluetooth Controller needs to respond to requests with low latency, so it should always be among the highest priority task in the system.
Expand All @@ -183,7 +183,7 @@ Common priorities are:
- :doc:`/api-reference/system/esp_timer` system task to manage high precision timer events and execute callbacks has high priority (22, ``ESP_TASK_TIMER_PRIO``). This task is pinned to Core 0.
- FreeRTOS Timer Task to handle FreeRTOS timer callbacks is created when the scheduler initializes and has minimum task priority (1, :ref:`configurable <CONFIG_FREERTOS_TIMER_TASK_PRIORITY>`). This task is pinned to Core 0.
- :doc:`/api-reference/system/esp_event` system task to manage the default system event loop and execute callbacks has high priority (20, ``ESP_TASK_EVENT_PRIO``) and it is pinned to Core 0. This configuration is only used if the application calls :cpp:func:`esp_event_loop_create_default`, it is possible to call :cpp:func:`esp_event_loop_create` with a custom task configuration instead.
- :doc:`/api-guides/lwip` TCP/IP task has high priority (18, ``ESP_TASK_TCPIP_PRIO``) and is not pinned to any core (:ref:`configurable<CONFIG_LWIP_TCPIP_TASK_AFFINITY>`).
- :doc:`/api-guides/lwip` TCP/IP task has high priority (18) and is not pinned to any core (:ref:`configurable<CONFIG_LWIP_TCPIP_TASK_AFFINITY>`).
:SOC_WIFI_SUPPORTED: - :doc:`/api-guides/wifi` task has high priority (23) and is pinned to Core 0 by default (:ref:`configurable<CONFIG_ESP_WIFI_TASK_CORE_ID>`).
:SOC_WIFI_SUPPORTED: - Wi-Fi wpa_supplicant component may create dedicated tasks while the Wi-Fi Protected Setup (WPS), WPA2 EAP-TLS, Device Provisioning Protocol (DPP) or BSS Transition Management (BTM) features are in use. These tasks all have low priority (2) and are not pinned to any core.
:SOC_BT_SUPPORTED: - :doc:`/api-reference/bluetooth/controller_vhci` task has high priority (23, ``ESP_TASK_BT_CONTROLLER_PRIO``) and is pinned to Core 0 by default (:ref:`configurable <{IDF_TARGET_CONTROLLER_CORE_CONFIG}>`). The Bluetooth Controller needs to respond to requests with low latency, so it should always be among the highest priority task assigned to a single CPU.
Expand Down
4 changes: 2 additions & 2 deletions docs/zh_CN/api-guides/performance/speed.rst
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ ESP-IDF 启动的系统任务预设了固定优先级。启动时,一些任务
- 系统任务 :doc:`/api-reference/system/esp_timer` 用于管理定时器事件并执行回调函数,优先级较高 (22, ``ESP_TASK_TIMER_PRIO``)。
- FreeRTOS 初始化调度器时会创建定时器任务,用于处理 FreeRTOS 定时器的回调函数,优先级最低(1, :ref:`可配置 <CONFIG_FREERTOS_TIMER_TASK_PRIORITY>` )。
- 系统任务 :doc:`/api-reference/system/esp_event` 用于管理默认的系统事件循环并执行回调函数,优先级较高 (20, ``ESP_TASK_EVENT_PRIO``)。仅在应用程序调用 :cpp:func:`esp_event_loop_create_default` 时使用此配置。可以调用 :cpp:func:`esp_event_loop_create` 添加自定义任务配置。
- :doc:`/api-guides/lwip` TCP/IP 任务优先级较高 (18, ``ESP_TASK_TCPIP_PRIO``)。
- :doc:`/api-guides/lwip` TCP/IP 任务优先级较高 (18)。
:SOC_WIFI_SUPPORTED: - :doc:`/api-guides/wifi` 任务优先级较高 (23).
:SOC_WIFI_SUPPORTED: - 使用 Wi-Fi Protected Setup (WPS)、WPA2 EAP-TLS、Device Provisioning Protocol (DPP) 或 BSS Transition Management (BTM) 等功能时,Wi-Fi wpa_supplicant 组件可能会创建优先级较低的专用任务 (2)。
:SOC_BT_SUPPORTED: - :doc:`/api-reference/bluetooth/controller_vhci` 任务优先级较高 (23, ``ESP_TASK_BT_CONTROLLER_PRIO``)。蓝牙控制器需要以低延迟响应请求,因此其任务应始终为系统最高优先级的任务之一。
Expand All @@ -182,7 +182,7 @@ ESP-IDF 启动的系统任务预设了固定优先级。启动时,一些任务
- 系统任务 :doc:`/api-reference/system/esp_timer` 用于管理定时器事件并执行回调函数,优先级较高 (22, ``ESP_TASK_TIMER_PRIO``) 且固定在核心 0 上执行。
- FreeRTOS 初始化调度器时会创建定时器任务,用于处理 FreeRTOS 定时器的回调函数,优先级最低(1, :ref:`可配置 <CONFIG_FREERTOS_TIMER_TASK_PRIORITY>` )且固定在核心 0 上执行。
- 系统任务 :doc:`/api-reference/system/esp_event` 用于管理默认的系统事件循环并执行回调函数,优先级较高 (20, ``ESP_TASK_EVENT_PRIO``) 且固定在核心 0 上执行。此配置仅在应用程序调用 :cpp:func:`esp_event_loop_create_default` 时使用。可以调用 :cpp:func:`esp_event_loop_create` 添加自定义任务配置。
- :doc:`/api-guides/lwip` TCP/IP 任务优先级较高 (18, ``ESP_TASK_TCPIP_PRIO``) 且并未固定在特定核心上执行( :ref:`可配置 <CONFIG_LWIP_TCPIP_TASK_AFFINITY>` )。
- :doc:`/api-guides/lwip` TCP/IP 任务优先级较高 (18) 且并未固定在特定核心上执行( :ref:`可配置 <CONFIG_LWIP_TCPIP_TASK_AFFINITY>` )。
:SOC_WIFI_SUPPORTED: - :doc:`/api-guides/wifi` 任务优先级较高 (23) 且默认固定在核心 0 上执行( :ref:`可配置 <CONFIG_ESP_WIFI_TASK_CORE_ID>` )。
:SOC_WIFI_SUPPORTED: - 使用 Wi-Fi Protected Setup (WPS)、WPA2 EAP-TLS、Device Provisioning Protocol (DPP) 或 BSS Transition Management (BTM) 等功能时,Wi-Fi wpa_supplicant 组件可能会创建优先级较低的专用任务 (2),这些任务并未固定在特定核心上执行。
:SOC_BT_SUPPORTED: - :doc:`/api-reference/bluetooth/controller_vhci` 任务优先级较高 (23, ``ESP_TASK_BT_CONTROLLER_PRIO``) 且默认固定在核心 0 上执行( :ref:`可配置 <{IDF_TARGET_CONTROLLER_CORE_CONFIG}>` )。蓝牙控制器需要以低延迟响应请求,因此其任务应始终为最高优先级的任务之一并分配给单个 CPU 执行。
Expand Down
Loading

0 comments on commit 8847eee

Please sign in to comment.