mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-12-12 14:45:09 -05:00
Removed duplicate code in predicates.
This commit is contained in:
parent
8458220b67
commit
1672d293ab
2 changed files with 7 additions and 42 deletions
|
|
@ -85,46 +85,7 @@ predicate isrLockInv_p();
|
||||||
fixpoint int taskISRLockID_f();
|
fixpoint int taskISRLockID_f();
|
||||||
|
|
||||||
predicate taskISRLockInv_p() =
|
predicate taskISRLockInv_p() =
|
||||||
// Access to global variables
|
_taskISRLockInv_p(_);
|
||||||
[0.5]pointer(&pxCurrentTCBs[coreID_f], ?gCurrentTCB) &*&
|
|
||||||
integer_((void*) &uxSchedulerSuspended, sizeof(UBaseType_t), false, _) &*&
|
|
||||||
integer_(&xSchedulerRunning, sizeof(BaseType_t), true, _)
|
|
||||||
&*&
|
|
||||||
// top ready priority must be in range
|
|
||||||
integer_((void*) &uxTopReadyPriority, sizeof(UBaseType_t), false, ?gTopReadyPriority) &*&
|
|
||||||
0 <= gTopReadyPriority &*& gTopReadyPriority < configMAX_PRIORITIES
|
|
||||||
&*&
|
|
||||||
// tasks / TCBs
|
|
||||||
exists_in_taskISRLockInv_p(?gTasks, ?gStates)
|
|
||||||
&*&
|
|
||||||
// (RP-All) Read permissions for every task
|
|
||||||
// and recording of task states in state list
|
|
||||||
// (∀t ∈ gTasks.
|
|
||||||
// [1/2]sharedSeg_TCB_p(t, _))
|
|
||||||
// ∧
|
|
||||||
// ∀i. ∀t. gTasks[i] == t -> gStates[i] == t->xTaskRunState
|
|
||||||
foreach(gTasks, readOnly_sharedSeg_TCB_p(gTasks, gStates))
|
|
||||||
&*&
|
|
||||||
// (RP-Current) Read permission for task currently scheduled on this core
|
|
||||||
// (RP-All) + (RP-Current) => Write permission for scheduled task
|
|
||||||
[1/2]sharedSeg_TCB_p(gCurrentTCB, ?gCurrentTCB_state) &*&
|
|
||||||
// gCurrentTCB_state != taskTASK_NOT_RUNNING &*&
|
|
||||||
(gCurrentTCB_state == coreID_f() || gCurrentTCB_state == taskTASK_YIELDING) &*&
|
|
||||||
nth(index_of(gCurrentTCB, gTasks), gStates) == gCurrentTCB_state
|
|
||||||
&*&
|
|
||||||
// (RP-Unsched) Read permissions for unscheduled tasks
|
|
||||||
// (RP-All) + (RP-Unsched) => Write permissions for unscheduled tasks
|
|
||||||
// ∀t ∈ tasks. t->xTaskState == taskTASK_NOT_RUNNING
|
|
||||||
// -> [1/2]shared_TCB_p(t, taskTASK_NOT_RUNNING)
|
|
||||||
foreach(gTasks, readOnly_sharedSeg_TCB_IF_not_running_p(gTasks, gStates))
|
|
||||||
&*&
|
|
||||||
readyLists_p(?gCellLists, ?gOwnerLists)
|
|
||||||
&*&
|
|
||||||
// gTasks contains all relevant tasks
|
|
||||||
mem(gCurrentTCB, gTasks) == true
|
|
||||||
&*&
|
|
||||||
// ∀l ∈ gOwnerLists. l ⊆ gTasks
|
|
||||||
forall(gOwnerLists, (superset)(gTasks)) == true;
|
|
||||||
|
|
||||||
|
|
||||||
// Auxiliary predicate. Equal to the lock invariant above but exposes
|
// Auxiliary predicate. Equal to the lock invariant above but exposes
|
||||||
|
|
|
||||||
|
|
@ -932,7 +932,8 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
||||||
@*/
|
@*/
|
||||||
{
|
{
|
||||||
//@ open taskISRLockInv_p();
|
//@ open taskISRLockInv_p();
|
||||||
//@ assert( integer_((void*) &uxTopReadyPriority, sizeof(UBaseType_t), false, ?gTopReadyPriority0) );
|
//@ open _taskISRLockInv_p(?gTopReadyPriority0);
|
||||||
|
//@ assert( integer_((void*) &uxTopReadyPriority, sizeof(UBaseType_t), false, gTopReadyPriority0) );
|
||||||
//@ assert( gTopReadyPriority0 == uxTopReadyPriority);
|
//@ assert( gTopReadyPriority0 == uxTopReadyPriority);
|
||||||
UBaseType_t uxCurrentPriority = uxTopReadyPriority;
|
UBaseType_t uxCurrentPriority = uxTopReadyPriority;
|
||||||
BaseType_t xTaskScheduled = pdFALSE;
|
BaseType_t xTaskScheduled = pdFALSE;
|
||||||
|
|
@ -1390,6 +1391,7 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
||||||
// @ append_take_nth_drop(uxCurrentPriority, gOwnerLists);
|
// @ append_take_nth_drop(uxCurrentPriority, gOwnerLists);
|
||||||
|
|
||||||
// @ close readyLists_p(gCellLists2, gOwnerLists2);
|
// @ close readyLists_p(gCellLists2, gOwnerLists2);
|
||||||
|
//@ close _taskISRLockInv_p(_);
|
||||||
//@ close taskISRLockInv_p();
|
//@ close taskISRLockInv_p();
|
||||||
return pdFALSE;
|
return pdFALSE;
|
||||||
}
|
}
|
||||||
|
|
@ -1508,7 +1510,6 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
||||||
#endif /* if ( configUSE_CORE_AFFINITY == 1 ) */
|
#endif /* if ( configUSE_CORE_AFFINITY == 1 ) */
|
||||||
#endif /* if ( configNUM_CORES > 1 ) */
|
#endif /* if ( configNUM_CORES > 1 ) */
|
||||||
|
|
||||||
//@ open _taskISRLockInv_p(_);
|
|
||||||
//@ close taskISRLockInv_p();
|
//@ close taskISRLockInv_p();
|
||||||
return pdTRUE;
|
return pdTRUE;
|
||||||
}
|
}
|
||||||
|
|
@ -4442,11 +4443,13 @@ void vTaskSwitchContext( BaseType_t xCoreID )
|
||||||
#endif /* VERIFAST */
|
#endif /* VERIFAST */
|
||||||
|
|
||||||
//@ open taskISRLockInv_p();
|
//@ open taskISRLockInv_p();
|
||||||
|
//@ open _taskISRLockInv_p(_);
|
||||||
if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE )
|
if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE )
|
||||||
{
|
{
|
||||||
/* The scheduler is currently suspended - do not allow a context
|
/* The scheduler is currently suspended - do not allow a context
|
||||||
* switch. */
|
* switch. */
|
||||||
xYieldPendings[ xCoreID ] = pdTRUE;
|
xYieldPendings[ xCoreID ] = pdTRUE;
|
||||||
|
//@ close _taskISRLockInv_p(_);
|
||||||
//@ close taskISRLockInv_p();
|
//@ close taskISRLockInv_p();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -4494,6 +4497,7 @@ void vTaskSwitchContext( BaseType_t xCoreID )
|
||||||
|
|
||||||
/* Select a new task to run using either the generic C or port
|
/* Select a new task to run using either the generic C or port
|
||||||
* optimised asm code. */
|
* optimised asm code. */
|
||||||
|
//@ close _taskISRLockInv_p(_);
|
||||||
//@ close taskISRLockInv_p();
|
//@ close taskISRLockInv_p();
|
||||||
( void ) prvSelectHighestPriorityTask( xCoreID );
|
( void ) prvSelectHighestPriorityTask( xCoreID );
|
||||||
traceTASK_SWITCHED_IN();
|
traceTASK_SWITCHED_IN();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue