lwip: allow setting LwIP tasks affinity via sdkconfig

In some cases applications need to ensure that WiFi/BT related tasks
run on CPU1. This option can be used to set task affinity in such case.

https://github.com/espressif/esp-idf/issues/2233#issuecomment-409220381
pull/2479/head
Ivan Grokhotkov 2018-08-01 12:33:43 +03:00
rodzic 5bcb7e26d7
commit 5d1ccb9501
2 zmienionych plików z 31 dodań i 5 usunięć

Wyświetl plik

@ -443,6 +443,31 @@ config TCPIP_TASK_STACK_SIZE
Configure TCP/IP task stack size, used by LWIP to process multi-threaded TCP/IP operations. Configure TCP/IP task stack size, used by LWIP to process multi-threaded TCP/IP operations.
Setting this stack too small will result in stack overflow crashes. Setting this stack too small will result in stack overflow crashes.
choice TCPIP_TASK_AFFINITY
prompt "TCP/IP task affinity"
default TCPIP_TASK_AFFINITY_NO_AFFINITY
help
Allows setting LwIP tasks affinity, i.e. whether the task is pinned to
CPU0, pinned to CPU1, or allowed to run on any CPU.
Currently this applies to "TCP/IP" task and "Ping" task.
config TCPIP_TASK_AFFINITY_NO_AFFINITY
bool "No affinity"
config TCPIP_TASK_AFFINITY_CPU0
bool "CPU0"
config TCPIP_TASK_AFFINITY_CPU1
bool "CPU1"
depends on !FREERTOS_UNICORE
endchoice
config TCPIP_TASK_AFFINITY
hex
default FREERTOS_NO_AFFINITY if TCPIP_TASK_AFFINITY_NO_AFFINITY
default 0x0 if TCPIP_TASK_AFFINITY_CPU0
default 0x1 if TCPIP_TASK_AFFINITY_CPU1
menuconfig PPP_SUPPORT menuconfig PPP_SUPPORT
bool "Enable PPP support (new/experimental)" bool "Enable PPP support (new/experimental)"
default n default n

Wyświetl plik

@ -426,16 +426,17 @@ sys_mbox_free(sys_mbox_t *mbox)
sys_thread_t sys_thread_t
sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio) sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio)
{ {
xTaskHandle CreatedTask; xTaskHandle created_task;
portBASE_TYPE result; portBASE_TYPE result;
result = xTaskCreate(thread, name, stacksize, arg, prio, &CreatedTask); result = xTaskCreatePinnedToCore(thread, name, stacksize, arg, prio, &created_task,
CONFIG_TCPIP_TASK_AFFINITY);
if (result == pdPASS) { if (result != pdPASS) {
return CreatedTask;
} else {
return NULL; return NULL;
} }
return created_task;
} }
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/