From a5f9563ef72a7dbedafd34896bf1f4abc8fcc2c6 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 31 Jan 2018 13:58:39 +0800 Subject: [PATCH 1/4] esp32: increase default event task stack size by 256 bytes At debug log level, default event task stack size was not sufficient, the stack was overflown by 232 bytes when WiFi connection happened. --- components/esp32/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp32/Kconfig b/components/esp32/Kconfig index 57b0599d9d..4eb961c07d 100644 --- a/components/esp32/Kconfig +++ b/components/esp32/Kconfig @@ -281,7 +281,7 @@ config SYSTEM_EVENT_QUEUE_SIZE config SYSTEM_EVENT_TASK_STACK_SIZE int "Event loop task stack size" - default 2048 + default 2304 help Config system event task stack size in different application. From b3be1b5190ac97ae377e33adac77964eb4c6dc73 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 31 Jan 2018 14:01:07 +0800 Subject: [PATCH 2/4] tcpip_adapter: make log output at debug level less noisy At debug log level, tcpip_adapter would print logs for each function call scheduled onto the tcpip task. These logs contained pointers which idf_monitor decoded, adding even more noise and useless vertical space in logs. This change moves these log statements to verbose level. --- components/tcpip_adapter/include/tcpip_adapter.h | 4 ++-- components/tcpip_adapter/tcpip_adapter_lwip.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/components/tcpip_adapter/include/tcpip_adapter.h b/components/tcpip_adapter/include/tcpip_adapter.h index ab095c87ae..4777f16057 100644 --- a/components/tcpip_adapter/include/tcpip_adapter.h +++ b/components/tcpip_adapter/include/tcpip_adapter.h @@ -184,10 +184,10 @@ typedef struct tcpip_adapter_dns_param_s { msg.data = (void*)(_data);\ msg.api_fn = (_fn);\ if (TCPIP_ADAPTER_IPC_REMOTE == tcpip_adapter_ipc_check(&msg)) {\ - ESP_LOGD(TAG, "check: remote, if=%d fn=%p\n", (_if), (_fn));\ + ESP_LOGV(TAG, "check: remote, if=%d fn=%p\n", (_if), (_fn));\ return msg.ret;\ } else {\ - ESP_LOGD(TAG, "check: local, if=%d fn=%p\n", (_if), (_fn));\ + ESP_LOGV(TAG, "check: local, if=%d fn=%p\n", (_if), (_fn));\ }\ }while(0) diff --git a/components/tcpip_adapter/tcpip_adapter_lwip.c b/components/tcpip_adapter/tcpip_adapter_lwip.c index ca57338526..313e9b1d58 100644 --- a/components/tcpip_adapter/tcpip_adapter_lwip.c +++ b/components/tcpip_adapter/tcpip_adapter_lwip.c @@ -67,7 +67,7 @@ static sys_sem_t api_sync_sem = NULL; static bool tcpip_inited = false; static sys_sem_t api_lock_sem = NULL; extern sys_thread_t g_lwip_task; -#define TAG "tcpip_adapter" +static const char* TAG = "tcpip_adapter"; static void tcpip_adapter_api_cb(void* api_msg) { @@ -79,7 +79,7 @@ static void tcpip_adapter_api_cb(void* api_msg) } msg->ret = msg->api_fn(msg); - ESP_LOGD(TAG, "call api in lwip: ret=0x%x, give sem", msg->ret); + ESP_LOGV(TAG, "call api in lwip: ret=0x%x, give sem", msg->ret); sys_sem_signal(&api_sync_sem); return; From 57a516389cbb4d90d2cf26ddf891f9e111a03f09 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 31 Jan 2018 14:04:40 +0800 Subject: [PATCH 3/4] console example: add 'tasks' command to print vTaskList output This command prints list of tasks, their state, and stack watermark values. Fixes https://github.com/espressif/esp-idf/issues/1534 --- examples/system/console/main/cmd_system.c | 41 ++++++++++++++++++++++ examples/system/console/sdkconfig.defaults | 4 +++ 2 files changed, 45 insertions(+) diff --git a/examples/system/console/main/cmd_system.c b/examples/system/console/main/cmd_system.c index 04003e8d5e..e7192b9fec 100644 --- a/examples/system/console/main/cmd_system.c +++ b/examples/system/console/main/cmd_system.c @@ -20,11 +20,19 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "soc/rtc_cntl_reg.h" +#include "sdkconfig.h" + +#ifdef CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS +#define WITH_TASKS_INFO 1 +#endif static void register_free(); static void register_restart(); static void register_deep_sleep(); static void register_make(); +#if WITH_TASKS_INFO +static void register_tasks(); +#endif void register_system() { @@ -32,6 +40,9 @@ void register_system() register_restart(); register_deep_sleep(); register_make(); +#if WITH_TASKS_INFO + register_tasks(); +#endif } /** 'restart' command restarts the program */ @@ -72,6 +83,36 @@ static void register_free() ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) ); } +/** 'tasks' command prints the list of tasks and related information */ +#if WITH_TASKS_INFO + +static int tasks_info(int argc, char** argv) +{ + const size_t bytes_per_task = 40; /* see vTaskList description */ + char* task_list_buffer = malloc(uxTaskGetNumberOfTasks() * bytes_per_task); + if (task_list_buffer == NULL) { + ESP_LOGE(__func__, "failed to allocate buffer for vTaskList output"); + return 1; + } + vTaskList(task_list_buffer); + fputs(task_list_buffer, stdout); + free(task_list_buffer); + return 0; +} + +static void register_tasks() +{ + const esp_console_cmd_t cmd = { + .command = "tasks", + .help = "Get information about running tasks", + .hint = NULL, + .func = &tasks_info, + }; + ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) ); +} + +#endif // WITH_TASKS_INFO + /** 'deep_sleep' command puts the chip into deep sleep mode */ static struct { diff --git a/examples/system/console/sdkconfig.defaults b/examples/system/console/sdkconfig.defaults index 96cda3dea4..4bb6acaaae 100644 --- a/examples/system/console/sdkconfig.defaults +++ b/examples/system/console/sdkconfig.defaults @@ -11,3 +11,7 @@ CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_example.csv" CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 CONFIG_PARTITION_TABLE_FILENAME="partitions_example.csv" CONFIG_APP_OFFSET=0x10000 + +# Enable FreeRTOS stats formatting functions, needed for 'tasks' command +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y From 206eadab5a5d451f18a9bcf0ace1bf173be64957 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Sun, 11 Feb 2018 13:14:44 +0800 Subject: [PATCH 4/4] console example: increase main task stack size Stack size was not sufficient for logging at Verbose log level. --- examples/system/console/sdkconfig.defaults | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/system/console/sdkconfig.defaults b/examples/system/console/sdkconfig.defaults index 4bb6acaaae..cb3bc34517 100644 --- a/examples/system/console/sdkconfig.defaults +++ b/examples/system/console/sdkconfig.defaults @@ -3,7 +3,7 @@ CONFIG_LOG_BOOTLOADER_LEVEL_WARN=y CONFIG_LOG_BOOTLOADER_LEVEL=2 # Increase main task stack size -CONFIG_MAIN_TASK_STACK_SIZE=6144 +CONFIG_MAIN_TASK_STACK_SIZE=7168 # Enable filesystem CONFIG_PARTITION_TABLE_CUSTOM=y