mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-20 21:41:59 -04:00
Add default definition for configUSE_QUEUE_SETS.
Add eTaskConfirmSleepModeStatus() (not yet tested). Only call prvQueueUnregisterQueue() when a queue or semaphore is deleted if configQUEUE_REGISTRY_SIZE > 0. Back out change that checks the configUSE_PORT_OPTMISED_TASK_SELECTION value before uxPriorityUsedOnEntry is set in vTaskPrioritySet as it generated more warnings (with other compilers) than it fixed.
This commit is contained in:
parent
2b835ccb48
commit
dcc90bb6d9
|
@ -558,6 +558,10 @@ typedef portBASE_TYPE (*pdTASK_HOOK_CODE)( void * );
|
|||
#define configPOST_SLEEP_PROCESSING( x )
|
||||
#endif
|
||||
|
||||
#ifndef configUSE_QUEUE_SETS
|
||||
#define configUSE_QUEUE_SETS 0
|
||||
#endif
|
||||
|
||||
/* For backward compatability. */
|
||||
#define eTaskStateGet eTaskGetState
|
||||
|
||||
|
|
|
@ -141,6 +141,15 @@ typedef enum
|
|||
eDeleted /* The task being queried has been deleted, but its TCB has not yet been freed. */
|
||||
} eTaskState;
|
||||
|
||||
/* Possible return values for eTaskConfirmSleepModeStatus(). */
|
||||
typedef enum
|
||||
{
|
||||
eAbortSleep = 0, /* A task has been made ready or a context switch pended since portSUPPORESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */
|
||||
eStandardSleep, /* Enter a sleep mode that will not last any longer than the expected idle time. */
|
||||
eNoTasksWaitingTimeout /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */
|
||||
} eSleepModeStatus;
|
||||
|
||||
|
||||
/*
|
||||
* Defines the priority used by the idle task. This must not be modified.
|
||||
*
|
||||
|
@ -1329,6 +1338,21 @@ void vTaskSetTaskNumber( xTaskHandle xTask, unsigned portBASE_TYPE uxHandle );
|
|||
*/
|
||||
void vTaskStepTick( portTickType xTicksToJump );
|
||||
|
||||
/*
|
||||
* Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port
|
||||
* specific sleep function to determine if it is ok to proceed with the sleep,
|
||||
* and if it is ok to proceed, if it is ok to sleep indefinitely.
|
||||
*
|
||||
* This function is necessary because portSUPPRESS_TICKS_AND_SLEEP() is only
|
||||
* called with the scheduler suspended, not from within a critical section. It
|
||||
* is therefore possible for an interrupt to request a context switch between
|
||||
* portSUPPRESS_TICKS_AND_SLEEP() and the low power mode actually being
|
||||
* entered. eTaskConfirmSleepModeStatus() should be called from a short
|
||||
* critical section between the timer being stopped and the sleep mode being
|
||||
* entered to ensure it is ok to proceed into the sleep mode.
|
||||
*/
|
||||
eSleepModeStatus eTaskConfirmSleepModeStatus( void );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1251,7 +1251,11 @@ xQUEUE *pxQueue;
|
|||
configASSERT( pxQueue );
|
||||
|
||||
traceQUEUE_DELETE( pxQueue );
|
||||
#if ( configQUEUE_REGISTRY_SIZE > 0 )
|
||||
{
|
||||
prvQueueUnregisterQueue( pxQueue );
|
||||
}
|
||||
#endif
|
||||
vPortFree( pxQueue->pcHead );
|
||||
vPortFree( pxQueue );
|
||||
}
|
||||
|
|
|
@ -84,6 +84,13 @@ task.h is included from an application file. */
|
|||
|
||||
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
||||
|
||||
/* Sanity check the configuration. */
|
||||
#if configUSE_TICKLESS_IDLE != 0
|
||||
#if INCLUDE_vTaskSuspend != 1
|
||||
#error INCLUDE_vTaskSuspend must be set to 1 if configUSE_TICKLESS_IDLE is not set to 0
|
||||
#endif /* INCLUDE_vTaskSuspend */
|
||||
#endif /* configUSE_TICKLESS_IDLE */
|
||||
|
||||
/*
|
||||
* Defines the size, in words, of the stack allocated to the idle task.
|
||||
*/
|
||||
|
@ -602,13 +609,14 @@ tskTCB * pxNewTCB;
|
|||
uxTopUsedPriority = pxNewTCB->uxPriority;
|
||||
}
|
||||
|
||||
uxTaskNumber++;
|
||||
|
||||
#if ( configUSE_TRACE_FACILITY == 1 )
|
||||
{
|
||||
/* Add a counter into the TCB for tracing only. */
|
||||
pxNewTCB->uxTCBNumber = uxTaskNumber;
|
||||
}
|
||||
#endif /* configUSE_TRACE_FACILITY */
|
||||
uxTaskNumber++;
|
||||
traceTASK_CREATE( pxNewTCB );
|
||||
|
||||
prvAddTaskToReadyQueue( pxNewTCB );
|
||||
|
@ -974,11 +982,7 @@ tskTCB * pxNewTCB;
|
|||
/* Remember the ready list the task might be referenced from
|
||||
before its uxPriority member is changed so the
|
||||
taskRESET_READY_PRIORITY() macro can function correctly. */
|
||||
#if ( configUSE_PORT_OPTIMISED_TASK_SELECTION != 0 )
|
||||
{
|
||||
uxPriorityUsedOnEntry = pxTCB->uxPriority;
|
||||
}
|
||||
#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */
|
||||
|
||||
#if ( configUSE_MUTEXES == 1 )
|
||||
{
|
||||
|
@ -2171,6 +2175,46 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters )
|
|||
} /*lint !e715 pvParameters is not accessed but all task functions require the same prototype. */
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
#if configUSE_TICKLESS_IDLE != 0
|
||||
|
||||
eSleepModeStatus eTaskConfirmSleepModeStatus( void )
|
||||
{
|
||||
eSleepModeStatus eReturn = eStandardSleep;
|
||||
|
||||
if( listCURRENT_LIST_LENGTH( &xPendingReadyList ) != 0 )
|
||||
{
|
||||
/* A task was made ready while the scheduler was suspended. */
|
||||
eReturn = eAbortSleep;
|
||||
}
|
||||
else if( xMissedYield != pdFALSE )
|
||||
{
|
||||
/* A yield was pended while the scheduler was suspended. */
|
||||
eReturn = eAbortSleep;
|
||||
}
|
||||
else
|
||||
{
|
||||
#if configUSE_TIMERS == 0
|
||||
{
|
||||
/* The idle task exists in addition to the application tasks. */
|
||||
const unsigned portBASE_TYPE uxNonApplicationTasks = 1;
|
||||
|
||||
/* If timers are not being used and all the tasks are in the
|
||||
suspended list (which might mean they have an infinite block
|
||||
time rather than actually being suspended) then it is safe to
|
||||
turn all clocks off and just wait for external initerrupts. */
|
||||
if( listCURRENT_LIST_LENGTH( &xSuspendedTasksList ) == ( uxCurrentNumberOfTasks - uxNonApplicationTasks ) )
|
||||
{
|
||||
eReturn = eNoTasksWaitingTimeout;
|
||||
}
|
||||
}
|
||||
#endif /* configUSE_TIMERS */
|
||||
}
|
||||
|
||||
return eReturn;
|
||||
}
|
||||
#endif /* configUSE_TICKLESS_IDLE */
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvInitialiseTCBVariables( tskTCB *pxTCB, const signed char * const pcName, unsigned portBASE_TYPE uxPriority, const xMemoryRegion * const xRegions, unsigned short usStackDepth )
|
||||
{
|
||||
/* Store the function name in the TCB. */
|
||||
|
|
Loading…
Reference in a new issue