Revert test code for uxTaskGetAllHandles; restore main.c and remove test changes

This commit is contained in:
OmniMan 2025-07-03 14:16:29 +04:00
parent e4c4c3dd87
commit 9febfa7cdc
4 changed files with 515 additions and 2019 deletions

View file

@ -39,8 +39,6 @@
#include <queue.h>
#include <timers.h>
#include <semphr.h>
/* Standard includes. */
#include <stdio.h>
/*-----------------------------------------------------------*/
@ -62,6 +60,32 @@ static void exampleTask( void * parameters )
}
/*-----------------------------------------------------------*/
/* Test uxTaskGetAllHandles API before starting the scheduler */
static void test_uxTaskGetAllHandles(void)
{
UBaseType_t uxCount, uxFilled, i;
TaskHandle_t *pxHandles;
/* First, query the number of tasks (should be 1: exampleTask, before scheduler starts) */
uxCount = uxTaskGetAllHandles(NULL, 0);
printf("[uxTaskGetAllHandles] Number of tasks: %lu\n", (unsigned long)uxCount);
if (uxCount > 0) {
pxHandles = (TaskHandle_t *)pvPortMalloc(sizeof(TaskHandle_t) * uxCount);
if (pxHandles != NULL) {
uxFilled = uxTaskGetAllHandles(pxHandles, uxCount);
printf("[uxTaskGetAllHandles] Handles returned: %lu\n", (unsigned long)uxFilled);
for (i = 0; i < uxFilled; i++) {
printf(" Handle[%lu]: %p\n", (unsigned long)i, (void *)pxHandles[i]);
}
vPortFree(pxHandles);
} else {
printf("[uxTaskGetAllHandles] pvPortMalloc failed!\n");
}
}
}
/*-----------------------------------------------------------*/
int main( void )
{
static StaticTask_t exampleTaskTCB;

File diff suppressed because it is too large Load diff

1
list.c
View file

@ -216,7 +216,6 @@ void vListInsert( List_t * const pxList,
UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )
{
configASSERT( pxItemToRemove->pxContainer != NULL );
/* The list item knows which list it is in. Obtain the list from the list
* item. */
List_t * const pxList = pxItemToRemove->pxContainer;

67
tasks.c
View file

@ -4514,6 +4514,73 @@ char * pcTaskGetName( TaskHandle_t xTaskToQuery )
#endif /* configUSE_TRACE_FACILITY */
/*----------------------------------------------------------*/
UBaseType_t uxTaskGetAllHandles(TaskHandle_t *pxTaskHandleArray, UBaseType_t uxArraySize)
{
UBaseType_t uxCount = 0, uxQueue;
TCB_t *pxTCB;
List_t *pxList;
ListItem_t *pxIterator, *pxEndMarker;
vTaskSuspendAll();
{
/* Ready lists */
for (uxQueue = 0; uxQueue < configMAX_PRIORITIES; uxQueue++) {
pxList = &pxReadyTasksLists[uxQueue];
pxEndMarker = listGET_END_MARKER(pxList);
for (pxIterator = listGET_HEAD_ENTRY(pxList);
pxIterator != pxEndMarker;
pxIterator = listGET_NEXT(pxIterator)) {
pxTCB = listGET_LIST_ITEM_OWNER(pxIterator);
if (uxCount < uxArraySize && pxTaskHandleArray)
pxTaskHandleArray[uxCount] = (TaskHandle_t)pxTCB;
uxCount++;
}
}
/* Delayed lists */
List_t *delayedLists[] = { pxDelayedTaskList, pxOverflowDelayedTaskList };
for (int i = 0; i < 2; i++) {
pxList = delayedLists[i];
pxEndMarker = listGET_END_MARKER(pxList);
for (pxIterator = listGET_HEAD_ENTRY(pxList);
pxIterator != pxEndMarker;
pxIterator = listGET_NEXT(pxIterator)) {
pxTCB = listGET_LIST_ITEM_OWNER(pxIterator);
if (uxCount < uxArraySize && pxTaskHandleArray)
pxTaskHandleArray[uxCount] = (TaskHandle_t)pxTCB;
uxCount++;
}
}
#if (INCLUDE_vTaskSuspend == 1)
/* Suspended list */
pxList = &xSuspendedTaskList;
pxEndMarker = listGET_END_MARKER(pxList);
for (pxIterator = listGET_HEAD_ENTRY(pxList);
pxIterator != pxEndMarker;
pxIterator = listGET_NEXT(pxIterator)) {
pxTCB = listGET_LIST_ITEM_OWNER(pxIterator);
if (uxCount < uxArraySize && pxTaskHandleArray)
pxTaskHandleArray[uxCount] = (TaskHandle_t)pxTCB;
uxCount++;
}
#endif
#if (INCLUDE_vTaskDelete == 1)
/* Deleted list (waiting for cleanup) */
pxList = &xTasksWaitingTermination;
pxEndMarker = listGET_END_MARKER(pxList);
for (pxIterator = listGET_HEAD_ENTRY(pxList);
pxIterator != pxEndMarker;
pxIterator = listGET_NEXT(pxIterator)) {
pxTCB = listGET_LIST_ITEM_OWNER(pxIterator);
if (uxCount < uxArraySize && pxTaskHandleArray)
pxTaskHandleArray[uxCount] = (TaskHandle_t)pxTCB;
uxCount++;
}
#endif
}
(void)xTaskResumeAll();
return uxCount;
}
#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 )
#if ( configNUMBER_OF_CORES == 1 )