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:
alfred gedeon 2021-07-22 14:23:48 -07:00 committed by GitHub
parent dd80d615b5
commit ae92d8c6ee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
191 changed files with 17540 additions and 17102 deletions

View file

@ -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 );
}
}

View file

@ -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;
}

View file

@ -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 );
}

View file

@ -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;
}

View file

@ -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 );
}
}

View file

@ -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;
}

View file

@ -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 );
}
}

View file

@ -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;
}

View file

@ -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!" );
}
}

View file

@ -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;
}

View file

@ -40,9 +40,9 @@ void vSetGlobalVariables( void );
*/
void harness()
{
BaseType_t xResult;
BaseType_t xResult;
vSetGlobalVariables();
vSetGlobalVariables();
xResult = xTaskGetSchedulerState();
xResult = xTaskGetSchedulerState();
}

View file

@ -32,6 +32,6 @@
*/
void vSetGlobalVariables( void )
{
xSchedulerRunning = nondet_basetype();
uxSchedulerSuspended = nondet_ubasetype();
xSchedulerRunning = nondet_basetype();
uxSchedulerSuspended = nondet_ubasetype();
}

View file

@ -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 );
}

View file

@ -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();
}

View file

@ -34,7 +34,7 @@
void harness()
{
TickType_t xTickCount;
TickType_t xTickCount;
xTickCount = xTaskGetTickCount();
xTickCount = xTaskGetTickCount();
}

View file

@ -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();
}
}

View file

@ -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;
}

View file

@ -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 );
}
}

View file

@ -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;
}

View file

@ -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();
}
}

View file

@ -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;
}

View file

@ -38,7 +38,7 @@
*/
void harness()
{
TimeOut_t xTime;
TimeOut_t xTime;
vTaskSetTimeOutState( &xTime );
vTaskSetTimeOutState( &xTime );
}

View file

@ -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();
}
}

View file

@ -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;
}

View file

@ -38,5 +38,5 @@
*/
void harness()
{
vTaskSuspendAll();
vTaskSuspendAll();
}

View file

@ -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();
}
}

View file

@ -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;
}