kopia lustrzana https://github.com/espressif/esp-idf
feat(console): added config option for console task affinity
rodzic
25fcb2de2d
commit
0e2bd068be
|
@ -13,6 +13,7 @@ extern "C" {
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
#include "esp_heap_caps.h"
|
#include "esp_heap_caps.h"
|
||||||
#include "esp_err.h"
|
#include "esp_err.h"
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
|
||||||
// Forward declaration. Definition in linenoise/linenoise.h.
|
// Forward declaration. Definition in linenoise/linenoise.h.
|
||||||
typedef struct linenoiseCompletions linenoiseCompletions;
|
typedef struct linenoiseCompletions linenoiseCompletions;
|
||||||
|
@ -50,6 +51,7 @@ typedef struct {
|
||||||
const char *history_save_path; //!< file path used to save history commands, set to NULL won't save to file system
|
const char *history_save_path; //!< file path used to save history commands, set to NULL won't save to file system
|
||||||
uint32_t task_stack_size; //!< repl task stack size
|
uint32_t task_stack_size; //!< repl task stack size
|
||||||
uint32_t task_priority; //!< repl task priority
|
uint32_t task_priority; //!< repl task priority
|
||||||
|
BaseType_t task_core_id; //!< repl task affinity, i.e. which core the task is pinned to
|
||||||
const char *prompt; //!< prompt (NULL represents default: "esp> ")
|
const char *prompt; //!< prompt (NULL represents default: "esp> ")
|
||||||
size_t max_cmdline_length; //!< maximum length of a command line. If 0, default value will be used
|
size_t max_cmdline_length; //!< maximum length of a command line. If 0, default value will be used
|
||||||
} esp_console_repl_config_t;
|
} esp_console_repl_config_t;
|
||||||
|
@ -64,6 +66,7 @@ typedef struct {
|
||||||
.history_save_path = NULL, \
|
.history_save_path = NULL, \
|
||||||
.task_stack_size = 4096, \
|
.task_stack_size = 4096, \
|
||||||
.task_priority = 2, \
|
.task_priority = 2, \
|
||||||
|
.task_core_id = tskNO_AFFINITY, \
|
||||||
.prompt = NULL, \
|
.prompt = NULL, \
|
||||||
.max_cmdline_length = 0, \
|
.max_cmdline_length = 0, \
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2016-2021 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2016-2023 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
@ -106,8 +106,8 @@ esp_err_t esp_console_new_repl_usb_cdc(const esp_console_dev_usb_cdc_config_t *d
|
||||||
cdc_repl->repl_com.repl_core.del = esp_console_repl_usb_cdc_delete;
|
cdc_repl->repl_com.repl_core.del = esp_console_repl_usb_cdc_delete;
|
||||||
|
|
||||||
/* spawn a single thread to run REPL */
|
/* spawn a single thread to run REPL */
|
||||||
if (xTaskCreate(esp_console_repl_task, "console_repl", repl_config->task_stack_size,
|
if (xTaskCreatePinnedToCore(esp_console_repl_task, "console_repl", repl_config->task_stack_size,
|
||||||
cdc_repl, repl_config->task_priority, &cdc_repl->repl_com.task_hdl) != pdTRUE) {
|
cdc_repl, repl_config->task_priority, &cdc_repl->repl_com.task_hdl, repl_config->task_core_id) != pdTRUE) {
|
||||||
ret = ESP_FAIL;
|
ret = ESP_FAIL;
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
|
@ -183,8 +183,8 @@ esp_err_t esp_console_new_repl_usb_serial_jtag(const esp_console_dev_usb_serial_
|
||||||
usb_serial_jtag_repl->repl_com.repl_core.del = esp_console_repl_usb_serial_jtag_delete;
|
usb_serial_jtag_repl->repl_com.repl_core.del = esp_console_repl_usb_serial_jtag_delete;
|
||||||
|
|
||||||
/* spawn a single thread to run REPL */
|
/* spawn a single thread to run REPL */
|
||||||
if (xTaskCreate(esp_console_repl_task, "console_repl", repl_config->task_stack_size,
|
if (xTaskCreatePinnedToCore(esp_console_repl_task, "console_repl", repl_config->task_stack_size,
|
||||||
usb_serial_jtag_repl, repl_config->task_priority, &usb_serial_jtag_repl->repl_com.task_hdl) != pdTRUE) {
|
usb_serial_jtag_repl, repl_config->task_priority, &usb_serial_jtag_repl->repl_com.task_hdl, repl_config->task_core_id) != pdTRUE) {
|
||||||
ret = ESP_FAIL;
|
ret = ESP_FAIL;
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
|
@ -285,8 +285,8 @@ esp_err_t esp_console_new_repl_uart(const esp_console_dev_uart_config_t *dev_con
|
||||||
|
|
||||||
/* Spawn a single thread to run REPL, we need to pass `uart_repl` to it as
|
/* Spawn a single thread to run REPL, we need to pass `uart_repl` to it as
|
||||||
* it also requires the uart channel. */
|
* it also requires the uart channel. */
|
||||||
if (xTaskCreate(esp_console_repl_task, "console_repl", repl_config->task_stack_size,
|
if (xTaskCreatePinnedToCore(esp_console_repl_task, "console_repl", repl_config->task_stack_size,
|
||||||
uart_repl, repl_config->task_priority, &uart_repl->repl_com.task_hdl) != pdTRUE) {
|
uart_repl, repl_config->task_priority, &uart_repl->repl_com.task_hdl, repl_config->task_core_id) != pdTRUE) {
|
||||||
ret = ESP_FAIL;
|
ret = ESP_FAIL;
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,10 @@ static void start_console(void)
|
||||||
{
|
{
|
||||||
esp_console_repl_t *repl = NULL;
|
esp_console_repl_t *repl = NULL;
|
||||||
esp_console_repl_config_t repl_config = ESP_CONSOLE_REPL_CONFIG_DEFAULT();
|
esp_console_repl_config_t repl_config = ESP_CONSOLE_REPL_CONFIG_DEFAULT();
|
||||||
|
|
||||||
|
/* Pin repl task to ensure all interrupts are allocated on the same core */
|
||||||
|
repl_config.task_core_id = 0;
|
||||||
|
|
||||||
/* Prompt to be printed before each line.
|
/* Prompt to be printed before each line.
|
||||||
* This can be customized, made dynamic, etc.
|
* This can be customized, made dynamic, etc.
|
||||||
*/
|
*/
|
||||||
|
|
Ładowanie…
Reference in New Issue