mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-09-10 16:17:44 -04:00
Compare commits
6 commits
89d39e8db4
...
f00ce0de82
Author | SHA1 | Date | |
---|---|---|---|
|
f00ce0de82 | ||
|
f5e6151b14 | ||
|
9febfa7cdc | ||
|
e4c4c3dd87 | ||
|
18c8cb1b3e | ||
|
44ca6d9ec8 |
4 changed files with 516 additions and 2019 deletions
2
.github/workflows/auto-release.yml
vendored
2
.github/workflows/auto-release.yml
vendored
|
@ -124,7 +124,7 @@ jobs:
|
|||
with:
|
||||
# This is dependent on the release script putting this zip file
|
||||
# in this exact location.
|
||||
artifact_path: ./tools/.github/scripts/FreeRTOS-KernelV${{ github.event.inputs.version_number }}.zip
|
||||
artifact_path: ./FreeRTOS-KernelV${{ github.event.inputs.version_number }}.zip
|
||||
release_tag: ${{ github.event.inputs.version_number }}
|
||||
|
||||
- name: Cleanup
|
||||
|
|
|
@ -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;
|
||||
|
|
2438
include/task.h
2438
include/task.h
File diff suppressed because it is too large
Load diff
67
tasks.c
67
tasks.c
|
@ -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 )
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue