FreeRTOS: Make optional symbols optional
authorAndreas Fritiofson <andreas.fritiofson@gmail.com>
Thu, 16 Apr 2015 08:56:47 +0000 (10:56 +0200)
committerPaul Fertser <fercerpav@gmail.com>
Thu, 16 Apr 2015 19:20:28 +0000 (20:20 +0100)
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 <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/2425
Tested-by: jenkins
Reviewed-by: Paul Fertser <fercerpav@gmail.com>
src/rtos/FreeRTOS.c

index 667875c370c931329eef3c5b08dfbbdc4c0c60f6..e13cc4617bdca5688ed6f41f9b3571a18f6afc0c 100644 (file)
@@ -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;
 }