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", true }, /* Unavailable since v7.5.3 */
+ { NULL, false }
};
/* TODO: */
}
/* Find out how many lists are needed to be read from pxReadyTasksLists, */
+ if (rtos->symbols[FreeRTOS_VAL_uxTopUsedPriority].address == 0) {
+ LOG_ERROR("FreeRTOS: uxTopUsedPriority is not defined, consult the OpenOCD manual for a work-around");
+ return ERROR_FAIL;
+ }
int64_t max_used_priority = 0;
retval = target_read_buffer(rtos->target,
rtos->symbols[FreeRTOS_VAL_uxTopUsedPriority].address,
*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;
}