rtos: add instructions and helper code to make FreeRTOS work again

Run-time tested with FreeRTOS V8.1.2 (current version).

For the time being I propose this way of dealing with RTOSes that do
not export necessary information on their own.

I also suggest implementing a similar scheme for ChibiOS, exporting
the necessary struct fields' offsets via an OpenOCD-specific helper.

Change-Id: Iacf8b88004d62206215fe80011fd7592438446a3
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/2347
Tested-by: jenkins
__archive__
Andreas Fritiofson 2015-04-16 13:08:14 +02:00 committed by Paul Fertser
parent 6b2887e16a
commit 9dfb58e802
3 changed files with 35 additions and 4 deletions

View File

@ -0,0 +1,20 @@
/*
* Since at least FreeRTOS V7.5.3 uxTopUsedPriority is no longer
* present in the kernel, so it has to be supplied by other means for
* OpenOCD's threads awareness.
*
* Add this file to your project, and, if you're using --gc-sections,
* ``--undefined=uxTopUsedPriority'' (or
* ``-Wl,--undefined=uxTopUsedPriority'' when using gcc for final
* linking) to your LDFLAGS; same with all the other symbols you need.
*/
#include "FreeRTOS.h"
#ifdef __GNUC__
#define USED __attribute__((used))
#else
#define USED
#endif
const int USED uxTopUsedPriority = configMAX_PRIORITIES;

View File

@ -8617,7 +8617,7 @@ _tx_thread_current_ptr, _tx_thread_created_ptr, _tx_thread_created_count.
@item FreeRTOS symbols @item FreeRTOS symbols
pxCurrentTCB, pxReadyTasksLists, xDelayedTaskList1, xDelayedTaskList2, pxCurrentTCB, pxReadyTasksLists, xDelayedTaskList1, xDelayedTaskList2,
pxDelayedTaskList, pxOverflowDelayedTaskList, xPendingReadyList, pxDelayedTaskList, pxOverflowDelayedTaskList, xPendingReadyList,
xTasksWaitingTermination, xSuspendedTaskList, uxCurrentNumberOfTasks, uxTopUsedPriority. uxCurrentNumberOfTasks, uxTopUsedPriority.
@item linux symbols @item linux symbols
init_task. init_task.
@item ChibiOS symbols @item ChibiOS symbols
@ -8630,8 +8630,15 @@ _mqx_kernel_data, MQX_init_struct.
@end table @end table
For most RTOS supported the above symbols will be exported by default. However for For most RTOS supported the above symbols will be exported by default. However for
some, eg. FreeRTOS @option{xTasksWaitingTermination} is only exported some, eg. FreeRTOS, extra steps must be taken.
if @option{INCLUDE_vTaskDelete} is defined during the build.
These RTOSes may require additional OpenOCD-specific file to be linked
along with the project:
@table @code
@item FreeRTOS
contrib/rtos-helpers/FreeRTOS-openocd.c
@end table
@node Tcl Scripting API @node Tcl Scripting API
@chapter Tcl Scripting API @chapter Tcl Scripting API

View File

@ -135,7 +135,7 @@ static const struct symbols FreeRTOS_symbol_list[] = {
{ "xTasksWaitingTermination", true }, /* Only if INCLUDE_vTaskDelete */ { "xTasksWaitingTermination", true }, /* Only if INCLUDE_vTaskDelete */
{ "xSuspendedTaskList", true }, /* Only if INCLUDE_vTaskSuspend */ { "xSuspendedTaskList", true }, /* Only if INCLUDE_vTaskSuspend */
{ "uxCurrentNumberOfTasks", false }, { "uxCurrentNumberOfTasks", false },
{ "uxTopUsedPriority", false }, { "uxTopUsedPriority", true }, /* Unavailable since v7.5.3 */
{ NULL, false } { NULL, false }
}; };
@ -231,6 +231,10 @@ static int FreeRTOS_update_threads(struct rtos *rtos)
} }
/* Find out how many lists are needed to be read from pxReadyTasksLists, */ /* 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; int64_t max_used_priority = 0;
retval = target_read_buffer(rtos->target, retval = target_read_buffer(rtos->target,
rtos->symbols[FreeRTOS_VAL_uxTopUsedPriority].address, rtos->symbols[FreeRTOS_VAL_uxTopUsedPriority].address,