mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-12-23 11:09:28 -05:00
Add uncrustify github workflow (#659)
* Add uncrustify github workflow * Fix exclusion pattern * fix find expression * exclude uncrustify files * Uncrustify common demo and test files * exlude white space checking files * Fix EOL whitespace checker * Remove whitespaces from EOL * Fix space at EOL * Fix find spaces at EOL Co-authored-by: Archit Aggarwal <architag@amazon.com>
This commit is contained in:
parent
dd80d615b5
commit
ae92d8c6ee
191 changed files with 17540 additions and 17102 deletions
|
|
@ -41,14 +41,14 @@ BaseType_t xPrepareCurrentTCB( void );
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
UBaseType_t xTasksPrepared;
|
||||
TimeOut_t pxTimeOut;
|
||||
TickType_t pxTicksToWait;
|
||||
UBaseType_t xTasksPrepared;
|
||||
TimeOut_t pxTimeOut;
|
||||
TickType_t pxTicksToWait;
|
||||
|
||||
xTasksPrepared = xPrepareCurrentTCB();
|
||||
xTasksPrepared = xPrepareCurrentTCB();
|
||||
|
||||
if ( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
xTaskCheckForTimeOut( &pxTimeOut, &pxTicksToWait );
|
||||
}
|
||||
if( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
xTaskCheckForTimeOut( &pxTimeOut, &pxTicksToWait );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,9 +33,9 @@
|
|||
*/
|
||||
TaskHandle_t xUnconstrainedTCB( void )
|
||||
{
|
||||
TCB_t * pxTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
TCB_t * pxTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
|
||||
return pxTCB;
|
||||
return pxTCB;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -43,9 +43,9 @@ TaskHandle_t xUnconstrainedTCB( void )
|
|||
*/
|
||||
BaseType_t xPrepareCurrentTCB( void )
|
||||
{
|
||||
__CPROVER_assert_zero_allocation();
|
||||
__CPROVER_assert_zero_allocation();
|
||||
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
|
||||
return pxCurrentTCB == NULL ? pdFAIL : pdPASS;
|
||||
return pxCurrentTCB == NULL ? pdFAIL : pdPASS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,31 +33,32 @@
|
|||
void vNondetSetCurrentTCB( void );
|
||||
void vSetGlobalVariables( void );
|
||||
void vPrepareTaskLists( void );
|
||||
TaskHandle_t *pxNondetSetTaskHandle( void );
|
||||
char *pcNondetSetString( size_t xSizeLength );
|
||||
TaskHandle_t * pxNondetSetTaskHandle( void );
|
||||
char * pcNondetSetString( size_t xSizeLength );
|
||||
|
||||
void harness()
|
||||
{
|
||||
TaskFunction_t pxTaskCode;
|
||||
char * pcName;
|
||||
configSTACK_DEPTH_TYPE usStackDepth = STACK_DEPTH;
|
||||
void * pvParameters;
|
||||
TaskHandle_t * pxCreatedTask;
|
||||
TaskFunction_t pxTaskCode;
|
||||
char * pcName;
|
||||
configSTACK_DEPTH_TYPE usStackDepth = STACK_DEPTH;
|
||||
void * pvParameters;
|
||||
TaskHandle_t * pxCreatedTask;
|
||||
|
||||
UBaseType_t uxPriority;
|
||||
|
||||
UBaseType_t uxPriority;
|
||||
__CPROVER_assume( uxPriority < configMAX_PRIORITIES );
|
||||
|
||||
vNondetSetCurrentTCB();
|
||||
vSetGlobalVariables();
|
||||
vPrepareTaskLists();
|
||||
vNondetSetCurrentTCB();
|
||||
vSetGlobalVariables();
|
||||
vPrepareTaskLists();
|
||||
|
||||
pxCreatedTask = pxNondetSetTaskHandle();
|
||||
pcName = pcNondetSetString( configMAX_TASK_NAME_LEN );
|
||||
pxCreatedTask = pxNondetSetTaskHandle();
|
||||
pcName = pcNondetSetString( configMAX_TASK_NAME_LEN );
|
||||
|
||||
xTaskCreate(pxTaskCode,
|
||||
pcName,
|
||||
usStackDepth,
|
||||
pvParameters,
|
||||
uxPriority,
|
||||
pxCreatedTask );
|
||||
xTaskCreate( pxTaskCode,
|
||||
pcName,
|
||||
usStackDepth,
|
||||
pvParameters,
|
||||
uxPriority,
|
||||
pxCreatedTask );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,16 +34,17 @@
|
|||
*/
|
||||
void vNondetSetCurrentTCB( void )
|
||||
{
|
||||
pxCurrentTCB = pvPortMalloc( sizeof(TCB_t) );
|
||||
pxCurrentTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
}
|
||||
|
||||
/*
|
||||
* We just require task lists to be initialized for this proof
|
||||
*/
|
||||
void vPrepareTaskLists( void )
|
||||
{
|
||||
__CPROVER_assert_zero_allocation();
|
||||
__CPROVER_assert_zero_allocation();
|
||||
|
||||
prvInitialiseTaskLists();
|
||||
prvInitialiseTaskLists();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -52,33 +53,35 @@ void vPrepareTaskLists( void )
|
|||
*/
|
||||
void vSetGlobalVariables( void )
|
||||
{
|
||||
xSchedulerRunning = nondet_basetype();
|
||||
uxCurrentNumberOfTasks = nondet_ubasetype();
|
||||
xSchedulerRunning = nondet_basetype();
|
||||
uxCurrentNumberOfTasks = nondet_ubasetype();
|
||||
}
|
||||
|
||||
/*
|
||||
* pvPortMalloc is nondeterministic by definition, thus we do not need
|
||||
* to check for NULL allocation in this function
|
||||
*/
|
||||
TaskHandle_t *pxNondetSetTaskHandle( void )
|
||||
TaskHandle_t * pxNondetSetTaskHandle( void )
|
||||
{
|
||||
TaskHandle_t *pxNondetTaskHandle = pvPortMalloc( sizeof(TaskHandle_t) );
|
||||
return pxNondetTaskHandle;
|
||||
TaskHandle_t * pxNondetTaskHandle = pvPortMalloc( sizeof( TaskHandle_t ) );
|
||||
|
||||
return pxNondetTaskHandle;
|
||||
}
|
||||
|
||||
/*
|
||||
* Tries to allocate a string of size xStringLength and sets the string
|
||||
* to be terminated using a nondeterministic index if allocation was successful
|
||||
*/
|
||||
char *pcNondetSetString( size_t xStringLength )
|
||||
char * pcNondetSetString( size_t xStringLength )
|
||||
{
|
||||
char *pcName = pvPortMalloc( xStringLength );
|
||||
char * pcName = pvPortMalloc( xStringLength );
|
||||
|
||||
if ( pcName != NULL ) {
|
||||
size_t uNondetIndex;
|
||||
__CPROVER_assume( uNondetIndex < xStringLength );
|
||||
pcName[uNondetIndex] = '\0';
|
||||
}
|
||||
if( pcName != NULL )
|
||||
{
|
||||
size_t uNondetIndex;
|
||||
__CPROVER_assume( uNondetIndex < xStringLength );
|
||||
pcName[ uNondetIndex ] = '\0';
|
||||
}
|
||||
|
||||
return pcName;
|
||||
return pcName;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,8 +40,9 @@ BaseType_t xTaskResumeAllStub( void );
|
|||
* This is a trick to overcome the "redefined twice" error
|
||||
* when stubbing out the `xTaskResumeAll` function in the header
|
||||
*/
|
||||
BaseType_t xTaskResumeAll( void ) {
|
||||
return xTaskResumeAllStub();
|
||||
BaseType_t xTaskResumeAll( void )
|
||||
{
|
||||
return xTaskResumeAllStub();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -50,16 +51,14 @@ BaseType_t xTaskResumeAll( void ) {
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
TickType_t xTicksToDelay;
|
||||
BaseType_t xTasksPrepared;
|
||||
TickType_t xTicksToDelay;
|
||||
BaseType_t xTasksPrepared;
|
||||
|
||||
vSetGlobalVariables();
|
||||
xTasksPrepared = xPrepareTaskLists();
|
||||
vSetGlobalVariables();
|
||||
xTasksPrepared = xPrepareTaskLists();
|
||||
|
||||
if ( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
vTaskDelay( xTicksToDelay );
|
||||
}
|
||||
if( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
vTaskDelay( xTicksToDelay );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -33,37 +33,40 @@
|
|||
*/
|
||||
TaskHandle_t xUnconstrainedTCB( void )
|
||||
{
|
||||
TCB_t * pxTCB = pvPortMalloc(sizeof(TCB_t));
|
||||
TCB_t * pxTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
|
||||
if ( pxTCB == NULL )
|
||||
return NULL;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
__CPROVER_assume( pxTCB->uxPriority < configMAX_PRIORITIES );
|
||||
__CPROVER_assume( pxTCB->uxPriority < configMAX_PRIORITIES );
|
||||
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
return pxTCB;
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
return pxTCB;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -74,9 +77,9 @@ TaskHandle_t xUnconstrainedTCB( void )
|
|||
|
||||
void vSetGlobalVariables( void )
|
||||
{
|
||||
uxSchedulerSuspended = pdFALSE;
|
||||
xTickCount = nondet_ticktype();
|
||||
xNextTaskUnblockTime = nondet_ticktype();
|
||||
uxSchedulerSuspended = pdFALSE;
|
||||
xTickCount = nondet_ticktype();
|
||||
xNextTaskUnblockTime = nondet_ticktype();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -86,39 +89,42 @@ void vSetGlobalVariables( void )
|
|||
*/
|
||||
BaseType_t xPrepareTaskLists( void )
|
||||
{
|
||||
TCB_t * pxTCB = NULL;
|
||||
TCB_t * pxTCB = NULL;
|
||||
|
||||
__CPROVER_assert_zero_allocation();
|
||||
__CPROVER_assert_zero_allocation();
|
||||
|
||||
prvInitialiseTaskLists();
|
||||
prvInitialiseTaskLists();
|
||||
|
||||
/* The current task will be moved to the delayed list */
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
if ( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
vListInsert( &pxReadyTasksLists[ pxCurrentTCB->uxPriority ], &( pxCurrentTCB->xStateListItem ) );
|
||||
/* The current task will be moved to the delayed list */
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
|
||||
/*
|
||||
* Nondeterministic insertion of a task in the ready tasks list
|
||||
* guarantees coverage in line 5104 (tasks.c)
|
||||
*/
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
if ( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
vListInsert( &pxReadyTasksLists[ pxTCB->uxPriority ], &( pxTCB->xStateListItem ) );
|
||||
if( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
/* Use of this macro ensures coverage on line 185 (list.c) */
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxTCB , &pxReadyTasksLists[ pxTCB->uxPriority ] );
|
||||
}
|
||||
vListInsert( &pxReadyTasksLists[ pxCurrentTCB->uxPriority ], &( pxCurrentTCB->xStateListItem ) );
|
||||
|
||||
/*
|
||||
* Nondeterministic insertion of a task in the ready tasks list
|
||||
* guarantees coverage in line 5104 (tasks.c)
|
||||
*/
|
||||
if( nondet_bool() )
|
||||
{
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
|
||||
return pdPASS;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
vListInsert( &pxReadyTasksLists[ pxTCB->uxPriority ], &( pxTCB->xStateListItem ) );
|
||||
|
||||
/* Use of this macro ensures coverage on line 185 (list.c) */
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxTCB, &pxReadyTasksLists[ pxTCB->uxPriority ] );
|
||||
}
|
||||
|
||||
return pdPASS;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -129,17 +135,17 @@ BaseType_t xPrepareTaskLists( void )
|
|||
*/
|
||||
BaseType_t xTaskResumeAllStub( void )
|
||||
{
|
||||
BaseType_t xAlreadyYielded;
|
||||
BaseType_t xAlreadyYielded;
|
||||
|
||||
configASSERT( uxSchedulerSuspended );
|
||||
configASSERT( uxSchedulerSuspended );
|
||||
|
||||
taskENTER_CRITICAL();
|
||||
{
|
||||
--uxSchedulerSuspended;
|
||||
__CPROVER_assert( listLIST_IS_EMPTY( &xPendingReadyList ), "Pending ready tasks list not empty." );
|
||||
__CPROVER_assert( xPendedTicks == 0 , "xPendedTicks is not equal to zero.");
|
||||
}
|
||||
taskEXIT_CRITICAL();
|
||||
taskENTER_CRITICAL();
|
||||
{
|
||||
--uxSchedulerSuspended;
|
||||
__CPROVER_assert( listLIST_IS_EMPTY( &xPendingReadyList ), "Pending ready tasks list not empty." );
|
||||
__CPROVER_assert( xPendedTicks == 0, "xPendedTicks is not equal to zero." );
|
||||
}
|
||||
taskEXIT_CRITICAL();
|
||||
|
||||
return xAlreadyYielded;
|
||||
return xAlreadyYielded;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,14 +41,14 @@ BaseType_t xPrepareTaskLists( TaskHandle_t * xTask );
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
TaskHandle_t xTaskToDelete;
|
||||
BaseType_t xTasksPrepared;
|
||||
TaskHandle_t xTaskToDelete;
|
||||
BaseType_t xTasksPrepared;
|
||||
|
||||
vSetGlobalVariables();
|
||||
xTasksPrepared = xPrepareTaskLists( &xTaskToDelete );
|
||||
vSetGlobalVariables();
|
||||
xTasksPrepared = xPrepareTaskLists( &xTaskToDelete );
|
||||
|
||||
if ( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
vTaskDelete( xTaskToDelete );
|
||||
}
|
||||
if( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
vTaskDelete( xTaskToDelete );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,50 +33,53 @@
|
|||
*/
|
||||
TaskHandle_t xUnconstrainedTCB( void )
|
||||
{
|
||||
TCB_t * pxTCB = pvPortMalloc(sizeof(TCB_t));
|
||||
uint8_t ucStaticAllocationFlag;
|
||||
TCB_t * pxTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
uint8_t ucStaticAllocationFlag;
|
||||
|
||||
if ( pxTCB == NULL )
|
||||
return NULL;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
__CPROVER_assume( pxTCB->uxPriority < configMAX_PRIORITIES );
|
||||
__CPROVER_assume( pxTCB->uxPriority < configMAX_PRIORITIES );
|
||||
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
pxTCB->pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) STACK_DEPTH ) * sizeof( StackType_t ) ) );
|
||||
if ( pxTCB->pxStack == NULL )
|
||||
{
|
||||
vPortFree( pxTCB );
|
||||
return NULL;
|
||||
}
|
||||
pxTCB->pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) STACK_DEPTH ) * sizeof( StackType_t ) ) );
|
||||
|
||||
__CPROVER_assume( ucStaticAllocationFlag <= tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
|
||||
__CPROVER_assume( ucStaticAllocationFlag >= tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB );
|
||||
pxTCB->ucStaticallyAllocated = ucStaticAllocationFlag;
|
||||
if( pxTCB->pxStack == NULL )
|
||||
{
|
||||
vPortFree( pxTCB );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return pxTCB;
|
||||
__CPROVER_assume( ucStaticAllocationFlag <= tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
|
||||
__CPROVER_assume( ucStaticAllocationFlag >= tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB );
|
||||
pxTCB->ucStaticallyAllocated = ucStaticAllocationFlag;
|
||||
|
||||
return pxTCB;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -85,7 +88,7 @@ TaskHandle_t xUnconstrainedTCB( void )
|
|||
*/
|
||||
void vSetGlobalVariables()
|
||||
{
|
||||
xSchedulerRunning = nondet_basetype();
|
||||
xSchedulerRunning = nondet_basetype();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -95,78 +98,84 @@ void vSetGlobalVariables()
|
|||
*/
|
||||
BaseType_t xPrepareTaskLists( TaskHandle_t * xTask )
|
||||
{
|
||||
TCB_t * pxTCB = NULL;
|
||||
TCB_t * pxTCB = NULL;
|
||||
|
||||
__CPROVER_assert_zero_allocation();
|
||||
__CPROVER_assert_zero_allocation();
|
||||
|
||||
prvInitialiseTaskLists();
|
||||
prvInitialiseTaskLists();
|
||||
|
||||
/*
|
||||
* The task handle passed to TaskDelete can be NULL. In that case, the
|
||||
* task to delete is the one in `pxCurrentTCB`, see the macro `prvGetTCBFromHandle`
|
||||
* in line 1165 (tasks.c) for reference. For that reason, we provide a similar
|
||||
* initialization for an arbitrary task `pxTCB` and `pxCurrentTCB`.
|
||||
*/
|
||||
/*
|
||||
* The task handle passed to TaskDelete can be NULL. In that case, the
|
||||
* task to delete is the one in `pxCurrentTCB`, see the macro `prvGetTCBFromHandle`
|
||||
* in line 1165 (tasks.c) for reference. For that reason, we provide a similar
|
||||
* initialization for an arbitrary task `pxTCB` and `pxCurrentTCB`.
|
||||
*/
|
||||
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
if ( pxTCB != NULL )
|
||||
{
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
TCB_t * pxOtherTCB;
|
||||
pxOtherTCB = xUnconstrainedTCB();
|
||||
/*
|
||||
* Nondeterministic insertion of another TCB in the same list
|
||||
* to guarantee coverage in line 1174 (tasks.c)
|
||||
*/
|
||||
if ( pxOtherTCB != NULL )
|
||||
{
|
||||
vListInsert( &xPendingReadyList, &( pxOtherTCB->xStateListItem ) );
|
||||
}
|
||||
}
|
||||
vListInsert( &xPendingReadyList, &( pxTCB->xStateListItem ) );
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
|
||||
/*
|
||||
* Nondeterministic insertion of an event list item to guarantee
|
||||
* coverage in lines 1180-1184 (tasks.c)
|
||||
*/
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
vListInsert( pxDelayedTaskList, &( pxTCB->xEventListItem ) );
|
||||
}
|
||||
}
|
||||
if( pxTCB != NULL )
|
||||
{
|
||||
if( nondet_bool() )
|
||||
{
|
||||
TCB_t * pxOtherTCB;
|
||||
pxOtherTCB = xUnconstrainedTCB();
|
||||
|
||||
/* Note that `*xTask = NULL` can happen here, but this is fine -- `pxCurrentTCB` will be used instead */
|
||||
*xTask = pxTCB;
|
||||
/*
|
||||
* Nondeterministic insertion of another TCB in the same list
|
||||
* to guarantee coverage in line 1174 (tasks.c)
|
||||
*/
|
||||
if( pxOtherTCB != NULL )
|
||||
{
|
||||
vListInsert( &xPendingReadyList, &( pxOtherTCB->xStateListItem ) );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* `pxCurrentTCB` must be initialized the same way as the previous task, but an
|
||||
* allocation failure cannot happen in this case (i.e., if the previous task is NULL)
|
||||
*/
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
if ( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
vListInsert( &xPendingReadyList, &( pxTCB->xStateListItem ) );
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
TCB_t * pxOtherTCB;
|
||||
pxOtherTCB = xUnconstrainedTCB();
|
||||
if ( pxOtherTCB != NULL )
|
||||
{
|
||||
vListInsert( &pxReadyTasksLists[ pxOtherTCB->uxPriority ], &( pxOtherTCB->xStateListItem ) );
|
||||
}
|
||||
}
|
||||
vListInsert( &pxReadyTasksLists[ pxCurrentTCB->uxPriority ], &( pxCurrentTCB->xStateListItem ) );
|
||||
/*
|
||||
* Nondeterministic insertion of an event list item to guarantee
|
||||
* coverage in lines 1180-1184 (tasks.c)
|
||||
*/
|
||||
if( nondet_bool() )
|
||||
{
|
||||
vListInsert( pxDelayedTaskList, &( pxTCB->xEventListItem ) );
|
||||
}
|
||||
}
|
||||
|
||||
/* Use of this macro ensures coverage on line 185 (list.c) */
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB , &pxReadyTasksLists[ pxCurrentTCB->uxPriority ] );
|
||||
/* Note that `*xTask = NULL` can happen here, but this is fine -- `pxCurrentTCB` will be used instead */
|
||||
*xTask = pxTCB;
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xEventListItem ) );
|
||||
}
|
||||
/*
|
||||
* `pxCurrentTCB` must be initialized the same way as the previous task, but an
|
||||
* allocation failure cannot happen in this case (i.e., if the previous task is NULL)
|
||||
*/
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
|
||||
return pdPASS;
|
||||
if( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
if( nondet_bool() )
|
||||
{
|
||||
TCB_t * pxOtherTCB;
|
||||
pxOtherTCB = xUnconstrainedTCB();
|
||||
|
||||
if( pxOtherTCB != NULL )
|
||||
{
|
||||
vListInsert( &pxReadyTasksLists[ pxOtherTCB->uxPriority ], &( pxOtherTCB->xStateListItem ) );
|
||||
}
|
||||
}
|
||||
|
||||
vListInsert( &pxReadyTasksLists[ pxCurrentTCB->uxPriority ], &( pxCurrentTCB->xStateListItem ) );
|
||||
|
||||
/* Use of this macro ensures coverage on line 185 (list.c) */
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &pxReadyTasksLists[ pxCurrentTCB->uxPriority ] );
|
||||
|
||||
if( nondet_bool() )
|
||||
{
|
||||
vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xEventListItem ) );
|
||||
}
|
||||
|
||||
return pdPASS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,15 +40,15 @@ BaseType_t xPrepareCurrentTCB( void );
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
TaskHandle_t xTask;
|
||||
BaseType_t xTasksPrepared;
|
||||
TaskHandle_t xTask;
|
||||
BaseType_t xTasksPrepared;
|
||||
|
||||
xTasksPrepared = xPrepareCurrentTCB();
|
||||
xTasksPrepared = xPrepareCurrentTCB();
|
||||
|
||||
if ( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
xTask = xTaskGetCurrentTaskHandle();
|
||||
if( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
xTask = xTaskGetCurrentTaskHandle();
|
||||
|
||||
__CPROVER_assert( xTask != NULL , "Current task handle is NULL!");
|
||||
}
|
||||
__CPROVER_assert( xTask != NULL, "Current task handle is NULL!" );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,12 +33,14 @@
|
|||
*/
|
||||
TaskHandle_t xUnconstrainedTCB( void )
|
||||
{
|
||||
TCB_t * pxTCB = pvPortMalloc(sizeof(TCB_t));
|
||||
TCB_t * pxTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
|
||||
if ( pxTCB == NULL )
|
||||
return NULL;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return pxTCB;
|
||||
return pxTCB;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -46,13 +48,14 @@ TaskHandle_t xUnconstrainedTCB( void )
|
|||
*/
|
||||
BaseType_t xPrepareCurrentTCB( void )
|
||||
{
|
||||
__CPROVER_assert_zero_allocation();
|
||||
__CPROVER_assert_zero_allocation();
|
||||
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
if ( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
|
||||
return pdPASS;
|
||||
if( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
return pdPASS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,9 +40,9 @@ void vSetGlobalVariables( void );
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
BaseType_t xResult;
|
||||
BaseType_t xResult;
|
||||
|
||||
vSetGlobalVariables();
|
||||
vSetGlobalVariables();
|
||||
|
||||
xResult = xTaskGetSchedulerState();
|
||||
xResult = xTaskGetSchedulerState();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,6 @@
|
|||
*/
|
||||
void vSetGlobalVariables( void )
|
||||
{
|
||||
xSchedulerRunning = nondet_basetype();
|
||||
uxSchedulerSuspended = nondet_ubasetype();
|
||||
xSchedulerRunning = nondet_basetype();
|
||||
uxSchedulerSuspended = nondet_ubasetype();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,10 +40,10 @@ void vPrepareTask( TaskHandle_t * xTask );
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
TaskHandle_t xTask;
|
||||
UBaseType_t uxTaskNumber;
|
||||
TaskHandle_t xTask;
|
||||
UBaseType_t uxTaskNumber;
|
||||
|
||||
vPrepareTask( &xTask );
|
||||
vPrepareTask( &xTask );
|
||||
|
||||
uxTaskNumber = uxTaskGetTaskNumber( xTask );
|
||||
uxTaskNumber = uxTaskGetTaskNumber( xTask );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,12 +33,14 @@
|
|||
*/
|
||||
TaskHandle_t xUnconstrainedTCB( void )
|
||||
{
|
||||
TCB_t * pxTCB = pvPortMalloc(sizeof(TCB_t));
|
||||
TCB_t * pxTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
|
||||
if ( pxTCB == NULL )
|
||||
return NULL;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return pxTCB;
|
||||
return pxTCB;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -47,7 +49,7 @@ TaskHandle_t xUnconstrainedTCB( void )
|
|||
*/
|
||||
void vPrepareTask( TaskHandle_t * xTask )
|
||||
{
|
||||
__CPROVER_assert_zero_allocation();
|
||||
__CPROVER_assert_zero_allocation();
|
||||
|
||||
*xTask = xUnconstrainedTCB();
|
||||
*xTask = xUnconstrainedTCB();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
void harness()
|
||||
{
|
||||
TickType_t xTickCount;
|
||||
TickType_t xTickCount;
|
||||
|
||||
xTickCount = xTaskGetTickCount();
|
||||
xTickCount = xTaskGetTickCount();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,13 +41,13 @@ BaseType_t xPrepareTaskLists( void );
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
BaseType_t xTasksPrepared;
|
||||
BaseType_t xTasksPrepared;
|
||||
|
||||
vSetGlobalVariables();
|
||||
xTasksPrepared = xPrepareTaskLists();
|
||||
vSetGlobalVariables();
|
||||
xTasksPrepared = xPrepareTaskLists();
|
||||
|
||||
if ( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
xTaskIncrementTick();
|
||||
}
|
||||
if( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
xTaskIncrementTick();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,37 +33,40 @@
|
|||
*/
|
||||
TaskHandle_t xUnconstrainedTCB( void )
|
||||
{
|
||||
TCB_t * pxTCB = pvPortMalloc(sizeof(TCB_t));
|
||||
TCB_t * pxTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
|
||||
if ( pxTCB == NULL )
|
||||
return NULL;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
__CPROVER_assume( pxTCB->uxPriority < configMAX_PRIORITIES );
|
||||
__CPROVER_assume( pxTCB->uxPriority < configMAX_PRIORITIES );
|
||||
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
return pxTCB;
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
return pxTCB;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -72,10 +75,10 @@ TaskHandle_t xUnconstrainedTCB( void )
|
|||
*/
|
||||
void vSetGlobalVariables()
|
||||
{
|
||||
xPendedTicks = nondet_ubasetype();
|
||||
uxSchedulerSuspended = nondet_ubasetype();
|
||||
xYieldPending = nondet_basetype();
|
||||
xTickCount = nondet_ticktype();
|
||||
xPendedTicks = nondet_ubasetype();
|
||||
uxSchedulerSuspended = nondet_ubasetype();
|
||||
xYieldPending = nondet_basetype();
|
||||
xTickCount = nondet_ticktype();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -85,42 +88,48 @@ void vSetGlobalVariables()
|
|||
*/
|
||||
BaseType_t xPrepareTaskLists( void )
|
||||
{
|
||||
TCB_t * pxTCB = NULL;
|
||||
TCB_t * pxTCB = NULL;
|
||||
|
||||
__CPROVER_assert_zero_allocation();
|
||||
__CPROVER_assert_zero_allocation();
|
||||
|
||||
prvInitialiseTaskLists();
|
||||
prvInitialiseTaskLists();
|
||||
|
||||
/* Needed for coverage: This task will be moved to a ready list */
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
if ( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xStateListItem ) );
|
||||
/* Needed for coverage: This task will be moved to a ready list */
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
|
||||
/* Needed for coverage. */
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxTCB , pxOverflowDelayedTaskList );
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
if ( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
vListInsert( &xPendingReadyList, &( pxTCB->xStateListItem ) );
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xStateListItem ) );
|
||||
|
||||
/* Needed for coverage: A nondeterministic choice */
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xEventListItem ) );
|
||||
}
|
||||
/* Needed for coverage. */
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxOverflowDelayedTaskList );
|
||||
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
if ( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
vListInsert( &pxReadyTasksLists[ pxCurrentTCB->uxPriority ], &( pxCurrentTCB->xStateListItem ) );
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
|
||||
return pdPASS;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
vListInsert( &xPendingReadyList, &( pxTCB->xStateListItem ) );
|
||||
|
||||
/* Needed for coverage: A nondeterministic choice */
|
||||
if( nondet_bool() )
|
||||
{
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xEventListItem ) );
|
||||
}
|
||||
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
|
||||
if( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
vListInsert( &pxReadyTasksLists[ pxCurrentTCB->uxPriority ], &( pxCurrentTCB->xStateListItem ) );
|
||||
|
||||
return pdPASS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,17 +41,17 @@ BaseType_t xPrepareTaskLists( TaskHandle_t * xTask );
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
TaskHandle_t xTask;
|
||||
UBaseType_t uxNewPriority;
|
||||
BaseType_t xTasksPrepared;
|
||||
TaskHandle_t xTask;
|
||||
UBaseType_t uxNewPriority;
|
||||
BaseType_t xTasksPrepared;
|
||||
|
||||
__CPROVER_assume( uxNewPriority < configMAX_PRIORITIES );
|
||||
__CPROVER_assume( uxNewPriority < configMAX_PRIORITIES );
|
||||
|
||||
xTasksPrepared = xPrepareTaskLists( &xTask );
|
||||
xTasksPrepared = xPrepareTaskLists( &xTask );
|
||||
|
||||
/* Check that this second invocation of xPrepareTaskLists is needed. */
|
||||
if ( xPrepareTaskLists( &xTask ) != pdFAIL )
|
||||
{
|
||||
vTaskPrioritySet( xTask, uxNewPriority );
|
||||
}
|
||||
/* Check that this second invocation of xPrepareTaskLists is needed. */
|
||||
if( xPrepareTaskLists( &xTask ) != pdFAIL )
|
||||
{
|
||||
vTaskPrioritySet( xTask, uxNewPriority );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,39 +33,41 @@
|
|||
*/
|
||||
TaskHandle_t xUnconstrainedTCB( void )
|
||||
{
|
||||
TCB_t * pxTCB = pvPortMalloc(sizeof(TCB_t));
|
||||
uint8_t ucStaticAllocationFlag;
|
||||
TCB_t * pxTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
uint8_t ucStaticAllocationFlag;
|
||||
|
||||
if ( pxTCB == NULL )
|
||||
return NULL;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
__CPROVER_assume( pxTCB->uxPriority < configMAX_PRIORITIES );
|
||||
__CPROVER_assume( pxTCB->uxPriority < configMAX_PRIORITIES );
|
||||
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
return pxTCB;
|
||||
return pxTCB;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -75,51 +77,53 @@ TaskHandle_t xUnconstrainedTCB( void )
|
|||
*/
|
||||
BaseType_t xPrepareTaskLists( TaskHandle_t * xTask )
|
||||
{
|
||||
TCB_t * pxTCB = NULL;
|
||||
TCB_t * pxTCB = NULL;
|
||||
|
||||
__CPROVER_assert_zero_allocation();
|
||||
__CPROVER_assert_zero_allocation();
|
||||
|
||||
prvInitialiseTaskLists();
|
||||
prvInitialiseTaskLists();
|
||||
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
|
||||
/* Needed for coverage: nondet insertion of task. */
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
TCB_t * pxOtherTCB;
|
||||
pxOtherTCB = xUnconstrainedTCB();
|
||||
if ( pxOtherTCB != NULL )
|
||||
{
|
||||
vListInsert( &pxReadyTasksLists[ pxOtherTCB->uxPriority ], &( pxOtherTCB->xStateListItem ) );
|
||||
}
|
||||
}
|
||||
/* Needed for coverage: nondet insertion of task. */
|
||||
if( nondet_bool() )
|
||||
{
|
||||
TCB_t * pxOtherTCB;
|
||||
pxOtherTCB = xUnconstrainedTCB();
|
||||
|
||||
if ( pxTCB != NULL )
|
||||
{
|
||||
/* Needed for coverage: nondeterministic insertion of task */
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
vListInsert( &pxReadyTasksLists[ pxTCB->uxPriority ], &( pxTCB->xStateListItem ) );
|
||||
}
|
||||
}
|
||||
if( pxOtherTCB != NULL )
|
||||
{
|
||||
vListInsert( &pxReadyTasksLists[ pxOtherTCB->uxPriority ], &( pxOtherTCB->xStateListItem ) );
|
||||
}
|
||||
}
|
||||
|
||||
/* Note that `*xTask = NULL` can happen here, but this is fine -- `pxCurrentTCB` will be used instead */
|
||||
*xTask = pxTCB;
|
||||
if( pxTCB != NULL )
|
||||
{
|
||||
/* Needed for coverage: nondeterministic insertion of task */
|
||||
if( nondet_bool() )
|
||||
{
|
||||
vListInsert( &pxReadyTasksLists[ pxTCB->uxPriority ], &( pxTCB->xStateListItem ) );
|
||||
}
|
||||
}
|
||||
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
if ( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
/* Note that `*xTask = NULL` can happen here, but this is fine -- `pxCurrentTCB` will be used instead */
|
||||
*xTask = pxTCB;
|
||||
|
||||
/* Needed for coverage: nondeterministic insertion of task */
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
vListInsert( &pxReadyTasksLists[ pxCurrentTCB->uxPriority ], &( pxCurrentTCB->xStateListItem ) );
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
|
||||
/* Needed for coverage. */
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB , &pxReadyTasksLists[ pxCurrentTCB->uxPriority ] );
|
||||
}
|
||||
if( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
return pdPASS;
|
||||
/* Needed for coverage: nondeterministic insertion of task */
|
||||
if( nondet_bool() )
|
||||
{
|
||||
vListInsert( &pxReadyTasksLists[ pxCurrentTCB->uxPriority ], &( pxCurrentTCB->xStateListItem ) );
|
||||
|
||||
/* Needed for coverage. */
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &pxReadyTasksLists[ pxCurrentTCB->uxPriority ] );
|
||||
}
|
||||
|
||||
return pdPASS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,13 +41,13 @@ BaseType_t xPrepareTaskLists( void );
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
BaseType_t xTasksPrepared;
|
||||
BaseType_t xTasksPrepared;
|
||||
|
||||
vSetGlobalVariables();
|
||||
xTasksPrepared = xPrepareTaskLists();
|
||||
vSetGlobalVariables();
|
||||
xTasksPrepared = xPrepareTaskLists();
|
||||
|
||||
if ( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
xTaskResumeAll();
|
||||
}
|
||||
if( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
xTaskResumeAll();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,52 +33,56 @@
|
|||
*/
|
||||
TaskHandle_t xUnconstrainedTCB( void )
|
||||
{
|
||||
TCB_t * pxTCB = pvPortMalloc(sizeof(TCB_t));
|
||||
TCB_t * pxTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
|
||||
if ( pxTCB == NULL )
|
||||
return NULL;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
__CPROVER_assume( pxTCB->uxPriority < configMAX_PRIORITIES );
|
||||
__CPROVER_assume( pxTCB->uxPriority < configMAX_PRIORITIES );
|
||||
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
return pxTCB;
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
return pxTCB;
|
||||
}
|
||||
|
||||
/*
|
||||
* We set xPendedTicks since __CPROVER_assume does not work
|
||||
* well with statically initialised variables
|
||||
*/
|
||||
void vSetGlobalVariables( void ) {
|
||||
UBaseType_t uxNonZeroValue;
|
||||
void vSetGlobalVariables( void )
|
||||
{
|
||||
UBaseType_t uxNonZeroValue;
|
||||
|
||||
__CPROVER_assume( uxNonZeroValue != 0 );
|
||||
__CPROVER_assume( uxNonZeroValue != 0 );
|
||||
|
||||
uxSchedulerSuspended = uxNonZeroValue;
|
||||
xPendedTicks = nondet_bool() ? PENDED_TICKS : 0;
|
||||
uxCurrentNumberOfTasks = nondet_ubasetype();
|
||||
xTickCount = nondet_ticktype();
|
||||
uxSchedulerSuspended = uxNonZeroValue;
|
||||
xPendedTicks = nondet_bool() ? PENDED_TICKS : 0;
|
||||
uxCurrentNumberOfTasks = nondet_ubasetype();
|
||||
xTickCount = nondet_ticktype();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -88,51 +92,59 @@ void vSetGlobalVariables( void ) {
|
|||
*/
|
||||
BaseType_t xPrepareTaskLists( void )
|
||||
{
|
||||
TCB_t * pxTCB = NULL;
|
||||
TCB_t * pxTCB = NULL;
|
||||
|
||||
__CPROVER_assert_zero_allocation();
|
||||
__CPROVER_assert_zero_allocation();
|
||||
|
||||
prvInitialiseTaskLists();
|
||||
prvInitialiseTaskLists();
|
||||
|
||||
/* This task will be moved to a ready list, granting coverage
|
||||
* on lines 2780-2786 (tasks.c) */
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
if ( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xStateListItem ) );
|
||||
/* This task will be moved to a ready list, granting coverage
|
||||
* on lines 2780-2786 (tasks.c) */
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
|
||||
/* Use of this macro ensures coverage on line 185 (list.c) */
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxTCB , pxOverflowDelayedTaskList );
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
if ( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
vListInsert( &xPendingReadyList, &( pxTCB->xStateListItem ) );
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xEventListItem ) );
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xStateListItem ) );
|
||||
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
if ( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xStateListItem ) );
|
||||
/* Use of this macro ensures coverage on line 185 (list.c) */
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxOverflowDelayedTaskList );
|
||||
|
||||
/* This nondeterministic choice ensure coverage in line 2746 (tasks.c) */
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xEventListItem ) );
|
||||
}
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
if ( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
vListInsert( &pxReadyTasksLists[ pxCurrentTCB->uxPriority ], &( pxCurrentTCB->xStateListItem ) );
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
return pdPASS;
|
||||
vListInsert( &xPendingReadyList, &( pxTCB->xStateListItem ) );
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xEventListItem ) );
|
||||
|
||||
pxTCB = xUnconstrainedTCB();
|
||||
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xStateListItem ) );
|
||||
|
||||
/* This nondeterministic choice ensure coverage in line 2746 (tasks.c) */
|
||||
if( nondet_bool() )
|
||||
{
|
||||
vListInsert( pxOverflowDelayedTaskList, &( pxTCB->xEventListItem ) );
|
||||
}
|
||||
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
|
||||
if( pxCurrentTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
vListInsert( &pxReadyTasksLists[ pxCurrentTCB->uxPriority ], &( pxCurrentTCB->xStateListItem ) );
|
||||
|
||||
return pdPASS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
TimeOut_t xTime;
|
||||
TimeOut_t xTime;
|
||||
|
||||
vTaskSetTimeOutState( &xTime );
|
||||
vTaskSetTimeOutState( &xTime );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,12 +40,12 @@ BaseType_t xPrepareTasks( void );
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
BaseType_t xTasksPrepared;
|
||||
BaseType_t xTasksPrepared;
|
||||
|
||||
xTasksPrepared = xPrepareTasks();
|
||||
xTasksPrepared = xPrepareTasks();
|
||||
|
||||
if ( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
vTaskStartScheduler();
|
||||
}
|
||||
if( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
vTaskStartScheduler();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,18 +35,20 @@
|
|||
*/
|
||||
TaskHandle_t xUnconstrainedTCB( void )
|
||||
{
|
||||
TCB_t * pxTCB = pvPortMalloc(sizeof(TCB_t));
|
||||
TCB_t * pxTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
|
||||
if ( pxTCB == NULL )
|
||||
return NULL;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return pxTCB;
|
||||
return pxTCB;
|
||||
}
|
||||
|
||||
StaticTask_t *pxIdleTaskTCB;
|
||||
StaticTask_t *pxTimerTaskTCB;
|
||||
StackType_t *pxIdleTaskStack;
|
||||
StackType_t *pxTimerTaskStack;
|
||||
StaticTask_t * pxIdleTaskTCB;
|
||||
StaticTask_t * pxTimerTaskTCB;
|
||||
StackType_t * pxIdleTaskStack;
|
||||
StackType_t * pxTimerTaskStack;
|
||||
|
||||
/*
|
||||
* `pxCurrentTCB` allocation is allowed to fail. The global variables above
|
||||
|
|
@ -56,37 +58,41 @@ StackType_t *pxTimerTaskStack;
|
|||
*/
|
||||
BaseType_t xPrepareTasks( void )
|
||||
{
|
||||
__CPROVER_assert_zero_allocation();
|
||||
__CPROVER_assert_zero_allocation();
|
||||
|
||||
prvInitialiseTaskLists();
|
||||
prvInitialiseTaskLists();
|
||||
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
pxCurrentTCB = xUnconstrainedTCB();
|
||||
|
||||
pxIdleTaskTCB = pvPortMalloc(sizeof(StaticTask_t));
|
||||
if (pxIdleTaskTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
pxIdleTaskTCB = pvPortMalloc( sizeof( StaticTask_t ) );
|
||||
|
||||
pxIdleTaskStack = pvPortMalloc( sizeof(StackType_t) * configMINIMAL_STACK_SIZE );
|
||||
if ( pxIdleTaskStack == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
if( pxIdleTaskTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
pxTimerTaskTCB = pvPortMalloc( sizeof(StaticTask_t) );
|
||||
if ( pxTimerTaskTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
pxIdleTaskStack = pvPortMalloc( sizeof( StackType_t ) * configMINIMAL_STACK_SIZE );
|
||||
|
||||
pxTimerTaskStack = pvPortMalloc( sizeof(StackType_t) * configTIMER_TASK_STACK_DEPTH );
|
||||
if ( pxTimerTaskStack == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
if( pxIdleTaskStack == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
return pdPASS;
|
||||
pxTimerTaskTCB = pvPortMalloc( sizeof( StaticTask_t ) );
|
||||
|
||||
if( pxTimerTaskTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
pxTimerTaskStack = pvPortMalloc( sizeof( StackType_t ) * configTIMER_TASK_STACK_DEPTH );
|
||||
|
||||
if( pxTimerTaskStack == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
return pdPASS;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -96,17 +102,19 @@ void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
|
|||
StackType_t ** ppxIdleTaskStackBuffer,
|
||||
uint32_t * pulIdleTaskStackSize )
|
||||
{
|
||||
*ppxIdleTaskTCBBuffer = pxIdleTaskTCB;
|
||||
*ppxIdleTaskStackBuffer = pxIdleTaskStack;
|
||||
*ppxIdleTaskTCBBuffer = pxIdleTaskTCB;
|
||||
*ppxIdleTaskStackBuffer = pxIdleTaskStack;
|
||||
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
|
||||
}
|
||||
|
||||
/*
|
||||
* The buffers used here have been successfully allocated before (global variables)
|
||||
*/
|
||||
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize )
|
||||
void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,
|
||||
StackType_t ** ppxTimerTaskStackBuffer,
|
||||
uint32_t * pulTimerTaskStackSize )
|
||||
{
|
||||
*ppxTimerTaskTCBBuffer = pxTimerTaskTCB;
|
||||
*ppxTimerTaskStackBuffer = pxTimerTaskStack;
|
||||
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
|
||||
*ppxTimerTaskTCBBuffer = pxTimerTaskTCB;
|
||||
*ppxTimerTaskStackBuffer = pxTimerTaskStack;
|
||||
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,5 +38,5 @@
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
vTaskSuspendAll();
|
||||
vTaskSuspendAll();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,13 +42,13 @@ BaseType_t xPrepareTaskLists( void );
|
|||
*/
|
||||
void harness()
|
||||
{
|
||||
BaseType_t xTasksPrepared;
|
||||
BaseType_t xTasksPrepared;
|
||||
|
||||
vSetGlobalVariables();
|
||||
xTasksPrepared = xPrepareTaskLists();
|
||||
vSetGlobalVariables();
|
||||
xTasksPrepared = xPrepareTaskLists();
|
||||
|
||||
if ( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
vTaskSwitchContext();
|
||||
}
|
||||
if( xTasksPrepared != pdFAIL )
|
||||
{
|
||||
vTaskSwitchContext();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,38 +33,41 @@
|
|||
*/
|
||||
TaskHandle_t xUnconstrainedTCB( UBaseType_t uxPriority )
|
||||
{
|
||||
TCB_t * pxTCB = pvPortMalloc(sizeof(TCB_t));
|
||||
TCB_t * pxTCB = pvPortMalloc( sizeof( TCB_t ) );
|
||||
|
||||
if ( pxTCB == NULL )
|
||||
return NULL;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* uxPriority is set to a specific priority */
|
||||
pxTCB->uxPriority = uxPriority;
|
||||
/* uxPriority is set to a specific priority */
|
||||
pxTCB->uxPriority = uxPriority;
|
||||
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xStateListItem ) );
|
||||
vListInitialiseItem( &( pxTCB->xEventListItem ) );
|
||||
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xStateListItem ), pxTCB );
|
||||
listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
if ( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
return pxTCB;
|
||||
if( nondet_bool() )
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );
|
||||
}
|
||||
else
|
||||
{
|
||||
listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), portMAX_DELAY );
|
||||
}
|
||||
|
||||
return pxTCB;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -73,7 +76,7 @@ TaskHandle_t xUnconstrainedTCB( UBaseType_t uxPriority )
|
|||
*/
|
||||
void vSetGlobalVariables( void )
|
||||
{
|
||||
uxSchedulerSuspended = nondet_ubasetype();
|
||||
uxSchedulerSuspended = nondet_ubasetype();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -82,22 +85,25 @@ void vSetGlobalVariables( void )
|
|||
*/
|
||||
BaseType_t xPrepareTaskLists( void )
|
||||
{
|
||||
TCB_t * pxTCB = NULL;
|
||||
TCB_t * pxTCB = NULL;
|
||||
|
||||
__CPROVER_assert_zero_allocation();
|
||||
__CPROVER_assert_zero_allocation();
|
||||
|
||||
prvInitialiseTaskLists();
|
||||
prvInitialiseTaskLists();
|
||||
|
||||
for ( int i = 0; i < configMAX_PRIORITIES; ++i )
|
||||
{
|
||||
pxTCB = xUnconstrainedTCB( i );
|
||||
if ( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
vListInsert( &pxReadyTasksLists[ pxTCB->uxPriority ], &( pxTCB->xStateListItem ) );
|
||||
}
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &pxReadyTasksLists[ configMAX_PRIORITIES - 1 ] );
|
||||
for( int i = 0; i < configMAX_PRIORITIES; ++i )
|
||||
{
|
||||
pxTCB = xUnconstrainedTCB( i );
|
||||
|
||||
return pdPASS;
|
||||
if( pxTCB == NULL )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
vListInsert( &pxReadyTasksLists[ pxTCB->uxPriority ], &( pxTCB->xStateListItem ) );
|
||||
}
|
||||
|
||||
listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &pxReadyTasksLists[ configMAX_PRIORITIES - 1 ] );
|
||||
|
||||
return pdPASS;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue