diff --git a/tasks.c b/tasks.c index c596c475f8..b30a0f71e6 100644 --- a/tasks.c +++ b/tasks.c @@ -4890,7 +4890,12 @@ BaseType_t xTaskIncrementTick( void ) { if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCBs[ xCoreID ]->uxPriority ] ) ) > 1U ) { - xYieldPendings[ xCoreID ] = pdTRUE; + #if ( configUSE_TASK_PREEMPTION_DISABLE == 1 ) + if( pxCurrentTCBs[ xCoreID ]->xPreemptionDisable == pdFALSE ) + #endif + { + xYieldPendings[ xCoreID ] = pdTRUE; + } } else { @@ -5222,6 +5227,16 @@ BaseType_t xTaskIncrementTick( void ) * SMP port. */ configASSERT( portGET_CRITICAL_NESTING_COUNT( xCoreID ) == 0 ); + #if ( configUSE_TASK_PREEMPTION_DISABLE == 1 ) + if( pxCurrentTCBs[ xCoreID ]->xPreemptionDisable != pdFALSE ) + { + /* The current task has preemption disabled - do not allow a + * context switch. The yield will be performed when preemption + * is re-enabled. */ + xYieldPendings[ xCoreID ] = pdTRUE; + } + else + #endif /* #if ( configUSE_TASK_PREEMPTION_DISABLE == 1 ) */ if( uxSchedulerSuspended != ( UBaseType_t ) 0U ) { /* The scheduler is currently suspended - do not allow a context