gdbstub: added task state information on qThreadExtraInfo command

This commit is contained in:
Felipe Neves 2020-04-15 13:57:01 -03:00 committed by bot
parent 140c5e0677
commit 9a54a0af13

View file

@ -177,6 +177,15 @@ static bool get_task_handle(size_t index, TaskHandle_t *handle)
return true;
}
static eTaskState get_task_state(size_t index)
{
if (index >= s_scratch.task_count) {
return eInvalid;
}
return s_scratch.tasks[index].eState;
}
/** Get the index of the task running on the current CPU, and save the result */
static void find_paniced_task_index(void)
{
@ -280,6 +289,13 @@ static void handle_qsThreadInfo_command(const unsigned char* cmd, int len)
/** qThreadExtraInfo requests the thread name */
static void handle_qThreadExtraInfo_command(const unsigned char* cmd, int len)
{
uint8_t task_state_string_index = 0;
const char task_state_string[][] = "Running",
"Ready",
"Blocked",
"Suspended",
"Invalid";
cmd += sizeof("qThreadExtraInfo,") - 1;
int task_index = esp_gdbstub_gethex(&cmd, -1);
TaskHandle_t handle;
@ -293,7 +309,34 @@ static void handle_qThreadExtraInfo_command(const unsigned char* cmd, int len)
esp_gdbstub_send_hex(*task_name, 8);
task_name++;
}
/** TODO: add "Running" or "Suspended" and "CPU0" or "CPU1" */
esp_gdbstub_send_hex(' ', 8);
eTaskState state = get_task_state(task_index);
switch (state) {
case eRunning:
task_state_string_index = 0;
break;
case eReady:
task_state_string_index = 1;
break;
case eBlocked:
task_state_string_index = 2;
break;
case eSuspended:
task_state_string_index = 3;
break;
default:
task_state_string_index = 4;
break;
}
const char* buffer = &task_state_string[task_state_string_index][0];
while (*buffer) {
esp_gdbstub_send_hex(*buffer, 8);
buffer++;
}
esp_gdbstub_send_end();
}