mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-12-11 14:15:12 -05:00
Verified alignment properties of stack top pointer.
This commit is contained in:
parent
5260817972
commit
06b924d818
4 changed files with 295 additions and 238 deletions
30
tasks.c
30
tasks.c
|
|
@ -24,6 +24,14 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifdef VERIFAST
|
||||
/* Ghost header include must occur before any non-ghost includes or other
|
||||
* non-ghost code. Otherwise VeriFast will report an unspecific parse error.
|
||||
*/
|
||||
|
||||
//@ #include <bitops.gh>
|
||||
#endif /* VERIFAST */
|
||||
|
||||
|
||||
/* Standard includes. */
|
||||
#include <stdlib.h>
|
||||
|
|
@ -1371,6 +1379,8 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
pxNewTCB->pxStack = pxStack;
|
||||
//@ close xLIST_ITEM(&pxNewTCB->xStateListItem, _, _, _, _);
|
||||
//@ close xLIST_ITEM(&pxNewTCB->xEventListItem, _, _, _, _);
|
||||
//@ chars__limits((char*) pxNewTCB->pxStack);
|
||||
//@ assert( pxNewTCB->pxStack + (size_t) usStackDepth <= (StackType_t*) UINTPTR_MAX );
|
||||
//@ close uninit_TCB_p(pxNewTCB, ((size_t) usStackDepth) * sizeof(StackType_t));
|
||||
}
|
||||
else
|
||||
|
|
@ -1492,18 +1502,34 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
|||
#if ( portSTACK_GROWTH < 0 )
|
||||
{
|
||||
pxTopOfStack = &( pxNewTCB->pxStack[ ulStackDepth - ( uint32_t ) 1 ] );
|
||||
//@ StackType_t* gOldTop = pxTopOfStack;
|
||||
|
||||
// Axiomatize that pointers on RP2040 are 32bit
|
||||
//@ ptr_range<uint32_t>(pxTopOfStack);
|
||||
|
||||
// TODO: How can we prove this?
|
||||
// Assume that no underflow occurs
|
||||
//@ assume( 0 <= (( (uint32_t) pxTopOfStack) & ~(7)) );
|
||||
///@ assume( 0 <= (( (uint32_t) pxTopOfStack) & ~(7)) );
|
||||
|
||||
/* Convert top and mask to VeriFast bitvectors and establish
|
||||
* relation to C variables.
|
||||
* Note that on RP2040:
|
||||
* - `portPOINTER_SIZE_TYPE` == `uint32_t`
|
||||
* - `portBYTE_ALIGNMENT_MASK` == `0x0007`
|
||||
*/
|
||||
//@ uint32_t gMask = 0x0007;
|
||||
//@ Z gzTop = Z_of_uint32((int) pxTopOfStack);
|
||||
//@ Z gzMask = Z_of_uint32((int) gMask);
|
||||
//@ bitnot_def(gMask, gzMask);
|
||||
//@ bitand_def((int) pxTopOfStack, gzTop, ~gMask, Z_not(gzMask));
|
||||
|
||||
// TODO: How can we prove this?
|
||||
// Assume that no overflow occurs.
|
||||
//@ assume( (((uint32_t) pxTopOfStack) & ~7) <= UINTPTR_MAX);
|
||||
///@ assume( (((uint32_t) pxTopOfStack) & ~7) <= UINTPTR_MAX);
|
||||
pxTopOfStack = ( StackType_t * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) & ( ~( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) ) ); /*lint !e923 !e9033 !e9078 MISRA exception. Avoiding casts between pointers and integers is not practical. Size differences accounted for using portPOINTER_SIZE_TYPE type. Checked by assert(). */
|
||||
//@ assert( pxTopOfStack <= gOldTop );
|
||||
//@ assert( gOldTop - 7 <= pxTopOfStack );
|
||||
//@ assert(false);
|
||||
|
||||
/* Check the alignment of the calculated top of stack is correct. */
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,14 @@
|
|||
*/
|
||||
|
||||
|
||||
/* Ghost header include must occur before any non-ghost includes or other
|
||||
* non-ghost code. Otherwise VeriFast will report an unspecific parse error.
|
||||
*/
|
||||
|
||||
//@ #include <bitops.gh>
|
||||
|
||||
|
||||
|
||||
/* Standard includes. */
|
||||
// # 1 "/Users/reitobia/programs/verifast-21.04-83-gfae956f7/bin/stdlib.h" 1
|
||||
|
||||
|
|
@ -134,7 +142,7 @@ long long llabs(long long x);
|
|||
//@ requires LLONG_MIN < x;
|
||||
//@ ensures result == abs(x);
|
||||
//@ terminates;
|
||||
// # 30 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 38 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 1 "/Users/reitobia/programs/verifast-21.04-83-gfae956f7/bin/string.h" 1
|
||||
|
||||
|
||||
|
|
@ -203,7 +211,7 @@ void* memset(void *array, char value, size_t size);
|
|||
char *strdup(char *string);
|
||||
//@ requires [?f]string(string, ?cs);
|
||||
//@ ensures [f]string(string, cs) &*& result == 0 ? true : string(result, cs) &*& malloc_block_chars(result, length(cs) + 1);
|
||||
// # 31 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 39 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
|
||||
/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining
|
||||
* all the API functions to use the MPU wrappers. That should only be done when
|
||||
|
|
@ -4994,7 +5002,7 @@ typedef StaticStreamBuffer_t StaticMessageBuffer_t;
|
|||
|
||||
|
||||
/* *INDENT-ON* */
|
||||
// # 39 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 47 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 1 "/Users/reitobia/repos2/FreeRTOS-Kernel/include/task.h" 1
|
||||
/*
|
||||
* FreeRTOS SMP Kernel V202110.00
|
||||
|
|
@ -8513,7 +8521,7 @@ void vTaskYieldWithinAPI( void );
|
|||
|
||||
|
||||
/* *INDENT-ON* */
|
||||
// # 40 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 48 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 1 "/Users/reitobia/repos2/FreeRTOS-Kernel/include/timers.h" 1
|
||||
/*
|
||||
* FreeRTOS SMP Kernel V202110.00
|
||||
|
|
@ -9854,7 +9862,7 @@ BaseType_t xTimerGenericCommandFromISR( TimerHandle_t xTimer,
|
|||
|
||||
|
||||
/* *INDENT-ON* */
|
||||
// # 41 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 49 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 1 "/Users/reitobia/repos2/FreeRTOS-Kernel/include/stack_macros.h" 1
|
||||
/*
|
||||
* FreeRTOS SMP Kernel V202110.00
|
||||
|
|
@ -9915,7 +9923,7 @@ BaseType_t xTimerGenericCommandFromISR( TimerHandle_t xTimer,
|
|||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Remove stack overflow macro if not being used. */
|
||||
// # 42 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 50 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
|
||||
/* Verifast proof setup
|
||||
*
|
||||
|
|
@ -9940,7 +9948,7 @@ BaseType_t xTimerGenericCommandFromISR( TimerHandle_t xTimer,
|
|||
* unsigned types. While that's safe in practice, it is not
|
||||
* type safe. Hence we define
|
||||
*/
|
||||
// # 50 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 58 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 1 "/Users/reitobia/repos2/FreeRTOS-Kernel/verification/verifast/proof/stack_predicates.h" 1
|
||||
|
||||
|
||||
|
|
@ -9995,7 +10003,7 @@ ensures // free cells minus top cell
|
|||
open integers_(pxStack + (freeCells-1), _, _, _, _);
|
||||
}
|
||||
@*/
|
||||
// # 51 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 59 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 1 "/Users/reitobia/repos2/FreeRTOS-Kernel/verification/verifast/proof/task_predicates.h" 1
|
||||
|
||||
|
||||
|
|
@ -10047,6 +10055,7 @@ predicate uninit_TCB_p(TCB_t * tcb, int stackSize) =
|
|||
tcb->uxPriority |-> _ &*&
|
||||
|
||||
tcb->pxStack |-> ?stackPtr &*&
|
||||
(char*) stackPtr + stackSize <= (char*) UINTPTR_MAX &*&
|
||||
chars_((char*) stackPtr, stackSize, _) &*&
|
||||
malloc_block_chars((char*) stackPtr, stackSize) &*&
|
||||
|
||||
|
|
@ -10072,7 +10081,7 @@ predicate uninit_TCB_p(TCB_t * tcb, int stackSize) =
|
|||
|
||||
tcb->ucDelayAborted |-> _;
|
||||
@*/
|
||||
// # 52 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 60 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 1 "/Users/reitobia/repos2/FreeRTOS-Kernel/verification/verifast/proof_setup/verifast_RP2040_axioms.h" 1
|
||||
|
||||
|
||||
|
|
@ -10090,7 +10099,7 @@ lemma void ptr_range<t>(t* ptr);
|
|||
requires true;
|
||||
ensures 0 <= (int) ptr &*& (int) ptr <= 4294967295;
|
||||
@*/
|
||||
// # 53 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 61 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 1 "/Users/reitobia/repos2/FreeRTOS-Kernel/verification/verifast/proof/verifast_prelude_extended.h" 1
|
||||
|
||||
|
||||
|
|
@ -10143,7 +10152,7 @@ lemma_auto void integers___to_integers_(void *p);
|
|||
requires [?f]integers__(p, ?size, ?signed_, ?count, _);
|
||||
ensures [f]integers_(p, size, signed_, count, _);
|
||||
@*/
|
||||
// # 54 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 62 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 1 "/Users/reitobia/repos2/FreeRTOS-Kernel/verification/verifast/proof_setup/verifast_asm.h" 1
|
||||
|
||||
|
||||
|
|
@ -10169,7 +10178,7 @@ bool assert_fct(bool b)
|
|||
* VeriFast does not support embedding block statements that consist of
|
||||
* multiple elemts in expression contexts, e.g., `({e1; e2})`.
|
||||
*/
|
||||
// # 55 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 63 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
|
||||
// # 1 "/Users/reitobia/repos2/FreeRTOS-Kernel/verification/verifast/proof/snippets/rp2040_port_c_snippets.c" 1
|
||||
/*
|
||||
|
|
@ -10313,7 +10322,7 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
|
|||
//@ close stack_p(pxStack, ulStackDepth, pxTopOfStack, ulStackDepth-16);
|
||||
return pxTopOfStack;
|
||||
}
|
||||
// # 57 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
// # 65 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c" 2
|
||||
|
||||
|
||||
/* Lint e9021, e961 and e750 are suppressed as a MISRA exception justified
|
||||
|
|
@ -10324,7 +10333,7 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
|
|||
|
||||
/* Set configUSE_STATS_FORMATTING_FUNCTIONS to 2 to include the stats formatting
|
||||
* functions but without including stdio.h here. */
|
||||
// # 85 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 93 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/* Values that can be assigned to the ucNotifyState member of the TCB. */
|
||||
|
||||
|
||||
|
|
@ -10381,18 +10390,18 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
|
|||
|
||||
/* uxTopReadyPriority holds the priority of the highest priority ready
|
||||
* state task. */
|
||||
// # 149 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 157 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Define away taskRESET_READY_PRIORITY() and portRESET_READY_PRIORITY() as
|
||||
* they are only required when a port optimised method of task selection is
|
||||
* being used. */
|
||||
// # 183 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 191 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* pxDelayedTaskList and pxOverflowDelayedTaskList are switched when the tick
|
||||
* count overflows. */
|
||||
// # 201 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 209 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
|
|
@ -10447,7 +10456,7 @@ typedef BaseType_t TaskRunning_t;
|
|||
typedef struct tskTaskControlBlock /* The old naming convention is used to prevent breaking kernel aware debuggers. */
|
||||
{
|
||||
volatile StackType_t * pxTopOfStack; /*< Points to the location of the last item placed on the tasks stack. THIS MUST BE THE FIRST MEMBER OF THE TCB STRUCT. */
|
||||
// # 264 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 272 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
ListItem_t xStateListItem; /*< The list that the state list item of a task is reference from denotes the state of that task (Ready, Blocked, Suspended ). */
|
||||
ListItem_t xEventListItem; /*< Used to reference a task from an event list. */
|
||||
UBaseType_t uxPriority; /*< The priority of the task. 0 is the lowest priority. */
|
||||
|
|
@ -10455,7 +10464,7 @@ typedef struct tskTaskControlBlock /* The old naming convention is used to preve
|
|||
volatile TaskRunning_t xTaskRunState; /*< Used to identify the core the task is running on, if any. */
|
||||
BaseType_t xIsIdle; /*< Used to identify the idle tasks. */
|
||||
char pcTaskName[ 16 ]; /*< Descriptive name given to the task when created. Facilitates debugging only. */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||
// # 281 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 289 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
UBaseType_t uxCriticalNesting; /*< Holds the critical section nesting depth for ports that do not maintain their own count in the port layer. */
|
||||
|
||||
|
||||
|
|
@ -10475,7 +10484,7 @@ typedef struct tskTaskControlBlock /* The old naming convention is used to preve
|
|||
|
||||
|
||||
void * pvThreadLocalStoragePointers[ 5 ];
|
||||
// # 321 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 329 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
volatile uint32_t ulNotifiedValue[ 1 ];
|
||||
volatile uint8_t ucNotifyState[ 1 ];
|
||||
|
||||
|
|
@ -10566,7 +10575,7 @@ const volatile UBaseType_t uxTopUsedPriority = 32 - 1U;
|
|||
* must not be done by an ISR. Reads must be protected by either lock and may be done by
|
||||
* either an ISR or a task. */
|
||||
static volatile UBaseType_t uxSchedulerSuspended = ( UBaseType_t ) ( ( char ) 0 );
|
||||
// # 421 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 429 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*lint -restore */
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
|
@ -10719,7 +10728,7 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
|||
* will exit the Blocked state.
|
||||
*/
|
||||
static void prvResetNextTaskUnblockTime( void ) ;
|
||||
// # 585 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 593 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*
|
||||
* Called after a Task_t structure has been allocated either statically or
|
||||
* dynamically to fill in the structure's members.
|
||||
|
|
@ -10751,9 +10760,9 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) ;
|
|||
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 635 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 643 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 718 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 726 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvYieldCore( BaseType_t xCoreID )
|
||||
|
|
@ -10795,8 +10804,8 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
|
||||
/* THIS FUNCTION MUST BE CALLED FROM A CRITICAL SECTION */
|
||||
|
||||
(__builtin_expect(!(xTaskGetCurrentTaskHandle()->uxCriticalNesting > 0U), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 759, "xTaskGetCurrentTaskHandle()->uxCriticalNesting > 0U") : (void)0);
|
||||
// # 772 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
(__builtin_expect(!(xTaskGetCurrentTaskHandle()->uxCriticalNesting > 0U), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 767, "xTaskGetCurrentTaskHandle()->uxCriticalNesting > 0U") : (void)0);
|
||||
// # 780 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
xLowestPriority = ( BaseType_t ) pxTCB->uxPriority;
|
||||
|
||||
if( xPreemptEqualPriority == ( ( char ) 0 ) )
|
||||
|
|
@ -10835,7 +10844,7 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
{
|
||||
;
|
||||
}
|
||||
// # 826 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 834 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -10848,7 +10857,7 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
prvYieldCore( xLowestPriorityCore );
|
||||
xYieldCount++;
|
||||
}
|
||||
// # 846 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 854 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
|
@ -10859,10 +10868,10 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
UBaseType_t uxCurrentPriority = uxTopReadyPriority;
|
||||
BaseType_t xTaskScheduled = ( ( char ) 0 );
|
||||
BaseType_t xDecrementTopPriority = ( ( char ) 1 );
|
||||
// # 864 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 872 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
while( xTaskScheduled == ( ( char ) 0 ) )
|
||||
{
|
||||
// # 878 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 886 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
if( ( ( ( &( pxReadyTasksLists[ uxCurrentPriority ] ) )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? ( ( char ) 1 ) : ( ( char ) 0 ) ) == ( ( char ) 0 ) )
|
||||
{
|
||||
|
||||
|
|
@ -10900,7 +10909,7 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
pxTCB = pxTaskItem->pvOwner;
|
||||
|
||||
/*debug_printf("Attempting to schedule %s on core %d\n", pxTCB->pcTaskName, portGET_CORE_ID() ); */
|
||||
// # 931 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 939 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
if( pxTCB->xTaskRunState == ( TaskRunning_t ) ( -1 ) )
|
||||
{
|
||||
|
||||
|
|
@ -10921,7 +10930,7 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
}
|
||||
else if( pxTCB == pxCurrentTCBs[ xCoreID ] )
|
||||
{
|
||||
(__builtin_expect(!(( pxTCB->xTaskRunState == xCoreID ) || ( pxTCB->xTaskRunState == ( TaskRunning_t ) ( -2 ) )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 951, "( pxTCB->xTaskRunState == xCoreID ) || ( pxTCB->xTaskRunState == ( TaskRunning_t ) ( -2 ) )") : (void)0);
|
||||
(__builtin_expect(!(( pxTCB->xTaskRunState == xCoreID ) || ( pxTCB->xTaskRunState == ( TaskRunning_t ) ( -2 ) )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 959, "( pxTCB->xTaskRunState == xCoreID ) || ( pxTCB->xTaskRunState == ( TaskRunning_t ) ( -2 ) )") : (void)0);
|
||||
|
||||
|
||||
|
||||
|
|
@ -10965,21 +10974,21 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
return ( ( char ) 0 );
|
||||
}
|
||||
|
||||
(__builtin_expect(!(( uxCurrentPriority > ( ( UBaseType_t ) 0U ) ) || ( xTaskScheduled == ( ( char ) 1 ) )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 995, "( uxCurrentPriority > ( ( UBaseType_t ) 0U ) ) || ( xTaskScheduled == ( ( char ) 1 ) )") : (void)0);
|
||||
(__builtin_expect(!(( uxCurrentPriority > ( ( UBaseType_t ) 0U ) ) || ( xTaskScheduled == ( ( char ) 1 ) )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 1003, "( uxCurrentPriority > ( ( UBaseType_t ) 0U ) ) || ( xTaskScheduled == ( ( char ) 1 ) )") : (void)0);
|
||||
uxCurrentPriority--;
|
||||
}
|
||||
|
||||
(__builtin_expect(!(( ( 0 <= pxCurrentTCBs[ xCoreID ]->xTaskRunState ) && ( pxCurrentTCBs[ xCoreID ]->xTaskRunState < 1 ) )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 999, "( ( 0 <= pxCurrentTCBs[ xCoreID ]->xTaskRunState ) && ( pxCurrentTCBs[ xCoreID ]->xTaskRunState < 1 ) )") : (void)0);
|
||||
// # 1075 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
(__builtin_expect(!(( ( 0 <= pxCurrentTCBs[ xCoreID ]->xTaskRunState ) && ( pxCurrentTCBs[ xCoreID ]->xTaskRunState < 1 ) )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 1007, "( ( 0 <= pxCurrentTCBs[ xCoreID ]->xTaskRunState ) && ( pxCurrentTCBs[ xCoreID ]->xTaskRunState < 1 ) )") : (void)0);
|
||||
// # 1083 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
return ( ( char ) 1 );
|
||||
}
|
||||
// # 1091 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1099 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 1169 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1177 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 1232 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1240 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 1298 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1306 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
||||
|
|
@ -10996,7 +11005,7 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
chars(pcName, 16, _);
|
||||
@*/
|
||||
//@ ensures true;
|
||||
// # 1327 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1335 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
{
|
||||
TCB_t * pxNewTCB;
|
||||
BaseType_t xReturn;
|
||||
|
|
@ -11004,7 +11013,7 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
/* If the stack grows down then allocate the stack then the TCB so the stack
|
||||
* does not grow into the TCB. Likewise if the stack grows up then allocate
|
||||
* the TCB then the stack. */
|
||||
// # 1357 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1365 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
{
|
||||
StackType_t * pxStack;
|
||||
|
||||
|
|
@ -11022,6 +11031,8 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
pxNewTCB->pxStack = pxStack;
|
||||
//@ close xLIST_ITEM(&pxNewTCB->xStateListItem, _, _, _, _);
|
||||
//@ close xLIST_ITEM(&pxNewTCB->xEventListItem, _, _, _, _);
|
||||
//@ chars__limits((char*) pxNewTCB->pxStack);
|
||||
//@ assert( pxNewTCB->pxStack + (size_t) usStackDepth <= (StackType_t*) UINTPTR_MAX );
|
||||
//@ close uninit_TCB_p(pxNewTCB, ((size_t) usStackDepth) * sizeof(StackType_t));
|
||||
}
|
||||
else
|
||||
|
|
@ -11040,9 +11051,9 @@ static void prvYieldForTask( TCB_t * pxTCB,
|
|||
|
||||
if( pxNewTCB != 0 )
|
||||
{
|
||||
// # 1400 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1410 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, 0 );
|
||||
// # 1409 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1419 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
prvAddNewTaskToReadyList( pxNewTCB );
|
||||
xReturn = ( ( ( char ) 1 ) );
|
||||
}
|
||||
|
|
@ -11080,7 +11091,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
|||
{
|
||||
StackType_t * pxTopOfStack;
|
||||
UBaseType_t x;
|
||||
// # 1463 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1473 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
//@ open uninit_TCB_p(_,_);
|
||||
|
||||
/* Avoid dependency on memset() if it is not required. */
|
||||
|
|
@ -11113,23 +11124,39 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
|||
|
||||
{
|
||||
pxTopOfStack = &( pxNewTCB->pxStack[ ulStackDepth - ( uint32_t ) 1 ] );
|
||||
//@ StackType_t* gOldTop = pxTopOfStack;
|
||||
|
||||
// Axiomatize that pointers on RP2040 are 32bit
|
||||
//@ ptr_range<uint32_t>(pxTopOfStack);
|
||||
|
||||
// TODO: How can we prove this?
|
||||
// Assume that no underflow occurs
|
||||
//@ assume( 0 <= (( (uint32_t) pxTopOfStack) & ~(7)) );
|
||||
///@ assume( 0 <= (( (uint32_t) pxTopOfStack) & ~(7)) );
|
||||
|
||||
/* Convert top and mask to VeriFast bitvectors and establish
|
||||
* relation to C variables.
|
||||
* Note that on RP2040:
|
||||
* - `portPOINTER_SIZE_TYPE` == `uint32_t`
|
||||
* - `portBYTE_ALIGNMENT_MASK` == `0x0007`
|
||||
*/
|
||||
//@ uint32_t gMask = 0x0007;
|
||||
//@ Z gzTop = Z_of_uint32((int) pxTopOfStack);
|
||||
//@ Z gzMask = Z_of_uint32((int) gMask);
|
||||
//@ bitnot_def(gMask, gzMask);
|
||||
//@ bitand_def((int) pxTopOfStack, gzTop, ~gMask, Z_not(gzMask));
|
||||
|
||||
// TODO: How can we prove this?
|
||||
// Assume that no overflow occurs.
|
||||
//@ assume( (((uint32_t) pxTopOfStack) & ~7) <= UINTPTR_MAX);
|
||||
///@ assume( (((uint32_t) pxTopOfStack) & ~7) <= UINTPTR_MAX);
|
||||
pxTopOfStack = ( StackType_t * ) ( ( ( uint32_t ) pxTopOfStack ) & ( ~( ( uint32_t ) ( 0x0007 ) ) ) ); /*lint !e923 !e9033 !e9078 MISRA exception. Avoiding casts between pointers and integers is not practical. Size differences accounted for using portPOINTER_SIZE_TYPE type. Checked by assert(). */
|
||||
//@ assert( pxTopOfStack <= gOldTop );
|
||||
//@ assert( gOldTop - 7 <= pxTopOfStack );
|
||||
//@ assert(false);
|
||||
|
||||
/* Check the alignment of the calculated top of stack is correct. */
|
||||
// # 1523 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1549 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
}
|
||||
// # 1537 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1563 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
//@ close uninit_TCB_p(pxNewTCB, stackSize);
|
||||
|
||||
/* Store the task name in the TCB. */
|
||||
|
|
@ -11219,7 +11246,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
|||
{
|
||||
pxNewTCB->uxCriticalNesting = ( UBaseType_t ) 0U;
|
||||
}
|
||||
// # 1645 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1671 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
{
|
||||
/* Avoid compiler warning about unreferenced parameter. */
|
||||
( void ) xRegions;
|
||||
|
|
@ -11246,7 +11273,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
|||
//@ uchars__to_chars_(pxNewTCB->ucNotifyState);
|
||||
memset( ( void * ) &( pxNewTCB->ucNotifyState[ 0 ] ), 0x00, sizeof( pxNewTCB->ucNotifyState ) );
|
||||
}
|
||||
// # 1683 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1709 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
{
|
||||
|
||||
/* Reason for rewrite: Assignment not type safe. */
|
||||
|
|
@ -11255,17 +11282,17 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
|||
|
||||
|
||||
}
|
||||
// # 1706 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1732 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/* Initialize the TCB stack to look as if the task was already running,
|
||||
* but had been interrupted by the scheduler. The return address is set
|
||||
* to the start of the task function. Once the stack has been initialised
|
||||
* the top of stack variable is updated. */
|
||||
// # 1734 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1760 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
{
|
||||
/* If the port has capability to detect stack overflow,
|
||||
* pass the stack end address to the stack initialization
|
||||
* function as well. */
|
||||
// # 1751 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 1777 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
{
|
||||
pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters );
|
||||
}
|
||||
|
|
@ -11476,7 +11503,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
|
||||
if( xTaskRunningOnCore == xCoreID )
|
||||
{
|
||||
(__builtin_expect(!(uxSchedulerSuspended == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 1961, "uxSchedulerSuspended == 0") : (void)0);
|
||||
(__builtin_expect(!(uxSchedulerSuspended == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 1987, "uxSchedulerSuspended == 0") : (void)0);
|
||||
vTaskYieldWithinAPI();
|
||||
}
|
||||
else
|
||||
|
|
@ -11499,12 +11526,12 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
TickType_t xTimeToWake;
|
||||
BaseType_t xAlreadyYielded, xShouldDelay = ( ( char ) 0 );
|
||||
|
||||
(__builtin_expect(!(pxPreviousWakeTime), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 1984, "pxPreviousWakeTime") : (void)0);
|
||||
(__builtin_expect(!(( xTimeIncrement > 0U )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 1985, "( xTimeIncrement > 0U )") : (void)0);
|
||||
(__builtin_expect(!(pxPreviousWakeTime), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2010, "pxPreviousWakeTime") : (void)0);
|
||||
(__builtin_expect(!(( xTimeIncrement > 0U )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2011, "( xTimeIncrement > 0U )") : (void)0);
|
||||
|
||||
vTaskSuspendAll();
|
||||
{
|
||||
(__builtin_expect(!(uxSchedulerSuspended == 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 1989, "uxSchedulerSuspended == 1") : (void)0);
|
||||
(__builtin_expect(!(uxSchedulerSuspended == 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2015, "uxSchedulerSuspended == 1") : (void)0);
|
||||
|
||||
/* Minor optimisation. The tick count cannot change in this
|
||||
* block. */
|
||||
|
|
@ -11590,7 +11617,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
{
|
||||
vTaskSuspendAll();
|
||||
{
|
||||
(__builtin_expect(!(uxSchedulerSuspended == 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2075, "uxSchedulerSuspended == 1") : (void)0);
|
||||
(__builtin_expect(!(uxSchedulerSuspended == 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2101, "uxSchedulerSuspended == 1") : (void)0);
|
||||
;
|
||||
|
||||
/* A task that is removed from the event list while the
|
||||
|
|
@ -11644,7 +11671,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
|
||||
const TCB_t * const pxTCB = xTask;
|
||||
|
||||
(__builtin_expect(!(pxTCB), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2129, "pxTCB") : (void)0);
|
||||
(__builtin_expect(!(pxTCB), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2155, "pxTCB") : (void)0);
|
||||
|
||||
vTaskEnterCritical();
|
||||
{
|
||||
|
|
@ -11820,7 +11847,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
BaseType_t xYieldForTask = ( ( char ) 0 );
|
||||
BaseType_t xCoreID;
|
||||
|
||||
(__builtin_expect(!(( uxNewPriority < 32 )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2305, "( uxNewPriority < 32 )") : (void)0);
|
||||
(__builtin_expect(!(( uxNewPriority < 32 )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2331, "( uxNewPriority < 32 )") : (void)0);
|
||||
|
||||
/* Ensure the new priority is valid. */
|
||||
if( uxNewPriority >= ( UBaseType_t ) 32 )
|
||||
|
|
@ -11974,13 +12001,13 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 2493 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 2519 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 2516 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 2542 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 2534 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 2560 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 2562 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 2588 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
||||
|
|
@ -12057,7 +12084,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
if( xTaskRunningOnCore == 0 )
|
||||
{
|
||||
/* The current task has just been suspended. */
|
||||
(__builtin_expect(!(uxSchedulerSuspended == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2638, "uxSchedulerSuspended == 0") : (void)0);
|
||||
(__builtin_expect(!(uxSchedulerSuspended == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2664, "uxSchedulerSuspended == 0") : (void)0);
|
||||
vTaskYieldWithinAPI();
|
||||
}
|
||||
else
|
||||
|
|
@ -12071,7 +12098,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
{
|
||||
vTaskExitCritical();
|
||||
|
||||
(__builtin_expect(!(pxTCB == pxCurrentTCBs[ xTaskRunningOnCore ]), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2652, "pxTCB == pxCurrentTCBs[ xTaskRunningOnCore ]") : (void)0);
|
||||
(__builtin_expect(!(pxTCB == pxCurrentTCBs[ xTaskRunningOnCore ]), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2678, "pxTCB == pxCurrentTCBs[ xTaskRunningOnCore ]") : (void)0);
|
||||
|
||||
/* The scheduler is not running, but the task that was pointed
|
||||
* to by pxCurrentTCB has just been suspended and pxCurrentTCB
|
||||
|
|
@ -12118,7 +12145,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
/* Accesses xPendingReadyList so must be called from a critical section. */
|
||||
|
||||
/* It does not make sense to check if the calling task is suspended. */
|
||||
(__builtin_expect(!(xTask), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2699, "xTask") : (void)0);
|
||||
(__builtin_expect(!(xTask), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2725, "xTask") : (void)0);
|
||||
|
||||
/* Is the task being resumed actually in the suspended list? */
|
||||
if( ( ( ( &( pxTCB->xStateListItem ) )->pxContainer == ( &xSuspendedTaskList ) ) ? ( ( ( char ) 1 ) ) : ( ( ( char ) 0 ) ) ) != ( ( char ) 0 ) )
|
||||
|
|
@ -12167,7 +12194,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
|
||||
|
||||
/* It does not make sense to resume the calling task. */
|
||||
(__builtin_expect(!(xTaskToResume), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2748, "xTaskToResume") : (void)0);
|
||||
(__builtin_expect(!(xTaskToResume), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2774, "xTaskToResume") : (void)0);
|
||||
|
||||
/* The parameter cannot be NULL as it is impossible to resume the
|
||||
* currently executing task. It is also impossible to resume a task
|
||||
|
|
@ -12226,7 +12253,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
|
||||
UBaseType_t uxSavedInterruptStatus;
|
||||
|
||||
(__builtin_expect(!(xTaskToResume), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2807, "xTaskToResume") : (void)0);
|
||||
(__builtin_expect(!(xTaskToResume), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 2833, "xTaskToResume") : (void)0);
|
||||
|
||||
/* RTOS ports that support interrupt nesting have the concept of a
|
||||
* maximum system call (or maximum API call) interrupt priority.
|
||||
|
|
@ -12347,7 +12374,7 @@ static BaseType_t prvCreateIdleTasks( void )
|
|||
{
|
||||
;
|
||||
}
|
||||
// # 2975 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 3001 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
{
|
||||
if( xCoreID == 0 )
|
||||
{
|
||||
|
|
@ -12359,7 +12386,7 @@ static BaseType_t prvCreateIdleTasks( void )
|
|||
( ( UBaseType_t ) 0x00 ), /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
|
||||
&xIdleTaskHandle[ xCoreID ] ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
|
||||
}
|
||||
// # 2998 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 3024 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -12396,7 +12423,7 @@ void vTaskStartScheduler( void )
|
|||
* so interrupts will automatically get re-enabled when the first task
|
||||
* starts to run. */
|
||||
assert_fct(false);
|
||||
// # 3048 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 3074 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
xNextTaskUnblockTime = ( TickType_t ) 0xffffffffUL;
|
||||
xSchedulerRunning = ( ( char ) 1 );
|
||||
xTickCount = ( TickType_t ) 0;
|
||||
|
|
@ -12428,7 +12455,7 @@ void vTaskStartScheduler( void )
|
|||
/* This line will only be reached if the kernel could not be started,
|
||||
* because there was not enough FreeRTOS heap to create the idle task
|
||||
* or the timer task. */
|
||||
(__builtin_expect(!(xReturn != ( -1 )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3079, "xReturn != ( -1 )") : (void)0);
|
||||
(__builtin_expect(!(xReturn != ( -1 )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3105, "xReturn != ( -1 )") : (void)0);
|
||||
}
|
||||
|
||||
/* Prevent compiler warnings if INCLUDE_xTaskGetIdleTaskHandle is set to 0,
|
||||
|
|
@ -12493,7 +12520,7 @@ void vTaskSuspendAll( void )
|
|||
}
|
||||
}
|
||||
/*----------------------------------------------------------*/
|
||||
// # 3206 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 3232 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*----------------------------------------------------------*/
|
||||
|
||||
BaseType_t xTaskResumeAll( void )
|
||||
|
|
@ -12516,7 +12543,7 @@ BaseType_t xTaskResumeAll( void )
|
|||
|
||||
/* If uxSchedulerSuspended is zero then this function does not match a
|
||||
* previous call to vTaskSuspendAll(). */
|
||||
(__builtin_expect(!(uxSchedulerSuspended), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3228, "uxSchedulerSuspended") : (void)0);
|
||||
(__builtin_expect(!(uxSchedulerSuspended), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3254, "uxSchedulerSuspended") : (void)0);
|
||||
|
||||
--uxSchedulerSuspended;
|
||||
vPortRecursiveLock(1, spin_lock_instance(15), ( ( char ) 0 ));
|
||||
|
|
@ -12674,7 +12701,7 @@ char * pcTaskGetName( TaskHandle_t xTaskToQuery ) /*lint !e971 Unqualified char
|
|||
/* If null is passed in here then the name of the calling task is being
|
||||
* queried. */
|
||||
pxTCB = ( ( ( xTaskToQuery ) == 0 ) ? xTaskGetCurrentTaskHandle() : ( xTaskToQuery ) );
|
||||
(__builtin_expect(!(pxTCB), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3386, "pxTCB") : (void)0);
|
||||
(__builtin_expect(!(pxTCB), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3412, "pxTCB") : (void)0);
|
||||
return &( pxTCB->pcTaskName[ 0 ] );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
|
@ -12767,7 +12794,7 @@ char * pcTaskGetName( TaskHandle_t xTaskToQuery ) /*lint !e971 Unqualified char
|
|||
TCB_t * pxTCB;
|
||||
|
||||
/* Task names will be truncated to configMAX_TASK_NAME_LEN - 1 bytes. */
|
||||
(__builtin_expect(!(strlen( pcNameToQuery ) < 16), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3479, "strlen( pcNameToQuery ) < 16") : (void)0);
|
||||
(__builtin_expect(!(strlen( pcNameToQuery ) < 16), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3505, "strlen( pcNameToQuery ) < 16") : (void)0);
|
||||
|
||||
vTaskSuspendAll();
|
||||
{
|
||||
|
|
@ -12863,7 +12890,7 @@ char * pcTaskGetName( TaskHandle_t xTaskToQuery ) /*lint !e971 Unqualified char
|
|||
* each task in the Suspended state. */
|
||||
uxTask += prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &xSuspendedTaskList, eSuspended );
|
||||
}
|
||||
// # 3589 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 3615 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
{
|
||||
if( pulTotalRunTime != 0 )
|
||||
{
|
||||
|
|
@ -12891,7 +12918,7 @@ char * pcTaskGetName( TaskHandle_t xTaskToQuery ) /*lint !e971 Unqualified char
|
|||
{
|
||||
/* If xTaskGetIdleTaskHandle() is called before the scheduler has been
|
||||
* started, then xIdleTaskHandle will be NULL. */
|
||||
(__builtin_expect(!(( xIdleTaskHandle != 0 )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3616, "( xIdleTaskHandle != 0 )") : (void)0);
|
||||
(__builtin_expect(!(( xIdleTaskHandle != 0 )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3642, "( xIdleTaskHandle != 0 )") : (void)0);
|
||||
return &( xIdleTaskHandle[ 0 ] );
|
||||
}
|
||||
|
||||
|
|
@ -12902,7 +12929,7 @@ char * pcTaskGetName( TaskHandle_t xTaskToQuery ) /*lint !e971 Unqualified char
|
|||
* This is to ensure vTaskStepTick() is available when user defined low power mode
|
||||
* implementations require configUSE_TICKLESS_IDLE to be set to a value other than
|
||||
* 1. */
|
||||
// # 3640 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 3666 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*----------------------------------------------------------*/
|
||||
|
||||
BaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp )
|
||||
|
|
@ -12911,7 +12938,7 @@ BaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp )
|
|||
|
||||
/* Must not be called with the scheduler suspended as the implementation
|
||||
* relies on xPendedTicks being wound down to 0 in xTaskResumeAll(). */
|
||||
(__builtin_expect(!(uxSchedulerSuspended == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3648, "uxSchedulerSuspended == 0") : (void)0);
|
||||
(__builtin_expect(!(uxSchedulerSuspended == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3674, "uxSchedulerSuspended == 0") : (void)0);
|
||||
|
||||
/* Use xPendedTicks to mimic xTicksToCatchUp number of ticks occurring when
|
||||
* the scheduler is suspended so the ticks are executed in xTaskResumeAll(). */
|
||||
|
|
@ -12930,7 +12957,7 @@ BaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp )
|
|||
TCB_t * pxTCB = xTask;
|
||||
BaseType_t xReturn;
|
||||
|
||||
(__builtin_expect(!(pxTCB), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3667, "pxTCB") : (void)0);
|
||||
(__builtin_expect(!(pxTCB), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3693, "pxTCB") : (void)0);
|
||||
|
||||
vTaskSuspendAll();
|
||||
{
|
||||
|
|
@ -13029,7 +13056,7 @@ BaseType_t xTaskIncrementTick( void )
|
|||
|
||||
if( xConstTickCount == ( TickType_t ) 0U ) /*lint !e774 'if' does not always evaluate to false as it is looking for an overflow. */
|
||||
{
|
||||
{ List_t * pxTemp; (__builtin_expect(!(( ( ( ( pxDelayedTaskList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? ( ( char ) 1 ) : ( ( char ) 0 ) ) )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3766, "( ( ( ( pxDelayedTaskList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? ( ( char ) 1 ) : ( ( char ) 0 ) ) )") : (void)0); pxTemp = pxDelayedTaskList; pxDelayedTaskList = pxOverflowDelayedTaskList; pxOverflowDelayedTaskList = pxTemp; xNumOfOverflows++; prvResetNextTaskUnblockTime(); };
|
||||
{ List_t * pxTemp; (__builtin_expect(!(( ( ( ( pxDelayedTaskList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? ( ( char ) 1 ) : ( ( char ) 0 ) ) )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 3792, "( ( ( ( pxDelayedTaskList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? ( ( char ) 1 ) : ( ( char ) 0 ) ) )") : (void)0); pxTemp = pxDelayedTaskList; pxDelayedTaskList = pxOverflowDelayedTaskList; pxOverflowDelayedTaskList = pxTemp; xNumOfOverflows++; prvResetNextTaskUnblockTime(); };
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -13212,13 +13239,13 @@ BaseType_t xTaskIncrementTick( void )
|
|||
return xSwitchRequired;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 3978 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4004 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 4002 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4028 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 4027 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4053 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 4060 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4086 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vTaskSwitchContext( BaseType_t xCoreID )
|
||||
|
|
@ -13236,7 +13263,7 @@ void vTaskSwitchContext( BaseType_t xCoreID )
|
|||
{
|
||||
/* vTaskSwitchContext() must never be called from within a critical section.
|
||||
* This is not necessarily true for vanilla FreeRTOS, but it is for this SMP port. */
|
||||
(__builtin_expect(!(xTaskGetCurrentTaskHandle()->uxCriticalNesting == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4077, "xTaskGetCurrentTaskHandle()->uxCriticalNesting == 0") : (void)0);
|
||||
(__builtin_expect(!(xTaskGetCurrentTaskHandle()->uxCriticalNesting == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4103, "xTaskGetCurrentTaskHandle()->uxCriticalNesting == 0") : (void)0);
|
||||
|
||||
if( uxSchedulerSuspended != ( UBaseType_t ) ( ( char ) 0 ) )
|
||||
{
|
||||
|
|
@ -13248,7 +13275,7 @@ void vTaskSwitchContext( BaseType_t xCoreID )
|
|||
{
|
||||
xYieldPendings[ xCoreID ] = ( ( char ) 0 );
|
||||
;
|
||||
// # 4118 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4144 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/* Check for stack overflow, if configured. */
|
||||
{ const uint32_t * const pulStack = ( uint32_t * ) xTaskGetCurrentTaskHandle()->pxStack; const uint32_t ulCheckValue = ( uint32_t ) 0xa5a5a5a5; if( ( pulStack[ 0 ] != ulCheckValue ) || ( pulStack[ 1 ] != ulCheckValue ) || ( pulStack[ 2 ] != ulCheckValue ) || ( pulStack[ 3 ] != ulCheckValue ) ) { vApplicationStackOverflowHook( ( TaskHandle_t ) xTaskGetCurrentTaskHandle(), xTaskGetCurrentTaskHandle()->pcTaskName ); } };
|
||||
|
||||
|
|
@ -13265,7 +13292,7 @@ void vTaskSwitchContext( BaseType_t xCoreID )
|
|||
;
|
||||
|
||||
/* After the new task is switched in, update the global errno. */
|
||||
// # 4152 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4178 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
}
|
||||
}
|
||||
vPortRecursiveLock(0, spin_lock_instance(14), ( ( char ) 0 ));
|
||||
|
|
@ -13276,7 +13303,7 @@ void vTaskSwitchContext( BaseType_t xCoreID )
|
|||
void vTaskPlaceOnEventList( List_t * const pxEventList,
|
||||
const TickType_t xTicksToWait )
|
||||
{
|
||||
(__builtin_expect(!(pxEventList), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4162, "pxEventList") : (void)0);
|
||||
(__builtin_expect(!(pxEventList), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4188, "pxEventList") : (void)0);
|
||||
|
||||
/* THIS FUNCTION MUST BE CALLED WITH EITHER INTERRUPTS DISABLED OR THE
|
||||
* SCHEDULER SUSPENDED AND THE QUEUE BEING ACCESSED LOCKED. */
|
||||
|
|
@ -13295,11 +13322,11 @@ void vTaskPlaceOnUnorderedEventList( List_t * pxEventList,
|
|||
const TickType_t xItemValue,
|
||||
const TickType_t xTicksToWait )
|
||||
{
|
||||
(__builtin_expect(!(pxEventList), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4181, "pxEventList") : (void)0);
|
||||
(__builtin_expect(!(pxEventList), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4207, "pxEventList") : (void)0);
|
||||
|
||||
/* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED. It is used by
|
||||
* the event groups implementation. */
|
||||
(__builtin_expect(!(uxSchedulerSuspended != 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4185, "uxSchedulerSuspended != 0") : (void)0);
|
||||
(__builtin_expect(!(uxSchedulerSuspended != 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4211, "uxSchedulerSuspended != 0") : (void)0);
|
||||
|
||||
/* Store the item value in the event list item. It is safe to access the
|
||||
* event list item here as interrupts won't access the event list item of a
|
||||
|
|
@ -13323,7 +13350,7 @@ void vTaskPlaceOnUnorderedEventList( List_t * pxEventList,
|
|||
TickType_t xTicksToWait,
|
||||
const BaseType_t xWaitIndefinitely )
|
||||
{
|
||||
(__builtin_expect(!(pxEventList), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4209, "pxEventList") : (void)0);
|
||||
(__builtin_expect(!(pxEventList), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4235, "pxEventList") : (void)0);
|
||||
|
||||
/* This function should not be called by application code hence the
|
||||
* 'Restricted' in its name. It is not part of the public API. It is
|
||||
|
|
@ -13371,14 +13398,14 @@ BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList )
|
|||
* This function assumes that a check has already been made to ensure that
|
||||
* pxEventList is not empty. */
|
||||
pxUnblockedTCB = ( ( &( ( pxEventList )->xListEnd ) )->pxNext->pvOwner ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */
|
||||
(__builtin_expect(!(pxUnblockedTCB), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4257, "pxUnblockedTCB") : (void)0);
|
||||
(__builtin_expect(!(pxUnblockedTCB), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4283, "pxUnblockedTCB") : (void)0);
|
||||
( void ) uxListRemove( &( pxUnblockedTCB->xEventListItem ) );
|
||||
|
||||
if( uxSchedulerSuspended == ( UBaseType_t ) ( ( char ) 0 ) )
|
||||
{
|
||||
( void ) uxListRemove( &( pxUnblockedTCB->xStateListItem ) );
|
||||
; { if( ( ( pxUnblockedTCB )->uxPriority ) > uxTopReadyPriority ) { uxTopReadyPriority = ( ( pxUnblockedTCB )->uxPriority ); } }; vListInsertEnd( &( pxReadyTasksLists[ ( pxUnblockedTCB )->uxPriority ] ), &( ( pxUnblockedTCB )->xStateListItem ) ); ;
|
||||
// # 4278 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4304 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -13408,7 +13435,7 @@ void vTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem,
|
|||
|
||||
/* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED. It is used by
|
||||
* the event flags implementation. */
|
||||
(__builtin_expect(!(uxSchedulerSuspended != ( ( char ) 0 )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4307, "uxSchedulerSuspended != ( ( char ) 0 )") : (void)0);
|
||||
(__builtin_expect(!(uxSchedulerSuspended != ( ( char ) 0 )), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4333, "uxSchedulerSuspended != ( ( char ) 0 )") : (void)0);
|
||||
|
||||
/* Store the new item value in the event list. */
|
||||
( ( pxEventListItem )->xItemValue = ( xItemValue | 0x80000000UL ) );
|
||||
|
|
@ -13416,9 +13443,9 @@ void vTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem,
|
|||
/* Remove the event list form the event flag. Interrupts do not access
|
||||
* event flags. */
|
||||
pxUnblockedTCB = ( ( pxEventListItem )->pvOwner ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */
|
||||
(__builtin_expect(!(pxUnblockedTCB), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4315, "pxUnblockedTCB") : (void)0);
|
||||
(__builtin_expect(!(pxUnblockedTCB), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4341, "pxUnblockedTCB") : (void)0);
|
||||
( void ) uxListRemove( pxEventListItem );
|
||||
// # 4332 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4358 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/* Remove the task from the delayed list and add it to the ready list. The
|
||||
* scheduler is suspended so interrupts will not be accessing the ready
|
||||
* lists. */
|
||||
|
|
@ -13437,7 +13464,7 @@ void vTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem,
|
|||
|
||||
void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut )
|
||||
{
|
||||
(__builtin_expect(!(pxTimeOut), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4350, "pxTimeOut") : (void)0);
|
||||
(__builtin_expect(!(pxTimeOut), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4376, "pxTimeOut") : (void)0);
|
||||
vTaskEnterCritical();
|
||||
{
|
||||
pxTimeOut->xOverflowCount = xNumOfOverflows;
|
||||
|
|
@ -13460,8 +13487,8 @@ BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut,
|
|||
{
|
||||
BaseType_t xReturn;
|
||||
|
||||
(__builtin_expect(!(pxTimeOut), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4373, "pxTimeOut") : (void)0);
|
||||
(__builtin_expect(!(pxTicksToWait), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4374, "pxTicksToWait") : (void)0);
|
||||
(__builtin_expect(!(pxTimeOut), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4399, "pxTimeOut") : (void)0);
|
||||
(__builtin_expect(!(pxTicksToWait), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4400, "pxTicksToWait") : (void)0);
|
||||
|
||||
vTaskEnterCritical();
|
||||
{
|
||||
|
|
@ -13583,7 +13610,7 @@ void vTaskMissedYield( void )
|
|||
*
|
||||
* @todo additional conditional compiles to remove this function.
|
||||
*/
|
||||
// # 4556 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4582 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*
|
||||
* -----------------------------------------------------------
|
||||
* The Idle task.
|
||||
|
|
@ -13613,7 +13640,7 @@ static void prvIdleTask( void * pvParameters )
|
|||
/* See if any tasks have deleted themselves - if so then the idle task
|
||||
* is responsible for freeing the deleted task's TCB and stack. */
|
||||
prvCheckTasksWaitingTermination();
|
||||
// # 4597 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4623 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
{
|
||||
/* When using preemption tasks of equal priority will be
|
||||
* timesliced. If a task that is sharing the idle priority is ready
|
||||
|
|
@ -13634,16 +13661,16 @@ static void prvIdleTask( void * pvParameters )
|
|||
;
|
||||
}
|
||||
}
|
||||
// # 4633 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4659 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/* This conditional compilation should use inequality to 0, not equality
|
||||
* to 1. This is to ensure portSUPPRESS_TICKS_AND_SLEEP() is called when
|
||||
* user defined low power mode implementations require
|
||||
* configUSE_TICKLESS_IDLE to be set to a value other than 1. */
|
||||
// # 4698 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4724 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 4748 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4774 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
||||
|
|
@ -13657,7 +13684,7 @@ static void prvIdleTask( void * pvParameters )
|
|||
if( xIndex < 5 )
|
||||
{
|
||||
pxTCB = ( ( ( xTaskToSet ) == 0 ) ? xTaskGetCurrentTaskHandle() : ( xTaskToSet ) );
|
||||
(__builtin_expect(!(pxTCB != 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4761, "pxTCB != 0") : (void)0);
|
||||
(__builtin_expect(!(pxTCB != 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 4787, "pxTCB != 0") : (void)0);
|
||||
pxTCB->pvThreadLocalStoragePointers[ xIndex ] = pvValue;
|
||||
}
|
||||
}
|
||||
|
|
@ -13688,7 +13715,7 @@ static void prvIdleTask( void * pvParameters )
|
|||
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 4808 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4834 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvInitialiseTaskLists( void )
|
||||
|
|
@ -13790,7 +13817,7 @@ static void prvCheckTasksWaitingTermination( void )
|
|||
{
|
||||
pxTaskStatus->uxBasePriority = pxTCB->uxBasePriority;
|
||||
}
|
||||
// # 4920 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 4946 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
{
|
||||
pxTaskStatus->ulRunTimeCounter = 0;
|
||||
}
|
||||
|
|
@ -13921,7 +13948,7 @@ static void prvCheckTasksWaitingTermination( void )
|
|||
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 5089 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 5115 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
||||
|
|
@ -13978,7 +14005,7 @@ static void prvCheckTasksWaitingTermination( void )
|
|||
free( (void*) pxTCB->pxStack);
|
||||
free( (void*) pxTCB);
|
||||
}
|
||||
// # 5172 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 5198 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -14183,8 +14210,8 @@ static void prvResetNextTaskUnblockTime( void )
|
|||
* If the mutex is held by a task then it cannot be given from an
|
||||
* interrupt, and if a mutex is given by the holding task then it must
|
||||
* be the running state task. */
|
||||
(__builtin_expect(!(pxTCB == xTaskGetCurrentTaskHandle()), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5376, "pxTCB == xTaskGetCurrentTaskHandle()") : (void)0);
|
||||
(__builtin_expect(!(pxTCB->uxMutexesHeld), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5377, "pxTCB->uxMutexesHeld") : (void)0);
|
||||
(__builtin_expect(!(pxTCB == xTaskGetCurrentTaskHandle()), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5402, "pxTCB == xTaskGetCurrentTaskHandle()") : (void)0);
|
||||
(__builtin_expect(!(pxTCB->uxMutexesHeld), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5403, "pxTCB->uxMutexesHeld") : (void)0);
|
||||
( pxTCB->uxMutexesHeld )--;
|
||||
|
||||
/* Has the holder of the mutex inherited the priority of another
|
||||
|
|
@ -14270,7 +14297,7 @@ static void prvResetNextTaskUnblockTime( void )
|
|||
{
|
||||
/* If pxMutexHolder is not NULL then the holder must hold at least
|
||||
* one mutex. */
|
||||
(__builtin_expect(!(pxTCB->uxMutexesHeld), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5463, "pxTCB->uxMutexesHeld") : (void)0);
|
||||
(__builtin_expect(!(pxTCB->uxMutexesHeld), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5489, "pxTCB->uxMutexesHeld") : (void)0);
|
||||
|
||||
/* Determine the priority to which the priority of the task that
|
||||
* holds the mutex should be set. This will be the greater of the
|
||||
|
|
@ -14297,7 +14324,7 @@ static void prvResetNextTaskUnblockTime( void )
|
|||
/* If a task has timed out because it already holds the
|
||||
* mutex it was trying to obtain then it cannot of inherited
|
||||
* its own priority. */
|
||||
(__builtin_expect(!(pxTCB != xTaskGetCurrentTaskHandle()), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5490, "pxTCB != xTaskGetCurrentTaskHandle()") : (void)0);
|
||||
(__builtin_expect(!(pxTCB != xTaskGetCurrentTaskHandle()), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5516, "pxTCB != xTaskGetCurrentTaskHandle()") : (void)0);
|
||||
|
||||
/* Disinherit the priority, remembering the previous
|
||||
* priority to facilitate determining the subject task's
|
||||
|
|
@ -14428,7 +14455,7 @@ void vTaskYieldWithinAPI( void )
|
|||
{
|
||||
/* If pxCurrentTCB->uxCriticalNesting is zero then this function
|
||||
* does not match a previous call to vTaskEnterCritical(). */
|
||||
(__builtin_expect(!(xTaskGetCurrentTaskHandle()->uxCriticalNesting > 0U), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5621, "xTaskGetCurrentTaskHandle()->uxCriticalNesting > 0U") : (void)0);
|
||||
(__builtin_expect(!(xTaskGetCurrentTaskHandle()->uxCriticalNesting > 0U), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5647, "xTaskGetCurrentTaskHandle()->uxCriticalNesting > 0U") : (void)0);
|
||||
|
||||
if( xTaskGetCurrentTaskHandle()->uxCriticalNesting > 0U )
|
||||
{
|
||||
|
|
@ -14478,11 +14505,11 @@ void vTaskYieldWithinAPI( void )
|
|||
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 5697 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 5723 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 5803 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 5829 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*----------------------------------------------------------*/
|
||||
// # 5930 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 5956 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
TickType_t uxTaskResetEventItemValue( void )
|
||||
|
|
@ -14524,7 +14551,7 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
{
|
||||
uint32_t ulReturn;
|
||||
|
||||
(__builtin_expect(!(uxIndexToWait < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5971, "uxIndexToWait < 1") : (void)0);
|
||||
(__builtin_expect(!(uxIndexToWait < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 5997, "uxIndexToWait < 1") : (void)0);
|
||||
|
||||
vTaskEnterCritical();
|
||||
{
|
||||
|
|
@ -14598,7 +14625,7 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
{
|
||||
BaseType_t xReturn;
|
||||
|
||||
(__builtin_expect(!(uxIndexToWait < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6045, "uxIndexToWait < 1") : (void)0);
|
||||
(__builtin_expect(!(uxIndexToWait < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6071, "uxIndexToWait < 1") : (void)0);
|
||||
|
||||
vTaskEnterCritical();
|
||||
{
|
||||
|
|
@ -14686,8 +14713,8 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
BaseType_t xReturn = ( ( ( char ) 1 ) );
|
||||
uint8_t ucOriginalNotifyState;
|
||||
|
||||
(__builtin_expect(!(uxIndexToNotify < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6133, "uxIndexToNotify < 1") : (void)0);
|
||||
(__builtin_expect(!(xTaskToNotify), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6134, "xTaskToNotify") : (void)0);
|
||||
(__builtin_expect(!(uxIndexToNotify < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6159, "uxIndexToNotify < 1") : (void)0);
|
||||
(__builtin_expect(!(xTaskToNotify), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6160, "xTaskToNotify") : (void)0);
|
||||
pxTCB = xTaskToNotify;
|
||||
|
||||
vTaskEnterCritical();
|
||||
|
|
@ -14740,7 +14767,7 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
/* Should not get here if all enums are handled.
|
||||
* Artificially force an assert by testing a value the
|
||||
* compiler can't assume is const. */
|
||||
(__builtin_expect(!(xTickCount == ( TickType_t ) 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6187, "xTickCount == ( TickType_t ) 0") : (void)0);
|
||||
(__builtin_expect(!(xTickCount == ( TickType_t ) 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6213, "xTickCount == ( TickType_t ) 0") : (void)0);
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
@ -14755,8 +14782,8 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
; { if( ( ( pxTCB )->uxPriority ) > uxTopReadyPriority ) { uxTopReadyPriority = ( ( pxTCB )->uxPriority ); } }; vListInsertEnd( &( pxReadyTasksLists[ ( pxTCB )->uxPriority ] ), &( ( pxTCB )->xStateListItem ) ); ;
|
||||
|
||||
/* The task should not have been on an event list. */
|
||||
(__builtin_expect(!(( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6202, "( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0") : (void)0);
|
||||
// # 6221 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
(__builtin_expect(!(( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6228, "( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0") : (void)0);
|
||||
// # 6247 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
{
|
||||
prvYieldForTask( pxTCB, ( ( char ) 0 ) );
|
||||
}
|
||||
|
|
@ -14789,8 +14816,8 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
BaseType_t xReturn = ( ( ( char ) 1 ) );
|
||||
UBaseType_t uxSavedInterruptStatus;
|
||||
|
||||
(__builtin_expect(!(xTaskToNotify), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6253, "xTaskToNotify") : (void)0);
|
||||
(__builtin_expect(!(uxIndexToNotify < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6254, "uxIndexToNotify < 1") : (void)0);
|
||||
(__builtin_expect(!(xTaskToNotify), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6279, "xTaskToNotify") : (void)0);
|
||||
(__builtin_expect(!(uxIndexToNotify < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6280, "uxIndexToNotify < 1") : (void)0);
|
||||
|
||||
/* RTOS ports that support interrupt nesting have the concept of a
|
||||
* maximum system call (or maximum API call) interrupt priority.
|
||||
|
|
@ -14861,7 +14888,7 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
/* Should not get here if all enums are handled.
|
||||
* Artificially force an assert by testing a value the
|
||||
* compiler can't assume is const. */
|
||||
(__builtin_expect(!(xTickCount == ( TickType_t ) 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6325, "xTickCount == ( TickType_t ) 0") : (void)0);
|
||||
(__builtin_expect(!(xTickCount == ( TickType_t ) 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6351, "xTickCount == ( TickType_t ) 0") : (void)0);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -14872,7 +14899,7 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
if( ucOriginalNotifyState == ( ( uint8_t ) 1 ) )
|
||||
{
|
||||
/* The task should not have been on an event list. */
|
||||
(__builtin_expect(!(( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6336, "( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0") : (void)0);
|
||||
(__builtin_expect(!(( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6362, "( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0") : (void)0);
|
||||
|
||||
if( uxSchedulerSuspended == ( UBaseType_t ) ( ( char ) 0 ) )
|
||||
{
|
||||
|
|
@ -14917,8 +14944,8 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
uint8_t ucOriginalNotifyState;
|
||||
UBaseType_t uxSavedInterruptStatus;
|
||||
|
||||
(__builtin_expect(!(xTaskToNotify), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6381, "xTaskToNotify") : (void)0);
|
||||
(__builtin_expect(!(uxIndexToNotify < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6382, "uxIndexToNotify < 1") : (void)0);
|
||||
(__builtin_expect(!(xTaskToNotify), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6407, "xTaskToNotify") : (void)0);
|
||||
(__builtin_expect(!(uxIndexToNotify < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6408, "uxIndexToNotify < 1") : (void)0);
|
||||
|
||||
/* RTOS ports that support interrupt nesting have the concept of a
|
||||
* maximum system call (or maximum API call) interrupt priority.
|
||||
|
|
@ -14956,7 +14983,7 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
if( ucOriginalNotifyState == ( ( uint8_t ) 1 ) )
|
||||
{
|
||||
/* The task should not have been on an event list. */
|
||||
(__builtin_expect(!(( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6420, "( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0") : (void)0);
|
||||
(__builtin_expect(!(( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6446, "( ( &( pxTCB->xEventListItem ) )->pxContainer ) == 0") : (void)0);
|
||||
|
||||
if( uxSchedulerSuspended == ( UBaseType_t ) ( ( char ) 0 ) )
|
||||
{
|
||||
|
|
@ -14997,7 +15024,7 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
TCB_t * pxTCB;
|
||||
BaseType_t xReturn;
|
||||
|
||||
(__builtin_expect(!(uxIndexToClear < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6461, "uxIndexToClear < 1") : (void)0);
|
||||
(__builtin_expect(!(uxIndexToClear < 1), 0) ? __assert_rtn ((const char *)-1L, "tasks.c", 6487, "uxIndexToClear < 1") : (void)0);
|
||||
|
||||
/* If null is passed in here then it is the calling task that is having
|
||||
* its notification state cleared. */
|
||||
|
|
@ -15050,7 +15077,7 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
// # 6530 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 6556 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
||||
|
|
@ -15126,7 +15153,7 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
|||
}
|
||||
}
|
||||
}
|
||||
// # 6642 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
// # 6668 "/Users/reitobia/repos2/FreeRTOS-Kernel/tasks.c"
|
||||
}
|
||||
|
||||
/* Code below here allows additional code to be inserted into this source file,
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ predicate uninit_TCB_p(TCB_t * tcb, int stackSize) =
|
|||
tcb->uxPriority |-> _ &*&
|
||||
|
||||
tcb->pxStack |-> ?stackPtr &*&
|
||||
(char*) stackPtr + stackSize <= (char*) UINTPTR_MAX &*& &*&
|
||||
chars_((char*) stackPtr, stackSize, _) &*&
|
||||
malloc_block_chars((char*) stackPtr, stackSize) &*&
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,10 @@ cd "$START_WD"
|
|||
|
||||
echo "\n\nPreprocessing script finished\n\n"
|
||||
|
||||
# Remarks:
|
||||
# - Need z3v4.5 to handle bitvector arithmetic
|
||||
"$VF_DIR/bin/vfide" "$PP_TASK_C" \
|
||||
-codeFont "$FONT_SIZE" -traceFont "$FONT_SIZE" \
|
||||
-prover z3v4.5
|
||||
# -target 32bit -prover z3v4.5 \
|
||||
# TODO: If we set the target to 32bit, VF create `uint` chunks instead of `char` chunks during malloc
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue