From 6b2887e16acefada94a496ef786882d04b9b89a2 Mon Sep 17 00:00:00 2001 From: Andreas Fritiofson Date: Thu, 16 Apr 2015 10:56:47 +0200 Subject: [PATCH] FreeRTOS: Make optional symbols optional xSuspendedTaskList and xTasksWaitingTermination are only available for some configurations. Missing optional symbols will have their addresses remaining at zero so the corresponding lists will be skipped when building the task list. Change-Id: If330f5038d009298c3a14a4d2756db7105a30bc8 Signed-off-by: Andreas Fritiofson Reviewed-on: http://openocd.zylin.com/2425 Tested-by: jenkins Reviewed-by: Paul Fertser --- src/rtos/FreeRTOS.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/rtos/FreeRTOS.c b/src/rtos/FreeRTOS.c index 667875c37..e13cc4617 100644 --- a/src/rtos/FreeRTOS.c +++ b/src/rtos/FreeRTOS.c @@ -119,19 +119,24 @@ enum FreeRTOS_symbol_values { FreeRTOS_VAL_uxTopUsedPriority = 10, }; -static const char * const FreeRTOS_symbol_list[] = { - "pxCurrentTCB", - "pxReadyTasksLists", - "xDelayedTaskList1", - "xDelayedTaskList2", - "pxDelayedTaskList", - "pxOverflowDelayedTaskList", - "xPendingReadyList", - "xTasksWaitingTermination", - "xSuspendedTaskList", - "uxCurrentNumberOfTasks", - "uxTopUsedPriority", - NULL +struct symbols { + const char *name; + bool optional; +}; + +static const struct symbols FreeRTOS_symbol_list[] = { + { "pxCurrentTCB", false }, + { "pxReadyTasksLists", false }, + { "xDelayedTaskList1", false }, + { "xDelayedTaskList2", false }, + { "pxDelayedTaskList", false }, + { "pxOverflowDelayedTaskList", false }, + { "xPendingReadyList", false }, + { "xTasksWaitingTermination", true }, /* Only if INCLUDE_vTaskDelete */ + { "xSuspendedTaskList", true }, /* Only if INCLUDE_vTaskSuspend */ + { "uxCurrentNumberOfTasks", false }, + { "uxTopUsedPriority", false }, + { NULL, false } }; /* TODO: */ @@ -418,8 +423,10 @@ static int FreeRTOS_get_symbol_list_to_lookup(symbol_table_elem_t *symbol_list[] *symbol_list = calloc( ARRAY_SIZE(FreeRTOS_symbol_list), sizeof(symbol_table_elem_t)); - for (i = 0; i < ARRAY_SIZE(FreeRTOS_symbol_list); i++) - (*symbol_list)[i].symbol_name = FreeRTOS_symbol_list[i]; + for (i = 0; i < ARRAY_SIZE(FreeRTOS_symbol_list); i++) { + (*symbol_list)[i].symbol_name = FreeRTOS_symbol_list[i].name; + (*symbol_list)[i].optional = FreeRTOS_symbol_list[i].optional; + } return 0; }