rtos: add instructions and helper code to make FreeRTOS work again 47/2347/4
authorAndreas Fritiofson <andreas.fritiofson@gmail.com>
Thu, 16 Apr 2015 11:08:14 +0000 (13:08 +0200)
committerPaul Fertser <fercerpav@gmail.com>
Thu, 16 Apr 2015 19:23:46 +0000 (20:23 +0100)
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
contrib/rtos-helpers/FreeRTOS-openocd.c [new file with mode: 0644]
doc/openocd.texi
src/rtos/FreeRTOS.c

diff --git a/contrib/rtos-helpers/FreeRTOS-openocd.c b/contrib/rtos-helpers/FreeRTOS-openocd.c
new file mode 100644 (file)
index 0000000..567e710
--- /dev/null
@@ -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;
index 5a803d2c7b61a83101cfab3484763b78cd28fe9c..21a39fceb66d9d66becd6e24bd8f122b379ee122 100644 (file)
@@ -8617,7 +8617,7 @@ _tx_thread_current_ptr, _tx_thread_created_ptr, _tx_thread_created_count.
 @item FreeRTOS symbols
 pxCurrentTCB, pxReadyTasksLists, xDelayedTaskList1, xDelayedTaskList2,
 pxDelayedTaskList, pxOverflowDelayedTaskList, xPendingReadyList,
 @item FreeRTOS symbols
 pxCurrentTCB, pxReadyTasksLists, xDelayedTaskList1, xDelayedTaskList2,
 pxDelayedTaskList, pxOverflowDelayedTaskList, xPendingReadyList,
-xTasksWaitingTermination, xSuspendedTaskList, uxCurrentNumberOfTasks, uxTopUsedPriority.
+uxCurrentNumberOfTasks, uxTopUsedPriority.
 @item linux symbols
 init_task.
 @item ChibiOS symbols
 @item linux symbols
 init_task.
 @item ChibiOS symbols
@@ -8630,8 +8630,15 @@ _mqx_kernel_data, MQX_init_struct.
 @end table
 
 For most RTOS supported the above symbols will be exported by default. However for
 @end table
 
 For most RTOS supported the above symbols will be exported by default. However for
-some, eg. FreeRTOS @option{xTasksWaitingTermination} is only exported
-if @option{INCLUDE_vTaskDelete} is defined during the build.
+some, eg. FreeRTOS, extra steps must be taken.
+
+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
 @chapter Tcl Scripting API
 
 @node Tcl Scripting API
 @chapter Tcl Scripting API
index e13cc4617bdca5688ed6f41f9b3571a18f6afc0c..1ce680724078f547482214cca2899c0aa517c8e7 100644 (file)
@@ -135,7 +135,7 @@ static const struct symbols FreeRTOS_symbol_list[] = {
        { "xTasksWaitingTermination", true }, /* Only if INCLUDE_vTaskDelete */
        { "xSuspendedTaskList", true }, /* Only if INCLUDE_vTaskSuspend */
        { "uxCurrentNumberOfTasks", false },
        { "xTasksWaitingTermination", true }, /* Only if INCLUDE_vTaskDelete */
        { "xSuspendedTaskList", true }, /* Only if INCLUDE_vTaskSuspend */
        { "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;
        retval = target_read_buffer(rtos->target,
                        rtos->symbols[FreeRTOS_VAL_uxTopUsedPriority].address,
        int64_t max_used_priority = 0;
        retval = target_read_buffer(rtos->target,
                        rtos->symbols[FreeRTOS_VAL_uxTopUsedPriority].address,

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)