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
This commit is contained in:
Ivan Grokhotkov 2018-08-01 12:33:43 +03:00
parent 5bcb7e26d7
commit 5d1ccb9501
2 changed files with 31 additions and 5 deletions

View File

@ -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.
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
bool "Enable PPP support (new/experimental)"
default n

View File

@ -426,16 +426,17 @@ sys_mbox_free(sys_mbox_t *mbox)
sys_thread_t
sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio)
{
xTaskHandle CreatedTask;
xTaskHandle created_task;
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) {
return CreatedTask;
} else {
if (result != pdPASS) {
return NULL;
}
return created_task;
}
/*-----------------------------------------------------------------------------------*/