Fix FreeRTOS thread list parsing
This commit is contained in:
parent
dd318f8243
commit
85219514cf
|
@ -102,6 +102,7 @@ enum FreeRTOS_symbol_values
|
||||||
FreeRTOS_VAL_xTasksWaitingTermination = 7,
|
FreeRTOS_VAL_xTasksWaitingTermination = 7,
|
||||||
FreeRTOS_VAL_xSuspendedTaskList = 8,
|
FreeRTOS_VAL_xSuspendedTaskList = 8,
|
||||||
FreeRTOS_VAL_uxCurrentNumberOfTasks = 9,
|
FreeRTOS_VAL_uxCurrentNumberOfTasks = 9,
|
||||||
|
FreeRTOS_VAL_uxTopUsedPriority = 10,
|
||||||
};
|
};
|
||||||
|
|
||||||
static char* FreeRTOS_symbol_list[] =
|
static char* FreeRTOS_symbol_list[] =
|
||||||
|
@ -116,6 +117,7 @@ static char* FreeRTOS_symbol_list[] =
|
||||||
"xTasksWaitingTermination",
|
"xTasksWaitingTermination",
|
||||||
"xSuspendedTaskList",
|
"xSuspendedTaskList",
|
||||||
"uxCurrentNumberOfTasks",
|
"uxCurrentNumberOfTasks",
|
||||||
|
"uxTopUsedPriority",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -226,15 +228,15 @@ static int FreeRTOS_update_threads( struct rtos *rtos )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Unfortunately, we can't know how many lists there are for pxReadyTasksLists,
|
// Find out how many lists are needed to be read from pxReadyTasksLists,
|
||||||
// So figure it out via other variables
|
int64_t max_used_priority = 0;
|
||||||
int num_ready_task_lists = (rtos->symbols[FreeRTOS_VAL_xDelayedTaskList1].address - rtos->symbols[FreeRTOS_VAL_pxReadyTasksLists].address) / param->list_width;
|
retval = target_read_buffer( rtos->target, rtos->symbols[FreeRTOS_VAL_uxTopUsedPriority].address, param->pointer_width, (uint8_t *)&max_used_priority );
|
||||||
|
|
||||||
|
|
||||||
symbol_address_t* list_of_lists = (symbol_address_t *)malloc( sizeof( symbol_address_t ) * ( num_ready_task_lists + 5 ) );
|
symbol_address_t* list_of_lists = (symbol_address_t *)malloc( sizeof( symbol_address_t ) * ( max_used_priority + 5 ) );
|
||||||
|
|
||||||
int num_lists;
|
int num_lists;
|
||||||
for( num_lists = 0; num_lists < num_ready_task_lists; num_lists++ )
|
for( num_lists = 0; num_lists < max_used_priority; num_lists++ )
|
||||||
{
|
{
|
||||||
list_of_lists[num_lists] = rtos->symbols[FreeRTOS_VAL_pxReadyTasksLists].address + num_lists * param->list_width;
|
list_of_lists[num_lists] = rtos->symbols[FreeRTOS_VAL_pxReadyTasksLists].address + num_lists * param->list_width;
|
||||||
}
|
}
|
||||||
|
@ -479,3 +481,4 @@ static int FreeRTOS_create( struct target* target )
|
||||||
target->rtos->rtos_specific_params = (void*) &FreeRTOS_params_list[i];
|
target->rtos->rtos_specific_params = (void*) &FreeRTOS_params_list[i];
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue