From 57a516389cbb4d90d2cf26ddf891f9e111a03f09 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 31 Jan 2018 14:04:40 +0800 Subject: [PATCH] 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