-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Description
OpenOCD is a popular Open Source On-Chip Debugger:
One of its best features is thread support (Task support). With OpenOCD, the GNU gdb debugger can view the list of Tasks, and can look at an individual Task to see its stack trace, step through code in just that one Task, etc Basically, OpenOCD enables these gdb features:
https://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_24.html
(Eclipse also has desktop GUI support for walking through OpenOCD Tasks, much like a normal POSIX threaded program.)
Without thread support, gdb is very restricted and hard to use with a FreeRTOS application. For example, constant SysTick interrupts keep jumping you into the scheduler, making it very hard to follow your application code. It's basically only useful for debugging main()
and ISRs.
In an older release of FreeRTOS (V7.5.3) there was a symbol removed called uxTopUsedPriority
. That symbol is necessary for OpenOCD to find the list of Tasks and enable thread support.
Since that release, we developers have had to manually re-introduce that symbol so that we can debug our FreeRTOS apps. Usually this means adding a copy of this file to the build:
https://raw.githubusercontent.com/arduino/OpenOCD/master/contrib/rtos-helpers/FreeRTOS-openocd.c
Here is that entire file:
/*
* 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 - 1;
Some distributions of FreeRTOS, like WICED SDK, already put this back for you.
The Internet is littered with forum posts of developers asking why they can't debug FreeRTOS Tasks, and responses telling them about this annoying requirement. Just google "uxTopUsedPriority" to see what I'm talking about.
So: Could FreeRTOS please re-add the uxTopUsedPriority
symbol, and then never remove it again?