OpenOCD Support: Re-introduce uxTopUsedPriority (#188)

* re-introduce uxTopUsedPriority. Prevent removal by optimization

* Make uxTopUsedPriority volatile to avoid optimizer + code comment

Co-authored-by: Cobus van Eeden <35851496+cobusve@users.noreply.github.com>
diff --git a/tasks.c b/tasks.c
index 038a2b4..cbd23b9 100644
--- a/tasks.c
+++ b/tasks.c
@@ -379,6 +379,11 @@
 PRIVILEGED_DATA static volatile TickType_t xNextTaskUnblockTime = ( TickType_t ) 0U; /* Initialised to portMAX_DELAY before the scheduler starts. */

 PRIVILEGED_DATA static TaskHandle_t xIdleTaskHandle = NULL;                          /*< Holds the handle of the idle task.  The idle task is created automatically when the scheduler is started. */

 

+/* Improve support for OpenOCD. The kernel tracks Ready tasks via priority lists.

+ * For tracking the state of remote threads, OpenOCD uses uxTopUsedPriority

+ * to determine the number of priority lists to read back from the remote target. */

+const volatile UBaseType_t uxTopUsedPriority = configMAX_PRIORITIES - 1U;

+

 /* Context switches are held pending while the scheduler is suspended.  Also,

  * interrupts must not manipulate the xStateListItem of a TCB, or any of the

  * lists the xStateListItem can be referenced from, if the scheduler is suspended.

@@ -2093,6 +2098,10 @@
     /* Prevent compiler warnings if INCLUDE_xTaskGetIdleTaskHandle is set to 0,

      * meaning xIdleTaskHandle is not used anywhere else. */

     ( void ) xIdleTaskHandle;

+    

+    /* OpenOCD makes use of uxTopUsedPriority for thread debugging. Prevent uxTopUsedPriority 

+     * from getting optimized out as it is no longer used by the kernel. */

+    ( void ) uxTopUsedPriority;

 }

 /*-----------------------------------------------------------*/