mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2026-07-10 13:29:45 -04:00
Compare commits
16 commits
a8c9d35152
...
9db704cd3b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9db704cd3b | ||
|
|
d72263b404 | ||
|
|
a50edad08b | ||
|
|
ae46383c90 | ||
|
|
49cec3e9b2 | ||
|
|
e146d6444c | ||
|
|
83e56c38ee | ||
|
|
fc25364931 | ||
|
|
543558ba77 | ||
|
|
6f23624451 | ||
|
|
d5d752a9b6 | ||
|
|
97328600db | ||
|
|
950ab4ff91 | ||
|
|
d877cd5398 | ||
|
|
b4005374c7 | ||
|
|
d3b074a01e |
94 changed files with 668 additions and 372 deletions
10
.github/SECURITY.md
vendored
10
.github/SECURITY.md
vendored
|
|
@ -1,3 +1,13 @@
|
||||||
|
## Threat model
|
||||||
|
|
||||||
|
Before reporting an issue, please review the FreeRTOS kernel threat model. It
|
||||||
|
describes the security assumptions the kernel makes, which threats are in scope,
|
||||||
|
and the protections the kernel does and does not provide. Understanding these
|
||||||
|
boundaries helps determine whether an observed behavior is a security
|
||||||
|
vulnerability or expected, documented behavior.
|
||||||
|
|
||||||
|
- [FreeRTOS Kernel Threat Model](https://www.freertos.org/Security/02-Kernel-threat-model)
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security
|
If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security
|
||||||
|
|
|
||||||
38
croutine.c
38
croutine.c
|
|
@ -38,24 +38,26 @@
|
||||||
* than file scope.
|
* than file scope.
|
||||||
*/
|
*/
|
||||||
#ifdef portREMOVE_STATIC_QUALIFIER
|
#ifdef portREMOVE_STATIC_QUALIFIER
|
||||||
#define static
|
#define STATIC
|
||||||
|
#else
|
||||||
|
#define STATIC static
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Lists for ready and blocked co-routines. --------------------*/
|
/* Lists for ready and blocked co-routines. --------------------*/
|
||||||
static List_t pxReadyCoRoutineLists[ configMAX_CO_ROUTINE_PRIORITIES ]; /**< Prioritised ready co-routines. */
|
STATIC List_t pxReadyCoRoutineLists[ configMAX_CO_ROUTINE_PRIORITIES ]; /**< Prioritised ready co-routines. */
|
||||||
static List_t xDelayedCoRoutineList1; /**< Delayed co-routines. */
|
STATIC List_t xDelayedCoRoutineList1; /**< Delayed co-routines. */
|
||||||
static List_t xDelayedCoRoutineList2; /**< Delayed co-routines (two lists are used - one for delays that have overflowed the current tick count. */
|
STATIC List_t xDelayedCoRoutineList2; /**< Delayed co-routines (two lists are used - one for delays that have overflowed the current tick count. */
|
||||||
static List_t * pxDelayedCoRoutineList = NULL; /**< Points to the delayed co-routine list currently being used. */
|
STATIC List_t * pxDelayedCoRoutineList = NULL; /**< Points to the delayed co-routine list currently being used. */
|
||||||
static List_t * pxOverflowDelayedCoRoutineList = NULL; /**< Points to the delayed co-routine list currently being used to hold co-routines that have overflowed the current tick count. */
|
STATIC List_t * pxOverflowDelayedCoRoutineList = NULL; /**< Points to the delayed co-routine list currently being used to hold co-routines that have overflowed the current tick count. */
|
||||||
static List_t xPendingReadyCoRoutineList; /**< Holds co-routines that have been readied by an external event. They cannot be added directly to the ready lists as the ready lists cannot be accessed by interrupts. */
|
STATIC List_t xPendingReadyCoRoutineList; /**< Holds co-routines that have been readied by an external event. They cannot be added directly to the ready lists as the ready lists cannot be accessed by interrupts. */
|
||||||
|
|
||||||
/* Other file private variables. --------------------------------*/
|
/* Other file private variables. --------------------------------*/
|
||||||
CRCB_t * pxCurrentCoRoutine = NULL;
|
CRCB_t * pxCurrentCoRoutine = NULL;
|
||||||
static UBaseType_t uxTopCoRoutineReadyPriority = ( UBaseType_t ) 0U;
|
STATIC UBaseType_t uxTopCoRoutineReadyPriority = ( UBaseType_t ) 0U;
|
||||||
static TickType_t xCoRoutineTickCount = ( TickType_t ) 0U;
|
STATIC TickType_t xCoRoutineTickCount = ( TickType_t ) 0U;
|
||||||
static TickType_t xLastTickCount = ( TickType_t ) 0U;
|
STATIC TickType_t xLastTickCount = ( TickType_t ) 0U;
|
||||||
static TickType_t xPassedTicks = ( TickType_t ) 0U;
|
STATIC TickType_t xPassedTicks = ( TickType_t ) 0U;
|
||||||
|
|
||||||
/* The initial state of the co-routine when it is created. */
|
/* The initial state of the co-routine when it is created. */
|
||||||
#define corINITIAL_STATE ( 0 )
|
#define corINITIAL_STATE ( 0 )
|
||||||
|
|
@ -80,7 +82,7 @@
|
||||||
* Utility to ready all the lists used by the scheduler. This is called
|
* Utility to ready all the lists used by the scheduler. This is called
|
||||||
* automatically upon the creation of the first co-routine.
|
* automatically upon the creation of the first co-routine.
|
||||||
*/
|
*/
|
||||||
static void prvInitialiseCoRoutineLists( void );
|
STATIC void prvInitialiseCoRoutineLists( void );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Co-routines that are readied by an interrupt cannot be placed directly into
|
* Co-routines that are readied by an interrupt cannot be placed directly into
|
||||||
|
|
@ -88,7 +90,7 @@
|
||||||
* in the pending ready list in order that they can later be moved to the ready
|
* in the pending ready list in order that they can later be moved to the ready
|
||||||
* list by the co-routine scheduler.
|
* list by the co-routine scheduler.
|
||||||
*/
|
*/
|
||||||
static void prvCheckPendingReadyList( void );
|
STATIC void prvCheckPendingReadyList( void );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Macro that looks at the list of co-routines that are currently delayed to
|
* Macro that looks at the list of co-routines that are currently delayed to
|
||||||
|
|
@ -98,7 +100,7 @@
|
||||||
* meaning once one co-routine has been found whose timer has not expired
|
* meaning once one co-routine has been found whose timer has not expired
|
||||||
* we need not look any further down the list.
|
* we need not look any further down the list.
|
||||||
*/
|
*/
|
||||||
static void prvCheckDelayedList( void );
|
STATIC void prvCheckDelayedList( void );
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
@ -212,7 +214,7 @@
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvCheckPendingReadyList( void )
|
STATIC void prvCheckPendingReadyList( void )
|
||||||
{
|
{
|
||||||
/* Are there any co-routines waiting to get moved to the ready list? These
|
/* Are there any co-routines waiting to get moved to the ready list? These
|
||||||
* are co-routines that have been readied by an ISR. The ISR cannot access
|
* are co-routines that have been readied by an ISR. The ISR cannot access
|
||||||
|
|
@ -235,7 +237,7 @@
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvCheckDelayedList( void )
|
STATIC void prvCheckDelayedList( void )
|
||||||
{
|
{
|
||||||
CRCB_t * pxCRCB;
|
CRCB_t * pxCRCB;
|
||||||
|
|
||||||
|
|
@ -333,7 +335,7 @@
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvInitialiseCoRoutineLists( void )
|
STATIC void prvInitialiseCoRoutineLists( void )
|
||||||
{
|
{
|
||||||
UBaseType_t uxPriority;
|
UBaseType_t uxPriority;
|
||||||
|
|
||||||
|
|
@ -402,4 +404,4 @@
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#endif /* configUSE_CO_ROUTINES == 0 */
|
#endif /* configUSE_CO_ROUTINES != 0 */
|
||||||
|
|
|
||||||
|
|
@ -136,7 +136,7 @@
|
||||||
*
|
*
|
||||||
* Defining configTICK_TYPE_WIDTH_IN_BITS as TICK_TYPE_WIDTH_64_BITS causes
|
* Defining configTICK_TYPE_WIDTH_IN_BITS as TICK_TYPE_WIDTH_64_BITS causes
|
||||||
* TickType_t to be defined (typedef'ed) as an unsigned 64-bit type. */
|
* TickType_t to be defined (typedef'ed) as an unsigned 64-bit type. */
|
||||||
#define configTICK_TYPE_WIDTH_IN_BITS TICK_TYPE_WIDTH_64_BITS
|
#define configTICK_TYPE_WIDTH_IN_BITS TICK_TYPE_WIDTH_32_BITS
|
||||||
|
|
||||||
/* Set configIDLE_SHOULD_YIELD to 1 to have the Idle task yield to an
|
/* Set configIDLE_SHOULD_YIELD to 1 to have the Idle task yield to an
|
||||||
* application task if there is an Idle priority (priority 0) application task
|
* application task if there is an Idle priority (priority 0) application task
|
||||||
|
|
@ -558,6 +558,13 @@
|
||||||
* tskNO_AFFINITY if left undefined. */
|
* tskNO_AFFINITY if left undefined. */
|
||||||
#define configTIMER_SERVICE_TASK_CORE_AFFINITY tskNO_AFFINITY
|
#define configTIMER_SERVICE_TASK_CORE_AFFINITY tskNO_AFFINITY
|
||||||
|
|
||||||
|
/* When using SMP (i.e. configNUMBER_OF_CORES is greater than one), set
|
||||||
|
* configIDLE_AFFINITY to 1 to pin each Idle task to its corresponding
|
||||||
|
* core. When set to 1, Idle task N will only run on core N, using an affinity
|
||||||
|
* mask of (1 << N). Set to 0 to allow the scheduler to run Idle tasks on any
|
||||||
|
* available core. Defaults to 0 if left undefined. */
|
||||||
|
#define configIDLE_AFFINITY 0
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/* ARMv8-M secure side port related definitions. ******************************/
|
/* ARMv8-M secure side port related definitions. ******************************/
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
|
||||||
|
|
@ -377,6 +377,10 @@
|
||||||
#define configIDLE_SHOULD_YIELD 1
|
#define configIDLE_SHOULD_YIELD 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef configIDLE_AFFINITY
|
||||||
|
#define configIDLE_AFFINITY 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if configMAX_TASK_NAME_LEN < 1
|
#if configMAX_TASK_NAME_LEN < 1
|
||||||
#error configMAX_TASK_NAME_LEN must be set to a minimum of 1 in FreeRTOSConfig.h
|
#error configMAX_TASK_NAME_LEN must be set to a minimum of 1 in FreeRTOSConfig.h
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -369,6 +369,9 @@ BaseType_t MPU_xTimerGenericCommandFromISR( TimerHandle_t xTimer,
|
||||||
BaseType_t * const pxHigherPriorityTaskWoken,
|
BaseType_t * const pxHigherPriorityTaskWoken,
|
||||||
const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
BaseType_t MPU_xTimerDelete( TimerHandle_t xTimer,
|
||||||
|
TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/* MPU versions of event_group.h API functions. */
|
/* MPU versions of event_group.h API functions. */
|
||||||
EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup,
|
EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup,
|
||||||
const EventBits_t uxBitsToWaitFor,
|
const EventBits_t uxBitsToWaitFor,
|
||||||
|
|
|
||||||
|
|
@ -190,6 +190,7 @@
|
||||||
#define xTimerCreateStatic MPU_xTimerCreateStatic
|
#define xTimerCreateStatic MPU_xTimerCreateStatic
|
||||||
#define xTimerGetStaticBuffer MPU_xTimerGetStaticBuffer
|
#define xTimerGetStaticBuffer MPU_xTimerGetStaticBuffer
|
||||||
#define xTimerGenericCommandFromISR MPU_xTimerGenericCommandFromISR
|
#define xTimerGenericCommandFromISR MPU_xTimerGenericCommandFromISR
|
||||||
|
#define xTimerDelete MPU_xTimerDelete
|
||||||
#endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
|
#endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
|
||||||
|
|
||||||
/* Map standard event_group.h API functions to the MPU equivalents. */
|
/* Map standard event_group.h API functions to the MPU equivalents. */
|
||||||
|
|
|
||||||
|
|
@ -548,6 +548,14 @@ typedef enum
|
||||||
* The function parameters define the memory regions and associated access
|
* The function parameters define the memory regions and associated access
|
||||||
* permissions allocated to the task.
|
* permissions allocated to the task.
|
||||||
*
|
*
|
||||||
|
* The parameter macros used in MemoryRegion_t.ulParameters are port specific.
|
||||||
|
* Some ports, including the Cortex-M3/4 MPU ports, use the portMPU_REGION_*
|
||||||
|
* values shown below.
|
||||||
|
* ARMv8-M MPU ports, such as CM23, CM33, CM52, CM55, CM85 and STAR_MC3, use
|
||||||
|
* the tskMPU_REGION_* values defined in this header; the port translates them
|
||||||
|
* into MPU register settings. Check the selected port's headers before selecting
|
||||||
|
* the region parameter macros.
|
||||||
|
*
|
||||||
* See xTaskCreateRestrictedStatic() for a version that does not use any
|
* See xTaskCreateRestrictedStatic() for a version that does not use any
|
||||||
* dynamic memory allocation.
|
* dynamic memory allocation.
|
||||||
*
|
*
|
||||||
|
|
@ -639,6 +647,14 @@ typedef enum
|
||||||
* xTaskCreateRestrictedStatic() therefore allows a memory protected task to be
|
* xTaskCreateRestrictedStatic() therefore allows a memory protected task to be
|
||||||
* created without using any dynamic memory allocation.
|
* created without using any dynamic memory allocation.
|
||||||
*
|
*
|
||||||
|
* The parameter macros used in MemoryRegion_t.ulParameters are port specific.
|
||||||
|
* Some ports, including the Cortex-M3/4 MPU ports, use the portMPU_REGION_*
|
||||||
|
* values shown below.
|
||||||
|
* ARMv8-M MPU ports, such as CM23, CM33, CM52, CM55, CM85 and STAR_MC3, use
|
||||||
|
* the tskMPU_REGION_* values defined in this header; the port translates them
|
||||||
|
* into MPU register settings. Check the selected port's headers before selecting
|
||||||
|
* the region parameter macros.
|
||||||
|
*
|
||||||
* @param pxTaskDefinition Pointer to a structure that contains a member
|
* @param pxTaskDefinition Pointer to a structure that contains a member
|
||||||
* for each of the normal xTaskCreate() parameters (see the xTaskCreate() API
|
* for each of the normal xTaskCreate() parameters (see the xTaskCreate() API
|
||||||
* documentation) plus an optional stack buffer and the memory region
|
* documentation) plus an optional stack buffer and the memory region
|
||||||
|
|
@ -728,6 +744,14 @@ typedef enum
|
||||||
* @param[in] pxRegions A pointer to a MemoryRegion_t structure that contains the
|
* @param[in] pxRegions A pointer to a MemoryRegion_t structure that contains the
|
||||||
* new memory region definitions.
|
* new memory region definitions.
|
||||||
*
|
*
|
||||||
|
* The parameter macros used in MemoryRegion_t.ulParameters are port specific.
|
||||||
|
* Some ports, including the Cortex-M3/4 MPU ports, use the portMPU_REGION_*
|
||||||
|
* values shown below.
|
||||||
|
* ARMv8-M MPU ports, such as CM23, CM33, CM52, CM55, CM85 and STAR_MC3, use
|
||||||
|
* the tskMPU_REGION_* values defined in this header; the port translates them
|
||||||
|
* into MPU register settings. Check the selected port's headers before selecting
|
||||||
|
* the region parameter macros.
|
||||||
|
*
|
||||||
* Example usage:
|
* Example usage:
|
||||||
* @code{c}
|
* @code{c}
|
||||||
* // Define an array of MemoryRegion_t structures that configures an MPU region
|
* // Define an array of MemoryRegion_t structures that configures an MPU region
|
||||||
|
|
@ -1050,7 +1074,7 @@ UBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask ) PRIVILEGED_FUNC
|
||||||
*
|
*
|
||||||
* @return The base priority of xTask.
|
* @return The base priority of xTask.
|
||||||
*
|
*
|
||||||
* \defgroup uxTaskPriorityGet uxTaskBasePriorityGet
|
* \defgroup uxTaskBasePriorityGet uxTaskBasePriorityGet
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
UBaseType_t uxTaskBasePriorityGet( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
UBaseType_t uxTaskBasePriorityGet( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
|
||||||
|
|
@ -667,8 +667,13 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION;
|
||||||
*
|
*
|
||||||
* See the xTimerChangePeriod() API function example usage scenario.
|
* See the xTimerChangePeriod() API function example usage scenario.
|
||||||
*/
|
*/
|
||||||
#define xTimerDelete( xTimer, xTicksToWait ) \
|
#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
BaseType_t xTimerDelete( TimerHandle_t xTimer,
|
||||||
|
TickType_t xTicksToWait );
|
||||||
|
#else
|
||||||
|
#define xTimerDelete( xTimer, xTicksToWait ) \
|
||||||
xTimerGenericCommand( ( xTimer ), tmrCOMMAND_DELETE, 0U, NULL, ( xTicksToWait ) )
|
xTimerGenericCommand( ( xTimer ), tmrCOMMAND_DELETE, 0U, NULL, ( xTicksToWait ) )
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
* BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,12 @@
|
||||||
#error Cortex-M23 does not have a Floating Point Unit (FPU) and therefore configENABLE_FPU must be set to 0.
|
#error Cortex-M23 does not have a Floating Point Unit (FPU) and therefore configENABLE_FPU must be set to 0.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ( configENABLE_MPU == 1 )
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
|
||||||
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
||||||
|
|
@ -590,15 +596,16 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
|
||||||
(
|
(
|
||||||
" .syntax unified \n"
|
" .syntax unified \n"
|
||||||
" \n"
|
" \n"
|
||||||
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
|
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
|
||||||
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
|
" adds r2, r2, %0 \n" /* r2 = r2 + SECURE_CONTEXT_OFFSET. */
|
||||||
|
" ldr r1, [r2] \n" /* Read xSecureContext from the task's context. */
|
||||||
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
" bne free_secure_context \n" /* Branch if r1 != 0. */
|
" bne free_secure_context \n" /* Branch if r1 != 0. */
|
||||||
" bx lr \n" /* There is no secure context (xSecureContext is NULL). */
|
" bx lr \n" /* There is no secure context (xSecureContext is NULL). */
|
||||||
" free_secure_context: \n"
|
" free_secure_context: \n"
|
||||||
" svc %0 \n" /* Secure context is freed in the supervisor call. */
|
" svc %1 \n" /* Secure context is freed in the supervisor call. */
|
||||||
" bx lr \n" /* Return. */
|
" bx lr \n" /* Return. */
|
||||||
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,16 @@
|
||||||
* header files. */
|
* header files. */
|
||||||
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ( configENABLE_MPU == 1 )
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
|
||||||
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
||||||
|
|
@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
|
||||||
(
|
(
|
||||||
" .syntax unified \n"
|
" .syntax unified \n"
|
||||||
" \n"
|
" \n"
|
||||||
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
|
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
|
||||||
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
|
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
|
||||||
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
" it ne \n"
|
" it ne \n"
|
||||||
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
|
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
|
||||||
" bx lr \n" /* Return. */
|
" bx lr \n" /* Return. */
|
||||||
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,12 @@ files (__ICCARM__ is defined by the IAR C compiler but not by the IAR assembler.
|
||||||
#define configUSE_MPU_WRAPPERS_V1 0
|
#define configUSE_MPU_WRAPPERS_V1 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
EXTERN pxCurrentTCB
|
EXTERN pxCurrentTCB
|
||||||
EXTERN xSecureContext
|
EXTERN xSecureContext
|
||||||
|
|
@ -512,8 +518,9 @@ SVC_Handler:
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
vPortFreeSecureContext:
|
vPortFreeSecureContext:
|
||||||
ldr r2, [r0] /* The first item in the TCB is the top of the stack. */
|
ldr r2, [r0] /* The first item in the TCB is the stored context location. */
|
||||||
ldr r1, [r2] /* The first item on the stack is the task's xSecureContext. */
|
adds r2, r2, #SECURE_CONTEXT_OFFSET /* r2 = r2 + SECURE_CONTEXT_OFFSET. */
|
||||||
|
ldr r1, [r2] /* Read xSecureContext from the task's context. */
|
||||||
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
bne free_secure_context /* Branch if r1 != 0. */
|
bne free_secure_context /* Branch if r1 != 0. */
|
||||||
bx lr /* There is no secure context (xSecureContext is NULL). */
|
bx lr /* There is no secure context (xSecureContext is NULL). */
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,16 @@ files (__ICCARM__ is defined by the IAR C compiler but not by the IAR assembler.
|
||||||
#define configUSE_MPU_WRAPPERS_V1 0
|
#define configUSE_MPU_WRAPPERS_V1 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
EXTERN pxCurrentTCB
|
EXTERN pxCurrentTCB
|
||||||
EXTERN xSecureContext
|
EXTERN xSecureContext
|
||||||
EXTERN vTaskSwitchContext
|
EXTERN vTaskSwitchContext
|
||||||
|
|
@ -532,8 +542,8 @@ SVC_Handler:
|
||||||
|
|
||||||
vPortFreeSecureContext:
|
vPortFreeSecureContext:
|
||||||
/* r0 = uint32_t *pulTCB. */
|
/* r0 = uint32_t *pulTCB. */
|
||||||
ldr r2, [r0] /* The first item in the TCB is the top of the stack. */
|
ldr r2, [r0] /* The first item in the TCB is the stored context location. */
|
||||||
ldr r1, [r2] /* The first item on the stack is the task's xSecureContext. */
|
ldr r1, [r2, #SECURE_CONTEXT_OFFSET] /* Read xSecureContext from the task's context. */
|
||||||
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
it ne
|
it ne
|
||||||
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -3890,6 +3890,40 @@
|
||||||
#endif /* if ( configUSE_TIMERS == 1 ) */
|
#endif /* if ( configUSE_TIMERS == 1 ) */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if ( configUSE_TIMERS == 1 )
|
||||||
|
|
||||||
|
BaseType_t MPU_xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait ) /* PRIVILEGED_FUNCTION */
|
||||||
|
{
|
||||||
|
BaseType_t xReturn = pdFALSE;
|
||||||
|
TimerHandle_t xInternalTimerHandle = NULL;
|
||||||
|
int32_t lIndex;
|
||||||
|
|
||||||
|
lIndex = ( int32_t ) xTimer;
|
||||||
|
|
||||||
|
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
|
||||||
|
{
|
||||||
|
xInternalTimerHandle = MPU_GetTimerHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
|
||||||
|
|
||||||
|
if( xInternalTimerHandle != NULL )
|
||||||
|
{
|
||||||
|
xReturn = xTimerGenericCommandFromTask( xInternalTimerHandle,
|
||||||
|
tmrCOMMAND_DELETE,
|
||||||
|
0U, /* xOptionalValue */
|
||||||
|
NULL, /* pxHigherPriorityTaskWoken */
|
||||||
|
xTicksToWait );
|
||||||
|
if( xReturn != pdFALSE )
|
||||||
|
{
|
||||||
|
MPU_SetIndexFreeInKernelObjectPool( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* if ( configUSE_TIMERS == 1 ) */
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
/* MPU wrappers for event group APIs. */
|
/* MPU wrappers for event group APIs. */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,12 @@
|
||||||
#error Cortex-M23 does not have a Floating Point Unit (FPU) and therefore configENABLE_FPU must be set to 0.
|
#error Cortex-M23 does not have a Floating Point Unit (FPU) and therefore configENABLE_FPU must be set to 0.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ( configENABLE_MPU == 1 )
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
|
||||||
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
||||||
|
|
@ -590,15 +596,16 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
|
||||||
(
|
(
|
||||||
" .syntax unified \n"
|
" .syntax unified \n"
|
||||||
" \n"
|
" \n"
|
||||||
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
|
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
|
||||||
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
|
" adds r2, r2, %0 \n" /* r2 = r2 + SECURE_CONTEXT_OFFSET. */
|
||||||
|
" ldr r1, [r2] \n" /* Read xSecureContext from the task's context. */
|
||||||
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
" bne free_secure_context \n" /* Branch if r1 != 0. */
|
" bne free_secure_context \n" /* Branch if r1 != 0. */
|
||||||
" bx lr \n" /* There is no secure context (xSecureContext is NULL). */
|
" bx lr \n" /* There is no secure context (xSecureContext is NULL). */
|
||||||
" free_secure_context: \n"
|
" free_secure_context: \n"
|
||||||
" svc %0 \n" /* Secure context is freed in the supervisor call. */
|
" svc %1 \n" /* Secure context is freed in the supervisor call. */
|
||||||
" bx lr \n" /* Return. */
|
" bx lr \n" /* Return. */
|
||||||
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,16 @@
|
||||||
* header files. */
|
* header files. */
|
||||||
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ( configENABLE_MPU == 1 )
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
|
||||||
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
||||||
|
|
@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
|
||||||
(
|
(
|
||||||
" .syntax unified \n"
|
" .syntax unified \n"
|
||||||
" \n"
|
" \n"
|
||||||
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
|
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
|
||||||
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
|
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
|
||||||
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
" it ne \n"
|
" it ne \n"
|
||||||
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
|
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
|
||||||
" bx lr \n" /* Return. */
|
" bx lr \n" /* Return. */
|
||||||
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,16 @@
|
||||||
* header files. */
|
* header files. */
|
||||||
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ( configENABLE_MPU == 1 )
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
|
||||||
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
||||||
|
|
@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
|
||||||
(
|
(
|
||||||
" .syntax unified \n"
|
" .syntax unified \n"
|
||||||
" \n"
|
" \n"
|
||||||
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
|
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
|
||||||
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
|
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
|
||||||
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
" it ne \n"
|
" it ne \n"
|
||||||
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
|
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
|
||||||
" bx lr \n" /* Return. */
|
" bx lr \n" /* Return. */
|
||||||
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -55,9 +55,19 @@
|
||||||
#define portNVIC_SYSTICK_CLK ( 0 )
|
#define portNVIC_SYSTICK_CLK ( 0 )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Unprivileged critical sections are not supported when using MPU wrappers
|
||||||
|
* version 2. Default the option to 0 and reject an explicit value of 1. */
|
||||||
#ifndef configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS
|
#ifndef configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS
|
||||||
|
#if ( configUSE_MPU_WRAPPERS_V1 == 0 )
|
||||||
|
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 0
|
||||||
|
#else
|
||||||
#warning "configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not defined. We recommend defining it to 0 in FreeRTOSConfig.h for better security."
|
#warning "configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not defined. We recommend defining it to 0 in FreeRTOSConfig.h for better security."
|
||||||
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 1
|
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 1
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#if ( ( configUSE_MPU_WRAPPERS_V1 == 0 ) && ( configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS == 1 ) )
|
||||||
|
#error configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not supported with MPU wrappers version 2 ( configUSE_MPU_WRAPPERS_V1 == 0 ).
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Prototype of all Interrupt Service Routines (ISRs). */
|
/* Prototype of all Interrupt Service Routines (ISRs). */
|
||||||
|
|
|
||||||
|
|
@ -59,9 +59,19 @@
|
||||||
#define portNVIC_SYSTICK_CLK ( 0 )
|
#define portNVIC_SYSTICK_CLK ( 0 )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Unprivileged critical sections are not supported when using MPU wrappers
|
||||||
|
* version 2. Default the option to 0 and reject an explicit value of 1. */
|
||||||
#ifndef configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS
|
#ifndef configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS
|
||||||
|
#if ( configUSE_MPU_WRAPPERS_V1 == 0 )
|
||||||
|
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 0
|
||||||
|
#else
|
||||||
#warning "configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not defined. We recommend defining it to 0 in FreeRTOSConfig.h for better security."
|
#warning "configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not defined. We recommend defining it to 0 in FreeRTOSConfig.h for better security."
|
||||||
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 1
|
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 1
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#if ( ( configUSE_MPU_WRAPPERS_V1 == 0 ) && ( configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS == 1 ) )
|
||||||
|
#error configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not supported with MPU wrappers version 2 ( configUSE_MPU_WRAPPERS_V1 == 0 ).
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Prototype of all Interrupt Service Routines (ISRs). */
|
/* Prototype of all Interrupt Service Routines (ISRs). */
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,16 @@
|
||||||
* header files. */
|
* header files. */
|
||||||
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ( configENABLE_MPU == 1 )
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
|
||||||
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
||||||
|
|
@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
|
||||||
(
|
(
|
||||||
" .syntax unified \n"
|
" .syntax unified \n"
|
||||||
" \n"
|
" \n"
|
||||||
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
|
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
|
||||||
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
|
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
|
||||||
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
" it ne \n"
|
" it ne \n"
|
||||||
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
|
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
|
||||||
" bx lr \n" /* Return. */
|
" bx lr \n" /* Return. */
|
||||||
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,16 @@
|
||||||
* header files. */
|
* header files. */
|
||||||
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ( configENABLE_MPU == 1 )
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
|
||||||
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
||||||
|
|
@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
|
||||||
(
|
(
|
||||||
" .syntax unified \n"
|
" .syntax unified \n"
|
||||||
" \n"
|
" \n"
|
||||||
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
|
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
|
||||||
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
|
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
|
||||||
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
" it ne \n"
|
" it ne \n"
|
||||||
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
|
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
|
||||||
" bx lr \n" /* Return. */
|
" bx lr \n" /* Return. */
|
||||||
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,16 @@
|
||||||
* header files. */
|
* header files. */
|
||||||
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ( configENABLE_MPU == 1 )
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
|
||||||
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
||||||
|
|
@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
|
||||||
(
|
(
|
||||||
" .syntax unified \n"
|
" .syntax unified \n"
|
||||||
" \n"
|
" \n"
|
||||||
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
|
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
|
||||||
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
|
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
|
||||||
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
" it ne \n"
|
" it ne \n"
|
||||||
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
|
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
|
||||||
" bx lr \n" /* Return. */
|
" bx lr \n" /* Return. */
|
||||||
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@
|
||||||
.global vPortRestoreTaskContext
|
.global vPortRestoreTaskContext
|
||||||
.global vPortInitialiseFPSCR
|
.global vPortInitialiseFPSCR
|
||||||
.global ulReadAPSR
|
.global ulReadAPSR
|
||||||
.global vPortYield
|
.weak vPortYield
|
||||||
.global vPortEnableInterrupts
|
.global vPortEnableInterrupts
|
||||||
.global vPortDisableInterrupts
|
.global vPortDisableInterrupts
|
||||||
.global ulPortSetInterruptMaskFromISR
|
.global ulPortSetInterruptMaskFromISR
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,16 @@
|
||||||
* header files. */
|
* header files. */
|
||||||
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ( configENABLE_MPU == 1 )
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
|
||||||
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
|
||||||
|
|
@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
|
||||||
(
|
(
|
||||||
" .syntax unified \n"
|
" .syntax unified \n"
|
||||||
" \n"
|
" \n"
|
||||||
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
|
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
|
||||||
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
|
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
|
||||||
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
" it ne \n"
|
" it ne \n"
|
||||||
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
|
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
|
||||||
" bx lr \n" /* Return. */
|
" bx lr \n" /* Return. */
|
||||||
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,12 @@ files (__ICCARM__ is defined by the IAR C compiler but not by the IAR assembler.
|
||||||
#define configUSE_MPU_WRAPPERS_V1 0
|
#define configUSE_MPU_WRAPPERS_V1 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
EXTERN pxCurrentTCB
|
EXTERN pxCurrentTCB
|
||||||
EXTERN xSecureContext
|
EXTERN xSecureContext
|
||||||
|
|
@ -512,8 +518,9 @@ SVC_Handler:
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
vPortFreeSecureContext:
|
vPortFreeSecureContext:
|
||||||
ldr r2, [r0] /* The first item in the TCB is the top of the stack. */
|
ldr r2, [r0] /* The first item in the TCB is the stored context location. */
|
||||||
ldr r1, [r2] /* The first item on the stack is the task's xSecureContext. */
|
adds r2, r2, #SECURE_CONTEXT_OFFSET /* r2 = r2 + SECURE_CONTEXT_OFFSET. */
|
||||||
|
ldr r1, [r2] /* Read xSecureContext from the task's context. */
|
||||||
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
bne free_secure_context /* Branch if r1 != 0. */
|
bne free_secure_context /* Branch if r1 != 0. */
|
||||||
bx lr /* There is no secure context (xSecureContext is NULL). */
|
bx lr /* There is no secure context (xSecureContext is NULL). */
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,16 @@ files (__ICCARM__ is defined by the IAR C compiler but not by the IAR assembler.
|
||||||
#define configUSE_MPU_WRAPPERS_V1 0
|
#define configUSE_MPU_WRAPPERS_V1 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
EXTERN pxCurrentTCB
|
EXTERN pxCurrentTCB
|
||||||
EXTERN xSecureContext
|
EXTERN xSecureContext
|
||||||
EXTERN vTaskSwitchContext
|
EXTERN vTaskSwitchContext
|
||||||
|
|
@ -532,8 +542,8 @@ SVC_Handler:
|
||||||
|
|
||||||
vPortFreeSecureContext:
|
vPortFreeSecureContext:
|
||||||
/* r0 = uint32_t *pulTCB. */
|
/* r0 = uint32_t *pulTCB. */
|
||||||
ldr r2, [r0] /* The first item in the TCB is the top of the stack. */
|
ldr r2, [r0] /* The first item in the TCB is the stored context location. */
|
||||||
ldr r1, [r2] /* The first item on the stack is the task's xSecureContext. */
|
ldr r1, [r2, #SECURE_CONTEXT_OFFSET] /* Read xSecureContext from the task's context. */
|
||||||
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
it ne
|
it ne
|
||||||
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,16 @@ files (__ICCARM__ is defined by the IAR C compiler but not by the IAR assembler.
|
||||||
#define configUSE_MPU_WRAPPERS_V1 0
|
#define configUSE_MPU_WRAPPERS_V1 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
EXTERN pxCurrentTCB
|
EXTERN pxCurrentTCB
|
||||||
EXTERN xSecureContext
|
EXTERN xSecureContext
|
||||||
EXTERN vTaskSwitchContext
|
EXTERN vTaskSwitchContext
|
||||||
|
|
@ -532,8 +542,8 @@ SVC_Handler:
|
||||||
|
|
||||||
vPortFreeSecureContext:
|
vPortFreeSecureContext:
|
||||||
/* r0 = uint32_t *pulTCB. */
|
/* r0 = uint32_t *pulTCB. */
|
||||||
ldr r2, [r0] /* The first item in the TCB is the top of the stack. */
|
ldr r2, [r0] /* The first item in the TCB is the stored context location. */
|
||||||
ldr r1, [r2] /* The first item on the stack is the task's xSecureContext. */
|
ldr r1, [r2, #SECURE_CONTEXT_OFFSET] /* Read xSecureContext from the task's context. */
|
||||||
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
it ne
|
it ne
|
||||||
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -66,9 +66,19 @@
|
||||||
#define portNVIC_SYSTICK_CLK_BIT ( 0 )
|
#define portNVIC_SYSTICK_CLK_BIT ( 0 )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Unprivileged critical sections are not supported when using MPU wrappers
|
||||||
|
* version 2. Default the option to 0 and reject an explicit value of 1. */
|
||||||
#ifndef configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS
|
#ifndef configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS
|
||||||
|
#if ( configUSE_MPU_WRAPPERS_V1 == 0 )
|
||||||
|
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 0
|
||||||
|
#else
|
||||||
#warning "configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not defined. We recommend defining it to 0 in FreeRTOSConfig.h for better security."
|
#warning "configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not defined. We recommend defining it to 0 in FreeRTOSConfig.h for better security."
|
||||||
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 1
|
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 1
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#if ( ( configUSE_MPU_WRAPPERS_V1 == 0 ) && ( configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS == 1 ) )
|
||||||
|
#error configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not supported with MPU wrappers version 2 ( configUSE_MPU_WRAPPERS_V1 == 0 ).
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Prototype of all Interrupt Service Routines (ISRs). */
|
/* Prototype of all Interrupt Service Routines (ISRs). */
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,16 @@ files (__ICCARM__ is defined by the IAR C compiler but not by the IAR assembler.
|
||||||
#define configUSE_MPU_WRAPPERS_V1 0
|
#define configUSE_MPU_WRAPPERS_V1 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
EXTERN pxCurrentTCB
|
EXTERN pxCurrentTCB
|
||||||
EXTERN xSecureContext
|
EXTERN xSecureContext
|
||||||
EXTERN vTaskSwitchContext
|
EXTERN vTaskSwitchContext
|
||||||
|
|
@ -532,8 +542,8 @@ SVC_Handler:
|
||||||
|
|
||||||
vPortFreeSecureContext:
|
vPortFreeSecureContext:
|
||||||
/* r0 = uint32_t *pulTCB. */
|
/* r0 = uint32_t *pulTCB. */
|
||||||
ldr r2, [r0] /* The first item in the TCB is the top of the stack. */
|
ldr r2, [r0] /* The first item in the TCB is the stored context location. */
|
||||||
ldr r1, [r2] /* The first item on the stack is the task's xSecureContext. */
|
ldr r1, [r2, #SECURE_CONTEXT_OFFSET] /* Read xSecureContext from the task's context. */
|
||||||
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
it ne
|
it ne
|
||||||
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,16 @@ files (__ICCARM__ is defined by the IAR C compiler but not by the IAR assembler.
|
||||||
#define configUSE_MPU_WRAPPERS_V1 0
|
#define configUSE_MPU_WRAPPERS_V1 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
EXTERN pxCurrentTCB
|
EXTERN pxCurrentTCB
|
||||||
EXTERN xSecureContext
|
EXTERN xSecureContext
|
||||||
EXTERN vTaskSwitchContext
|
EXTERN vTaskSwitchContext
|
||||||
|
|
@ -532,8 +542,8 @@ SVC_Handler:
|
||||||
|
|
||||||
vPortFreeSecureContext:
|
vPortFreeSecureContext:
|
||||||
/* r0 = uint32_t *pulTCB. */
|
/* r0 = uint32_t *pulTCB. */
|
||||||
ldr r2, [r0] /* The first item in the TCB is the top of the stack. */
|
ldr r2, [r0] /* The first item in the TCB is the stored context location. */
|
||||||
ldr r1, [r2] /* The first item on the stack is the task's xSecureContext. */
|
ldr r1, [r2, #SECURE_CONTEXT_OFFSET] /* Read xSecureContext from the task's context. */
|
||||||
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
it ne
|
it ne
|
||||||
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,16 @@ files (__ICCARM__ is defined by the IAR C compiler but not by the IAR assembler.
|
||||||
#define configUSE_MPU_WRAPPERS_V1 0
|
#define configUSE_MPU_WRAPPERS_V1 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
EXTERN pxCurrentTCB
|
EXTERN pxCurrentTCB
|
||||||
EXTERN xSecureContext
|
EXTERN xSecureContext
|
||||||
EXTERN vTaskSwitchContext
|
EXTERN vTaskSwitchContext
|
||||||
|
|
@ -532,8 +542,8 @@ SVC_Handler:
|
||||||
|
|
||||||
vPortFreeSecureContext:
|
vPortFreeSecureContext:
|
||||||
/* r0 = uint32_t *pulTCB. */
|
/* r0 = uint32_t *pulTCB. */
|
||||||
ldr r2, [r0] /* The first item in the TCB is the top of the stack. */
|
ldr r2, [r0] /* The first item in the TCB is the stored context location. */
|
||||||
ldr r1, [r2] /* The first item on the stack is the task's xSecureContext. */
|
ldr r1, [r2, #SECURE_CONTEXT_OFFSET] /* Read xSecureContext from the task's context. */
|
||||||
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
it ne
|
it ne
|
||||||
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,16 @@ files (__ICCARM__ is defined by the IAR C compiler but not by the IAR assembler.
|
||||||
#define configUSE_MPU_WRAPPERS_V1 0
|
#define configUSE_MPU_WRAPPERS_V1 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ( configENABLE_MPU == 1 )
|
||||||
|
#if ( configENABLE_PAC == 1 )
|
||||||
|
#define SECURE_CONTEXT_OFFSET -36
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET -20
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define SECURE_CONTEXT_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
EXTERN pxCurrentTCB
|
EXTERN pxCurrentTCB
|
||||||
EXTERN xSecureContext
|
EXTERN xSecureContext
|
||||||
EXTERN vTaskSwitchContext
|
EXTERN vTaskSwitchContext
|
||||||
|
|
@ -532,8 +542,8 @@ SVC_Handler:
|
||||||
|
|
||||||
vPortFreeSecureContext:
|
vPortFreeSecureContext:
|
||||||
/* r0 = uint32_t *pulTCB. */
|
/* r0 = uint32_t *pulTCB. */
|
||||||
ldr r2, [r0] /* The first item in the TCB is the top of the stack. */
|
ldr r2, [r0] /* The first item in the TCB is the stored context location. */
|
||||||
ldr r1, [r2] /* The first item on the stack is the task's xSecureContext. */
|
ldr r1, [r2, #SECURE_CONTEXT_OFFSET] /* Read xSecureContext from the task's context. */
|
||||||
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
|
||||||
it ne
|
it ne
|
||||||
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -550,6 +550,11 @@ portDONT_DISCARD void vPortSVCHandler_C( uint32_t * pulCallerStackAddress ) PRIV
|
||||||
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
extern BaseType_t configWAKE_SECONDARY_CORES( void );
|
||||||
|
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures interrupt priorities.
|
||||||
|
*/
|
||||||
|
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
#if ( ( configENABLE_MPU == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#ifndef PORTMACROCOMMON_H
|
#ifndef PORTMACROCOMMON_H
|
||||||
#define PORTMACROCOMMON_H
|
#define PORTMACROCOMMON_H
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -153,11 +151,6 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
|
||||||
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
void vApplicationGenerateTaskRandomPacKey( uint32_t * pulTaskPacKey );
|
||||||
|
|
||||||
#endif /* configENABLE_PAC */
|
#endif /* configENABLE_PAC */
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Configures interrupt priorities.
|
|
||||||
*/
|
|
||||||
void vPortConfigureInterruptPriorities( void ) PRIVILEGED_FUNCTION;
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -284,8 +284,15 @@ void * pvPortMalloc( size_t xWantedSize )
|
||||||
{
|
{
|
||||||
pxPreviousBlock = pxBlock;
|
pxPreviousBlock = pxBlock;
|
||||||
pxBlock = heapPROTECT_BLOCK_POINTER( pxBlock->pxNextFreeBlock );
|
pxBlock = heapPROTECT_BLOCK_POINTER( pxBlock->pxNextFreeBlock );
|
||||||
|
|
||||||
|
/* pxEnd is the end marker of the free list. It is located at
|
||||||
|
* pucHeapHighAddress and is not part of the usable heap, so it
|
||||||
|
* must be excluded from the heap block pointer validation. */
|
||||||
|
if( pxBlock != pxEnd )
|
||||||
|
{
|
||||||
heapVALIDATE_BLOCK_POINTER( pxBlock );
|
heapVALIDATE_BLOCK_POINTER( pxBlock );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* If the end marker was reached then a block of adequate size
|
/* If the end marker was reached then a block of adequate size
|
||||||
* was not found. */
|
* was not found. */
|
||||||
|
|
|
||||||
|
|
@ -48,9 +48,19 @@
|
||||||
|
|
||||||
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
||||||
|
|
||||||
|
/* Unprivileged critical sections are not supported when using MPU wrappers
|
||||||
|
* version 2. Default the option to 0 and reject an explicit value of 1. */
|
||||||
#ifndef configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS
|
#ifndef configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS
|
||||||
|
#if ( configUSE_MPU_WRAPPERS_V1 == 0 )
|
||||||
|
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 0
|
||||||
|
#else
|
||||||
#warning "configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not defined. We recommend defining it to 0 in FreeRTOSConfig.h for better security."
|
#warning "configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not defined. We recommend defining it to 0 in FreeRTOSConfig.h for better security."
|
||||||
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 1
|
#define configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS 1
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#if ( ( configUSE_MPU_WRAPPERS_V1 == 0 ) && ( configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS == 1 ) )
|
||||||
|
#error configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS is not supported with MPU wrappers version 2 ( configUSE_MPU_WRAPPERS_V1 == 0 ).
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Prototype of all Interrupt Service Routines (ISRs). */
|
/* Prototype of all Interrupt Service Routines (ISRs). */
|
||||||
|
|
|
||||||
2
queue.c
2
queue.c
|
|
@ -563,7 +563,7 @@ BaseType_t xQueueGenericReset( QueueHandle_t xQueue,
|
||||||
return pxNewQueue;
|
return pxNewQueue;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
#endif /* configSUPPORT_DYNAMIC_ALLOCATION */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength,
|
static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength,
|
||||||
|
|
|
||||||
|
|
@ -256,6 +256,15 @@ typedef struct StreamBufferDef_t
|
||||||
*/
|
*/
|
||||||
static size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer ) PRIVILEGED_FUNCTION;
|
static size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns pdTRUE when the amount of buffered data should unblock a task that
|
||||||
|
* is waiting to receive data. Stream batching buffers require the buffered
|
||||||
|
* data to exceed the trigger level, whereas stream and message buffers unblock
|
||||||
|
* when the trigger level is reached.
|
||||||
|
*/
|
||||||
|
static BaseType_t prvBytesInBufferMeetTriggerLevel( const StreamBuffer_t * const pxStreamBuffer,
|
||||||
|
size_t xBytesInBuffer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add xCount bytes from pucData into the pxStreamBuffer's data storage area.
|
* Add xCount bytes from pucData into the pxStreamBuffer's data storage area.
|
||||||
* This function does not update the buffer's xHead pointer, so multiple writes
|
* This function does not update the buffer's xHead pointer, so multiple writes
|
||||||
|
|
@ -919,7 +928,7 @@ size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
|
||||||
traceSTREAM_BUFFER_SEND( xStreamBuffer, xReturn );
|
traceSTREAM_BUFFER_SEND( xStreamBuffer, xReturn );
|
||||||
|
|
||||||
/* Was a task waiting for the data? */
|
/* Was a task waiting for the data? */
|
||||||
if( prvBytesInBuffer( pxStreamBuffer ) >= pxStreamBuffer->xTriggerLevelBytes )
|
if( prvBytesInBufferMeetTriggerLevel( pxStreamBuffer, prvBytesInBuffer( pxStreamBuffer ) ) != pdFALSE )
|
||||||
{
|
{
|
||||||
prvSEND_COMPLETED( pxStreamBuffer );
|
prvSEND_COMPLETED( pxStreamBuffer );
|
||||||
}
|
}
|
||||||
|
|
@ -976,7 +985,7 @@ size_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer,
|
||||||
if( xReturn > ( size_t ) 0 )
|
if( xReturn > ( size_t ) 0 )
|
||||||
{
|
{
|
||||||
/* Was a task waiting for the data? */
|
/* Was a task waiting for the data? */
|
||||||
if( prvBytesInBuffer( pxStreamBuffer ) >= pxStreamBuffer->xTriggerLevelBytes )
|
if( prvBytesInBufferMeetTriggerLevel( pxStreamBuffer, prvBytesInBuffer( pxStreamBuffer ) ) != pdFALSE )
|
||||||
{
|
{
|
||||||
/* MISRA Ref 4.7.1 [Return value shall be checked] */
|
/* MISRA Ref 4.7.1 [Return value shall be checked] */
|
||||||
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */
|
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */
|
||||||
|
|
@ -1587,6 +1596,35 @@ static size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer )
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static BaseType_t prvBytesInBufferMeetTriggerLevel( const StreamBuffer_t * const pxStreamBuffer,
|
||||||
|
size_t xBytesInBuffer )
|
||||||
|
{
|
||||||
|
BaseType_t xReturn = pdFALSE;
|
||||||
|
|
||||||
|
if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_BATCHING_BUFFER ) != ( uint8_t ) 0 )
|
||||||
|
{
|
||||||
|
if( xBytesInBuffer > pxStreamBuffer->xTriggerLevelBytes )
|
||||||
|
{
|
||||||
|
xReturn = pdTRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mtCOVERAGE_TEST_MARKER();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if( xBytesInBuffer >= pxStreamBuffer->xTriggerLevelBytes )
|
||||||
|
{
|
||||||
|
xReturn = pdTRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mtCOVERAGE_TEST_MARKER();
|
||||||
|
}
|
||||||
|
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
|
static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
|
||||||
uint8_t * const pucBuffer,
|
uint8_t * const pucBuffer,
|
||||||
size_t xBufferSizeBytes,
|
size_t xBufferSizeBytes,
|
||||||
|
|
|
||||||
171
tasks.c
171
tasks.c
|
|
@ -148,7 +148,9 @@
|
||||||
* global, rather than file scope.
|
* global, rather than file scope.
|
||||||
*/
|
*/
|
||||||
#ifdef portREMOVE_STATIC_QUALIFIER
|
#ifdef portREMOVE_STATIC_QUALIFIER
|
||||||
#define static
|
#define STATIC
|
||||||
|
#else
|
||||||
|
#define STATIC static
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The name allocated to the Idle task. This can be overridden by defining
|
/* The name allocated to the Idle task. This can be overridden by defining
|
||||||
|
|
@ -473,23 +475,23 @@ typedef tskTCB TCB_t;
|
||||||
* xDelayedTaskList1 and xDelayedTaskList2 could be moved to function scope but
|
* xDelayedTaskList1 and xDelayedTaskList2 could be moved to function scope but
|
||||||
* doing so breaks some kernel aware debuggers and debuggers that rely on removing
|
* doing so breaks some kernel aware debuggers and debuggers that rely on removing
|
||||||
* the static qualifier. */
|
* the static qualifier. */
|
||||||
PRIVILEGED_DATA static List_t pxReadyTasksLists[ configMAX_PRIORITIES ]; /**< Prioritised ready tasks. */
|
PRIVILEGED_DATA STATIC List_t pxReadyTasksLists[ configMAX_PRIORITIES ]; /**< Prioritised ready tasks. */
|
||||||
PRIVILEGED_DATA static List_t xDelayedTaskList1; /**< Delayed tasks. */
|
PRIVILEGED_DATA STATIC List_t xDelayedTaskList1; /**< Delayed tasks. */
|
||||||
PRIVILEGED_DATA static List_t xDelayedTaskList2; /**< Delayed tasks (two lists are used - one for delays that have overflowed the current tick count. */
|
PRIVILEGED_DATA STATIC List_t xDelayedTaskList2; /**< Delayed tasks (two lists are used - one for delays that have overflowed the current tick count. */
|
||||||
PRIVILEGED_DATA static List_t * volatile pxDelayedTaskList; /**< Points to the delayed task list currently being used. */
|
PRIVILEGED_DATA STATIC List_t * volatile pxDelayedTaskList; /**< Points to the delayed task list currently being used. */
|
||||||
PRIVILEGED_DATA static List_t * volatile pxOverflowDelayedTaskList; /**< Points to the delayed task list currently being used to hold tasks that have overflowed the current tick count. */
|
PRIVILEGED_DATA STATIC List_t * volatile pxOverflowDelayedTaskList; /**< Points to the delayed task list currently being used to hold tasks that have overflowed the current tick count. */
|
||||||
PRIVILEGED_DATA static List_t xPendingReadyList; /**< Tasks that have been readied while the scheduler was suspended. They will be moved to the ready list when the scheduler is resumed. */
|
PRIVILEGED_DATA STATIC List_t xPendingReadyList; /**< Tasks that have been readied while the scheduler was suspended. They will be moved to the ready list when the scheduler is resumed. */
|
||||||
|
|
||||||
#if ( INCLUDE_vTaskDelete == 1 )
|
#if ( INCLUDE_vTaskDelete == 1 )
|
||||||
|
|
||||||
PRIVILEGED_DATA static List_t xTasksWaitingTermination; /**< Tasks that have been deleted - but their memory not yet freed. */
|
PRIVILEGED_DATA STATIC List_t xTasksWaitingTermination; /**< Tasks that have been deleted - but their memory not yet freed. */
|
||||||
PRIVILEGED_DATA static volatile UBaseType_t uxDeletedTasksWaitingCleanUp = ( UBaseType_t ) 0U;
|
PRIVILEGED_DATA STATIC volatile UBaseType_t uxDeletedTasksWaitingCleanUp = ( UBaseType_t ) 0U;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ( INCLUDE_vTaskSuspend == 1 )
|
#if ( INCLUDE_vTaskSuspend == 1 )
|
||||||
|
|
||||||
PRIVILEGED_DATA static List_t xSuspendedTaskList; /**< Tasks that are currently suspended. */
|
PRIVILEGED_DATA STATIC List_t xSuspendedTaskList; /**< Tasks that are currently suspended. */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -500,21 +502,21 @@ PRIVILEGED_DATA static List_t xPendingReadyList; /**< Ta
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Other file private variables. --------------------------------*/
|
/* Other file private variables. --------------------------------*/
|
||||||
PRIVILEGED_DATA static volatile UBaseType_t uxCurrentNumberOfTasks = ( UBaseType_t ) 0U;
|
PRIVILEGED_DATA STATIC volatile UBaseType_t uxCurrentNumberOfTasks = ( UBaseType_t ) 0U;
|
||||||
PRIVILEGED_DATA static volatile TickType_t xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;
|
PRIVILEGED_DATA STATIC volatile TickType_t xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;
|
||||||
PRIVILEGED_DATA static volatile UBaseType_t uxTopReadyPriority = tskIDLE_PRIORITY;
|
PRIVILEGED_DATA STATIC volatile UBaseType_t uxTopReadyPriority = tskIDLE_PRIORITY;
|
||||||
PRIVILEGED_DATA static volatile BaseType_t xSchedulerRunning = pdFALSE;
|
PRIVILEGED_DATA STATIC volatile BaseType_t xSchedulerRunning = pdFALSE;
|
||||||
PRIVILEGED_DATA static volatile TickType_t xPendedTicks = ( TickType_t ) 0U;
|
PRIVILEGED_DATA STATIC volatile TickType_t xPendedTicks = ( TickType_t ) 0U;
|
||||||
PRIVILEGED_DATA static volatile BaseType_t xYieldPendings[ configNUMBER_OF_CORES ] = { pdFALSE };
|
PRIVILEGED_DATA STATIC volatile BaseType_t xYieldPendings[ configNUMBER_OF_CORES ] = { pdFALSE };
|
||||||
PRIVILEGED_DATA static volatile BaseType_t xNumOfOverflows = ( BaseType_t ) 0;
|
PRIVILEGED_DATA STATIC volatile BaseType_t xNumOfOverflows = ( BaseType_t ) 0;
|
||||||
PRIVILEGED_DATA static UBaseType_t uxTaskNumber = ( UBaseType_t ) 0U;
|
PRIVILEGED_DATA STATIC UBaseType_t uxTaskNumber = ( UBaseType_t ) 0U;
|
||||||
PRIVILEGED_DATA static volatile TickType_t xNextTaskUnblockTime = ( TickType_t ) 0U; /* Initialised to portMAX_DELAY before the scheduler starts. */
|
PRIVILEGED_DATA STATIC volatile TickType_t xNextTaskUnblockTime = ( TickType_t ) 0U; /* Initialised to portMAX_DELAY before the scheduler starts. */
|
||||||
PRIVILEGED_DATA static TaskHandle_t xIdleTaskHandles[ configNUMBER_OF_CORES ]; /**< Holds the handles of the idle tasks. The idle tasks are created automatically when the scheduler is started. */
|
PRIVILEGED_DATA STATIC TaskHandle_t xIdleTaskHandles[ configNUMBER_OF_CORES ]; /**< Holds the handles of the idle tasks. The idle tasks are created automatically when the scheduler is started. */
|
||||||
|
|
||||||
/* Improve support for OpenOCD. The kernel tracks Ready tasks via priority lists.
|
/* Improve support for OpenOCD. The kernel tracks Ready tasks via priority lists.
|
||||||
* For tracking the state of remote threads, OpenOCD uses uxTopUsedPriority
|
* For tracking the state of remote threads, OpenOCD uses uxTopUsedPriority
|
||||||
* to determine the number of priority lists to read back from the remote target. */
|
* to determine the number of priority lists to read back from the remote target. */
|
||||||
static const volatile UBaseType_t uxTopUsedPriority = configMAX_PRIORITIES - 1U;
|
STATIC const volatile UBaseType_t uxTopUsedPriority = configMAX_PRIORITIES - 1U;
|
||||||
|
|
||||||
/* Context switches are held pending while the scheduler is suspended. Also,
|
/* Context switches are held pending while the scheduler is suspended. Also,
|
||||||
* interrupts must not manipulate the xStateListItem of a TCB, or any of the
|
* interrupts must not manipulate the xStateListItem of a TCB, or any of the
|
||||||
|
|
@ -528,14 +530,14 @@ static const volatile UBaseType_t uxTopUsedPriority = configMAX_PRIORITIES - 1U;
|
||||||
* Updates to uxSchedulerSuspended must be protected by both the task lock and the ISR lock
|
* Updates to uxSchedulerSuspended must be protected by both the task lock and the ISR lock
|
||||||
* and must not be done from an ISR. Reads must be protected by either lock and may be done
|
* and must not be done from an ISR. Reads must be protected by either lock and may be done
|
||||||
* from either an ISR or a task. */
|
* from either an ISR or a task. */
|
||||||
PRIVILEGED_DATA static volatile UBaseType_t uxSchedulerSuspended = ( UBaseType_t ) 0U;
|
PRIVILEGED_DATA STATIC volatile UBaseType_t uxSchedulerSuspended = ( UBaseType_t ) 0U;
|
||||||
|
|
||||||
#if ( configGENERATE_RUN_TIME_STATS == 1 )
|
#if ( configGENERATE_RUN_TIME_STATS == 1 )
|
||||||
|
|
||||||
/* Do not move these variables to function scope as doing so prevents the
|
/* Do not move these variables to function scope as doing so prevents the
|
||||||
* code working with debuggers that need to remove the static qualifier. */
|
* code working with debuggers that need to remove the static qualifier. */
|
||||||
PRIVILEGED_DATA static configRUN_TIME_COUNTER_TYPE ulTaskSwitchedInTime[ configNUMBER_OF_CORES ] = { 0U }; /**< Holds the value of a timer/counter the last time a task was switched in. */
|
PRIVILEGED_DATA STATIC configRUN_TIME_COUNTER_TYPE ulTaskSwitchedInTime[ configNUMBER_OF_CORES ] = { 0U }; /**< Holds the value of a timer/counter the last time a task was switched in. */
|
||||||
PRIVILEGED_DATA static volatile configRUN_TIME_COUNTER_TYPE ulTotalRunTime[ configNUMBER_OF_CORES ] = { 0U }; /**< Holds the total amount of execution time as defined by the run time counter clock. */
|
PRIVILEGED_DATA STATIC volatile configRUN_TIME_COUNTER_TYPE ulTotalRunTime[ configNUMBER_OF_CORES ] = { 0U }; /**< Holds the total amount of execution time as defined by the run time counter clock. */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -546,7 +548,7 @@ PRIVILEGED_DATA static volatile configRUN_TIME_COUNTER_TYPE ulTotalRunTime[ conf
|
||||||
/*
|
/*
|
||||||
* Creates the idle tasks during scheduler start.
|
* Creates the idle tasks during scheduler start.
|
||||||
*/
|
*/
|
||||||
static BaseType_t prvCreateIdleTasks( void );
|
STATIC BaseType_t prvCreateIdleTasks( void );
|
||||||
|
|
||||||
#if ( configNUMBER_OF_CORES > 1 )
|
#if ( configNUMBER_OF_CORES > 1 )
|
||||||
|
|
||||||
|
|
@ -554,7 +556,7 @@ static BaseType_t prvCreateIdleTasks( void );
|
||||||
* Checks to see if another task moved the current task out of the ready
|
* Checks to see if another task moved the current task out of the ready
|
||||||
* list while it was waiting to enter a critical section and yields, if so.
|
* list while it was waiting to enter a critical section and yields, if so.
|
||||||
*/
|
*/
|
||||||
static void prvCheckForRunStateChange( void );
|
STATIC void prvCheckForRunStateChange( void );
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
#if ( configNUMBER_OF_CORES > 1 )
|
#if ( configNUMBER_OF_CORES > 1 )
|
||||||
|
|
@ -563,7 +565,7 @@ static BaseType_t prvCreateIdleTasks( void );
|
||||||
* Yields a core, or cores if multiple priorities are not allowed to run
|
* Yields a core, or cores if multiple priorities are not allowed to run
|
||||||
* simultaneously, to allow the task pxTCB to run.
|
* simultaneously, to allow the task pxTCB to run.
|
||||||
*/
|
*/
|
||||||
static void prvYieldForTask( const TCB_t * pxTCB );
|
STATIC void prvYieldForTask( const TCB_t * pxTCB );
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
#if ( configNUMBER_OF_CORES > 1 )
|
#if ( configNUMBER_OF_CORES > 1 )
|
||||||
|
|
@ -571,7 +573,7 @@ static BaseType_t prvCreateIdleTasks( void );
|
||||||
/*
|
/*
|
||||||
* Selects the highest priority available task for the given core.
|
* Selects the highest priority available task for the given core.
|
||||||
*/
|
*/
|
||||||
static void prvSelectHighestPriorityTask( BaseType_t xCoreID );
|
STATIC void prvSelectHighestPriorityTask( BaseType_t xCoreID );
|
||||||
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
#endif /* #if ( configNUMBER_OF_CORES > 1 ) */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -581,7 +583,7 @@ static BaseType_t prvCreateIdleTasks( void );
|
||||||
*/
|
*/
|
||||||
#if ( INCLUDE_vTaskSuspend == 1 )
|
#if ( INCLUDE_vTaskSuspend == 1 )
|
||||||
|
|
||||||
static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
STATIC BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#endif /* INCLUDE_vTaskSuspend */
|
#endif /* INCLUDE_vTaskSuspend */
|
||||||
|
|
||||||
|
|
@ -589,7 +591,7 @@ static BaseType_t prvCreateIdleTasks( void );
|
||||||
* Utility to ready all the lists used by the scheduler. This is called
|
* Utility to ready all the lists used by the scheduler. This is called
|
||||||
* automatically upon the creation of the first task.
|
* automatically upon the creation of the first task.
|
||||||
*/
|
*/
|
||||||
static void prvInitialiseTaskLists( void ) PRIVILEGED_FUNCTION;
|
STATIC void prvInitialiseTaskLists( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The idle task, which as all tasks is implemented as a never ending loop.
|
* The idle task, which as all tasks is implemented as a never ending loop.
|
||||||
|
|
@ -607,9 +609,11 @@ static void prvInitialiseTaskLists( void ) PRIVILEGED_FUNCTION;
|
||||||
* void prvPassiveIdleTask( void *pvParameters );
|
* void prvPassiveIdleTask( void *pvParameters );
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static portTASK_FUNCTION_PROTO( prvIdleTask, pvParameters ) PRIVILEGED_FUNCTION;
|
STATIC portTASK_FUNCTION_PROTO( prvIdleTask,
|
||||||
|
pvParameters ) PRIVILEGED_FUNCTION;
|
||||||
#if ( configNUMBER_OF_CORES > 1 )
|
#if ( configNUMBER_OF_CORES > 1 )
|
||||||
static portTASK_FUNCTION_PROTO( prvPassiveIdleTask, pvParameters ) PRIVILEGED_FUNCTION;
|
STATIC portTASK_FUNCTION_PROTO( prvPassiveIdleTask,
|
||||||
|
pvParameters ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -621,7 +625,7 @@ static portTASK_FUNCTION_PROTO( prvIdleTask, pvParameters ) PRIVILEGED_FUNCTION;
|
||||||
*/
|
*/
|
||||||
#if ( INCLUDE_vTaskDelete == 1 )
|
#if ( INCLUDE_vTaskDelete == 1 )
|
||||||
|
|
||||||
static void prvDeleteTCB( TCB_t * pxTCB ) PRIVILEGED_FUNCTION;
|
STATIC void prvDeleteTCB( TCB_t * pxTCB ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -630,13 +634,13 @@ static portTASK_FUNCTION_PROTO( prvIdleTask, pvParameters ) PRIVILEGED_FUNCTION;
|
||||||
* in the list of tasks waiting to be deleted. If so the task is cleaned up
|
* in the list of tasks waiting to be deleted. If so the task is cleaned up
|
||||||
* and its TCB deleted.
|
* and its TCB deleted.
|
||||||
*/
|
*/
|
||||||
static void prvCheckTasksWaitingTermination( void ) PRIVILEGED_FUNCTION;
|
STATIC void prvCheckTasksWaitingTermination( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The currently executing task is entering the Blocked state. Add the task to
|
* The currently executing task is entering the Blocked state. Add the task to
|
||||||
* either the current or the overflow delayed task list.
|
* either the current or the overflow delayed task list.
|
||||||
*/
|
*/
|
||||||
static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
STATIC void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
||||||
const BaseType_t xCanBlockIndefinitely ) PRIVILEGED_FUNCTION;
|
const BaseType_t xCanBlockIndefinitely ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -649,7 +653,7 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
||||||
*/
|
*/
|
||||||
#if ( configUSE_TRACE_FACILITY == 1 )
|
#if ( configUSE_TRACE_FACILITY == 1 )
|
||||||
|
|
||||||
static UBaseType_t prvListTasksWithinSingleList( TaskStatus_t * pxTaskStatusArray,
|
STATIC UBaseType_t prvListTasksWithinSingleList( TaskStatus_t * pxTaskStatusArray,
|
||||||
List_t * pxList,
|
List_t * pxList,
|
||||||
eTaskState eState ) PRIVILEGED_FUNCTION;
|
eTaskState eState ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
|
@ -661,7 +665,7 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
||||||
*/
|
*/
|
||||||
#if ( INCLUDE_xTaskGetHandle == 1 )
|
#if ( INCLUDE_xTaskGetHandle == 1 )
|
||||||
|
|
||||||
static TCB_t * prvSearchForNameWithinSingleList( List_t * pxList,
|
STATIC TCB_t * prvSearchForNameWithinSingleList( List_t * pxList,
|
||||||
const char pcNameToQuery[] ) PRIVILEGED_FUNCTION;
|
const char pcNameToQuery[] ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -673,7 +677,7 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
||||||
*/
|
*/
|
||||||
#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) )
|
#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) )
|
||||||
|
|
||||||
static configSTACK_DEPTH_TYPE prvTaskCheckFreeStackSpace( const uint8_t * pucStackByte ) PRIVILEGED_FUNCTION;
|
STATIC configSTACK_DEPTH_TYPE prvTaskCheckFreeStackSpace( const uint8_t * pucStackByte ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -689,7 +693,7 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
||||||
*/
|
*/
|
||||||
#if ( configUSE_TICKLESS_IDLE != 0 )
|
#if ( configUSE_TICKLESS_IDLE != 0 )
|
||||||
|
|
||||||
static TickType_t prvGetExpectedIdleTime( void ) PRIVILEGED_FUNCTION;
|
STATIC TickType_t prvGetExpectedIdleTime( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -697,7 +701,7 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
||||||
* Set xNextTaskUnblockTime to the time at which the next Blocked state task
|
* Set xNextTaskUnblockTime to the time at which the next Blocked state task
|
||||||
* will exit the Blocked state.
|
* will exit the Blocked state.
|
||||||
*/
|
*/
|
||||||
static void prvResetNextTaskUnblockTime( void ) PRIVILEGED_FUNCTION;
|
STATIC void prvResetNextTaskUnblockTime( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#if ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 )
|
#if ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 )
|
||||||
|
|
||||||
|
|
@ -714,7 +718,7 @@ static void prvResetNextTaskUnblockTime( void ) PRIVILEGED_FUNCTION;
|
||||||
* Called after a Task_t structure has been allocated either statically or
|
* Called after a Task_t structure has been allocated either statically or
|
||||||
* dynamically to fill in the structure's members.
|
* dynamically to fill in the structure's members.
|
||||||
*/
|
*/
|
||||||
static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
STATIC void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
||||||
const char * const pcName,
|
const char * const pcName,
|
||||||
const configSTACK_DEPTH_TYPE uxStackDepth,
|
const configSTACK_DEPTH_TYPE uxStackDepth,
|
||||||
void * const pvParameters,
|
void * const pvParameters,
|
||||||
|
|
@ -727,14 +731,14 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
||||||
* Called after a new task has been created and initialised to place the task
|
* Called after a new task has been created and initialised to place the task
|
||||||
* under the control of the scheduler.
|
* under the control of the scheduler.
|
||||||
*/
|
*/
|
||||||
static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
STATIC void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a task with static buffer for both TCB and stack. Returns a handle to
|
* Create a task with static buffer for both TCB and stack. Returns a handle to
|
||||||
* the task if it is created successfully. Otherwise, returns NULL.
|
* the task if it is created successfully. Otherwise, returns NULL.
|
||||||
*/
|
*/
|
||||||
#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
|
#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
static TCB_t * prvCreateStaticTask( TaskFunction_t pxTaskCode,
|
STATIC TCB_t * prvCreateStaticTask( TaskFunction_t pxTaskCode,
|
||||||
const char * const pcName,
|
const char * const pcName,
|
||||||
const configSTACK_DEPTH_TYPE uxStackDepth,
|
const configSTACK_DEPTH_TYPE uxStackDepth,
|
||||||
void * const pvParameters,
|
void * const pvParameters,
|
||||||
|
|
@ -749,7 +753,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
* a handle to the task if it is created successfully. Otherwise, returns NULL.
|
* a handle to the task if it is created successfully. Otherwise, returns NULL.
|
||||||
*/
|
*/
|
||||||
#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
|
#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
|
||||||
static TCB_t * prvCreateRestrictedStaticTask( const TaskParameters_t * const pxTaskDefinition,
|
STATIC TCB_t * prvCreateRestrictedStaticTask( const TaskParameters_t * const pxTaskDefinition,
|
||||||
TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;
|
TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;
|
||||||
#endif /* #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) */
|
#endif /* #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) */
|
||||||
|
|
||||||
|
|
@ -759,7 +763,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
* returns NULL.
|
* returns NULL.
|
||||||
*/
|
*/
|
||||||
#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
|
#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
|
||||||
static TCB_t * prvCreateRestrictedTask( const TaskParameters_t * const pxTaskDefinition,
|
STATIC TCB_t * prvCreateRestrictedTask( const TaskParameters_t * const pxTaskDefinition,
|
||||||
TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;
|
TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;
|
||||||
#endif /* #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
|
#endif /* #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
|
||||||
|
|
||||||
|
|
@ -768,7 +772,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
* the task if it is created successfully. Otherwise, returns NULL.
|
* the task if it is created successfully. Otherwise, returns NULL.
|
||||||
*/
|
*/
|
||||||
#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
static TCB_t * prvCreateTask( TaskFunction_t pxTaskCode,
|
STATIC TCB_t * prvCreateTask( TaskFunction_t pxTaskCode,
|
||||||
const char * const pcName,
|
const char * const pcName,
|
||||||
const configSTACK_DEPTH_TYPE uxStackDepth,
|
const configSTACK_DEPTH_TYPE uxStackDepth,
|
||||||
void * const pvParameters,
|
void * const pvParameters,
|
||||||
|
|
@ -783,7 +787,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
*/
|
*/
|
||||||
#ifdef FREERTOS_TASKS_C_ADDITIONS_INIT
|
#ifdef FREERTOS_TASKS_C_ADDITIONS_INIT
|
||||||
|
|
||||||
static void freertos_tasks_c_additions_init( void ) PRIVILEGED_FUNCTION;
|
STATIC void freertos_tasks_c_additions_init( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -813,14 +817,14 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
* and less than the supplied buffer length, the string has been
|
* and less than the supplied buffer length, the string has been
|
||||||
* completely written.
|
* completely written.
|
||||||
*/
|
*/
|
||||||
static size_t prvSnprintfReturnValueToCharsWritten( int iSnprintfReturnValue,
|
STATIC size_t prvSnprintfReturnValueToCharsWritten( int iSnprintfReturnValue,
|
||||||
size_t n );
|
size_t n );
|
||||||
|
|
||||||
#endif /* #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) */
|
#endif /* #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( configNUMBER_OF_CORES > 1 )
|
#if ( configNUMBER_OF_CORES > 1 )
|
||||||
static void prvCheckForRunStateChange( void )
|
STATIC void prvCheckForRunStateChange( void )
|
||||||
{
|
{
|
||||||
UBaseType_t uxPrevCriticalNesting;
|
UBaseType_t uxPrevCriticalNesting;
|
||||||
const TCB_t * pxThisTCB;
|
const TCB_t * pxThisTCB;
|
||||||
|
|
@ -888,7 +892,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( configNUMBER_OF_CORES > 1 )
|
#if ( configNUMBER_OF_CORES > 1 )
|
||||||
static void prvYieldForTask( const TCB_t * pxTCB )
|
STATIC void prvYieldForTask( const TCB_t * pxTCB )
|
||||||
{
|
{
|
||||||
BaseType_t xLowestPriorityToPreempt;
|
BaseType_t xLowestPriorityToPreempt;
|
||||||
BaseType_t xCurrentCoreTaskPriority;
|
BaseType_t xCurrentCoreTaskPriority;
|
||||||
|
|
@ -1003,7 +1007,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( configNUMBER_OF_CORES > 1 )
|
#if ( configNUMBER_OF_CORES > 1 )
|
||||||
static void prvSelectHighestPriorityTask( BaseType_t xCoreID )
|
STATIC void prvSelectHighestPriorityTask( BaseType_t xCoreID )
|
||||||
{
|
{
|
||||||
UBaseType_t uxCurrentPriority = uxTopReadyPriority;
|
UBaseType_t uxCurrentPriority = uxTopReadyPriority;
|
||||||
BaseType_t xTaskScheduled = pdFALSE;
|
BaseType_t xTaskScheduled = pdFALSE;
|
||||||
|
|
@ -1274,7 +1278,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
|
#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
|
|
||||||
static TCB_t * prvCreateStaticTask( TaskFunction_t pxTaskCode,
|
STATIC TCB_t * prvCreateStaticTask( TaskFunction_t pxTaskCode,
|
||||||
const char * const pcName,
|
const char * const pcName,
|
||||||
const configSTACK_DEPTH_TYPE uxStackDepth,
|
const configSTACK_DEPTH_TYPE uxStackDepth,
|
||||||
void * const pvParameters,
|
void * const pvParameters,
|
||||||
|
|
@ -1405,7 +1409,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
|
#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
|
||||||
static TCB_t * prvCreateRestrictedStaticTask( const TaskParameters_t * const pxTaskDefinition,
|
STATIC TCB_t * prvCreateRestrictedStaticTask( const TaskParameters_t * const pxTaskDefinition,
|
||||||
TaskHandle_t * const pxCreatedTask )
|
TaskHandle_t * const pxCreatedTask )
|
||||||
{
|
{
|
||||||
TCB_t * pxNewTCB;
|
TCB_t * pxNewTCB;
|
||||||
|
|
@ -1521,7 +1525,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
|
#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
|
||||||
static TCB_t * prvCreateRestrictedTask( const TaskParameters_t * const pxTaskDefinition,
|
STATIC TCB_t * prvCreateRestrictedTask( const TaskParameters_t * const pxTaskDefinition,
|
||||||
TaskHandle_t * const pxCreatedTask )
|
TaskHandle_t * const pxCreatedTask )
|
||||||
{
|
{
|
||||||
TCB_t * pxNewTCB;
|
TCB_t * pxNewTCB;
|
||||||
|
|
@ -1640,7 +1644,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
static TCB_t * prvCreateTask( TaskFunction_t pxTaskCode,
|
STATIC TCB_t * prvCreateTask( TaskFunction_t pxTaskCode,
|
||||||
const char * const pcName,
|
const char * const pcName,
|
||||||
const configSTACK_DEPTH_TYPE uxStackDepth,
|
const configSTACK_DEPTH_TYPE uxStackDepth,
|
||||||
void * const pvParameters,
|
void * const pvParameters,
|
||||||
|
|
@ -1813,7 +1817,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
||||||
#endif /* configSUPPORT_DYNAMIC_ALLOCATION */
|
#endif /* configSUPPORT_DYNAMIC_ALLOCATION */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
STATIC void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
||||||
const char * const pcName,
|
const char * const pcName,
|
||||||
const configSTACK_DEPTH_TYPE uxStackDepth,
|
const configSTACK_DEPTH_TYPE uxStackDepth,
|
||||||
void * const pvParameters,
|
void * const pvParameters,
|
||||||
|
|
@ -2049,7 +2053,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
||||||
|
|
||||||
#if ( configNUMBER_OF_CORES == 1 )
|
#if ( configNUMBER_OF_CORES == 1 )
|
||||||
|
|
||||||
static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
STATIC void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
||||||
{
|
{
|
||||||
/* Ensure interrupts don't access the task lists while the lists are being
|
/* Ensure interrupts don't access the task lists while the lists are being
|
||||||
* updated. */
|
* updated. */
|
||||||
|
|
@ -2127,7 +2131,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
||||||
|
|
||||||
#else /* #if ( configNUMBER_OF_CORES == 1 ) */
|
#else /* #if ( configNUMBER_OF_CORES == 1 ) */
|
||||||
|
|
||||||
static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
STATIC void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
||||||
{
|
{
|
||||||
/* Ensure interrupts don't access the task lists while the lists are being
|
/* Ensure interrupts don't access the task lists while the lists are being
|
||||||
* updated. */
|
* updated. */
|
||||||
|
|
@ -2188,7 +2192,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
||||||
|
|
||||||
#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) )
|
#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) )
|
||||||
|
|
||||||
static size_t prvSnprintfReturnValueToCharsWritten( int iSnprintfReturnValue,
|
STATIC size_t prvSnprintfReturnValueToCharsWritten( int iSnprintfReturnValue,
|
||||||
size_t n )
|
size_t n )
|
||||||
{
|
{
|
||||||
size_t uxCharsWritten;
|
size_t uxCharsWritten;
|
||||||
|
|
@ -3320,7 +3324,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
||||||
|
|
||||||
#if ( INCLUDE_vTaskSuspend == 1 )
|
#if ( INCLUDE_vTaskSuspend == 1 )
|
||||||
|
|
||||||
static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask )
|
STATIC BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask )
|
||||||
{
|
{
|
||||||
BaseType_t xReturn = pdFALSE;
|
BaseType_t xReturn = pdFALSE;
|
||||||
const TCB_t * const pxTCB = xTask;
|
const TCB_t * const pxTCB = xTask;
|
||||||
|
|
@ -3548,7 +3552,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
||||||
#endif /* ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) */
|
#endif /* ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static BaseType_t prvCreateIdleTasks( void )
|
STATIC BaseType_t prvCreateIdleTasks( void )
|
||||||
{
|
{
|
||||||
BaseType_t xReturn = pdPASS;
|
BaseType_t xReturn = pdPASS;
|
||||||
BaseType_t xCoreID;
|
BaseType_t xCoreID;
|
||||||
|
|
@ -3687,9 +3691,14 @@ static BaseType_t prvCreateIdleTasks( void )
|
||||||
/* Assign idle task to each core before SMP scheduler is running. */
|
/* Assign idle task to each core before SMP scheduler is running. */
|
||||||
xIdleTaskHandles[ xCoreID ]->xTaskRunState = xCoreID;
|
xIdleTaskHandles[ xCoreID ]->xTaskRunState = xCoreID;
|
||||||
pxCurrentTCBs[ xCoreID ] = xIdleTaskHandles[ xCoreID ];
|
pxCurrentTCBs[ xCoreID ] = xIdleTaskHandles[ xCoreID ];
|
||||||
|
#if ( ( configIDLE_AFFINITY == 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )
|
||||||
|
{
|
||||||
|
xIdleTaskHandles[ xCoreID ]->uxCoreAffinityMask = ( ( UBaseType_t ) 1U << ( UBaseType_t ) xCoreID );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif /* if ( configNUMBER_OF_CORES == 1 ) */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return xReturn;
|
return xReturn;
|
||||||
|
|
@ -3957,7 +3966,7 @@ void vTaskSuspendAll( void )
|
||||||
|
|
||||||
#if ( configUSE_TICKLESS_IDLE != 0 )
|
#if ( configUSE_TICKLESS_IDLE != 0 )
|
||||||
|
|
||||||
static TickType_t prvGetExpectedIdleTime( void )
|
STATIC TickType_t prvGetExpectedIdleTime( void )
|
||||||
{
|
{
|
||||||
TickType_t xReturn;
|
TickType_t xReturn;
|
||||||
BaseType_t xHigherPriorityReadyTasks = pdFALSE;
|
BaseType_t xHigherPriorityReadyTasks = pdFALSE;
|
||||||
|
|
@ -4252,7 +4261,7 @@ char * pcTaskGetName( TaskHandle_t xTaskToQuery )
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( INCLUDE_xTaskGetHandle == 1 )
|
#if ( INCLUDE_xTaskGetHandle == 1 )
|
||||||
static TCB_t * prvSearchForNameWithinSingleList( List_t * pxList,
|
STATIC TCB_t * prvSearchForNameWithinSingleList( List_t * pxList,
|
||||||
const char pcNameToQuery[] )
|
const char pcNameToQuery[] )
|
||||||
{
|
{
|
||||||
TCB_t * pxReturn = NULL;
|
TCB_t * pxReturn = NULL;
|
||||||
|
|
@ -5026,11 +5035,11 @@ BaseType_t xTaskIncrementTick( void )
|
||||||
|
|
||||||
traceENTER_xTaskGetApplicationTaskTag( xTask );
|
traceENTER_xTaskGetApplicationTaskTag( xTask );
|
||||||
|
|
||||||
/* If xTask is NULL then set the calling task's hook. */
|
/* If xTask is NULL then get the calling task's hook. */
|
||||||
pxTCB = prvGetTCBFromHandle( xTask );
|
pxTCB = prvGetTCBFromHandle( xTask );
|
||||||
configASSERT( pxTCB != NULL );
|
configASSERT( pxTCB != NULL );
|
||||||
|
|
||||||
/* Save the hook function in the TCB. A critical section is required as
|
/* Access the hook function in the TCB. A critical section is required as
|
||||||
* the value can be accessed from an interrupt. */
|
* the value can be accessed from an interrupt. */
|
||||||
taskENTER_CRITICAL();
|
taskENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
|
|
@ -5056,11 +5065,11 @@ BaseType_t xTaskIncrementTick( void )
|
||||||
|
|
||||||
traceENTER_xTaskGetApplicationTaskTagFromISR( xTask );
|
traceENTER_xTaskGetApplicationTaskTagFromISR( xTask );
|
||||||
|
|
||||||
/* If xTask is NULL then set the calling task's hook. */
|
/* If xTask is NULL then get the calling task's hook. */
|
||||||
pxTCB = prvGetTCBFromHandle( xTask );
|
pxTCB = prvGetTCBFromHandle( xTask );
|
||||||
configASSERT( pxTCB != NULL );
|
configASSERT( pxTCB != NULL );
|
||||||
|
|
||||||
/* Save the hook function in the TCB. A critical section is required as
|
/* Access the hook function in the TCB. A critical section is required as
|
||||||
* the value can be accessed from an interrupt. */
|
* the value can be accessed from an interrupt. */
|
||||||
/* MISRA Ref 4.7.1 [Return value shall be checked] */
|
/* MISRA Ref 4.7.1 [Return value shall be checked] */
|
||||||
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */
|
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */
|
||||||
|
|
@ -5739,7 +5748,8 @@ void vTaskMissedYield( void )
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if ( configNUMBER_OF_CORES > 1 )
|
#if ( configNUMBER_OF_CORES > 1 )
|
||||||
static portTASK_FUNCTION( prvPassiveIdleTask, pvParameters )
|
STATIC portTASK_FUNCTION( prvPassiveIdleTask,
|
||||||
|
pvParameters )
|
||||||
{
|
{
|
||||||
( void ) pvParameters;
|
( void ) pvParameters;
|
||||||
|
|
||||||
|
|
@ -5809,7 +5819,8 @@ void vTaskMissedYield( void )
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static portTASK_FUNCTION( prvIdleTask, pvParameters )
|
STATIC portTASK_FUNCTION( prvIdleTask,
|
||||||
|
pvParameters )
|
||||||
{
|
{
|
||||||
/* Stop warnings. */
|
/* Stop warnings. */
|
||||||
( void ) pvParameters;
|
( void ) pvParameters;
|
||||||
|
|
@ -6075,7 +6086,7 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters )
|
||||||
#endif /* portUSING_MPU_WRAPPERS */
|
#endif /* portUSING_MPU_WRAPPERS */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvInitialiseTaskLists( void )
|
STATIC void prvInitialiseTaskLists( void )
|
||||||
{
|
{
|
||||||
UBaseType_t uxPriority;
|
UBaseType_t uxPriority;
|
||||||
|
|
||||||
|
|
@ -6107,7 +6118,7 @@ static void prvInitialiseTaskLists( void )
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvCheckTasksWaitingTermination( void )
|
STATIC void prvCheckTasksWaitingTermination( void )
|
||||||
{
|
{
|
||||||
/** THIS FUNCTION IS CALLED FROM THE RTOS IDLE TASK **/
|
/** THIS FUNCTION IS CALLED FROM THE RTOS IDLE TASK **/
|
||||||
|
|
||||||
|
|
@ -6333,7 +6344,7 @@ static void prvCheckTasksWaitingTermination( void )
|
||||||
|
|
||||||
#if ( configUSE_TRACE_FACILITY == 1 )
|
#if ( configUSE_TRACE_FACILITY == 1 )
|
||||||
|
|
||||||
static UBaseType_t prvListTasksWithinSingleList( TaskStatus_t * pxTaskStatusArray,
|
STATIC UBaseType_t prvListTasksWithinSingleList( TaskStatus_t * pxTaskStatusArray,
|
||||||
List_t * pxList,
|
List_t * pxList,
|
||||||
eTaskState eState )
|
eTaskState eState )
|
||||||
{
|
{
|
||||||
|
|
@ -6372,7 +6383,7 @@ static void prvCheckTasksWaitingTermination( void )
|
||||||
|
|
||||||
#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) )
|
#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) )
|
||||||
|
|
||||||
static configSTACK_DEPTH_TYPE prvTaskCheckFreeStackSpace( const uint8_t * pucStackByte )
|
STATIC configSTACK_DEPTH_TYPE prvTaskCheckFreeStackSpace( const uint8_t * pucStackByte )
|
||||||
{
|
{
|
||||||
configSTACK_DEPTH_TYPE uxCount = 0U;
|
configSTACK_DEPTH_TYPE uxCount = 0U;
|
||||||
|
|
||||||
|
|
@ -6470,7 +6481,7 @@ static void prvCheckTasksWaitingTermination( void )
|
||||||
|
|
||||||
#if ( INCLUDE_vTaskDelete == 1 )
|
#if ( INCLUDE_vTaskDelete == 1 )
|
||||||
|
|
||||||
static void prvDeleteTCB( TCB_t * pxTCB )
|
STATIC void prvDeleteTCB( TCB_t * pxTCB )
|
||||||
{
|
{
|
||||||
/* This call is required specifically for the TriCore port. It must be
|
/* This call is required specifically for the TriCore port. It must be
|
||||||
* above the vPortFree() calls. The call is also used by ports/demos that
|
* above the vPortFree() calls. The call is also used by ports/demos that
|
||||||
|
|
@ -6523,7 +6534,7 @@ static void prvCheckTasksWaitingTermination( void )
|
||||||
#endif /* INCLUDE_vTaskDelete */
|
#endif /* INCLUDE_vTaskDelete */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvResetNextTaskUnblockTime( void )
|
STATIC void prvResetNextTaskUnblockTime( void )
|
||||||
{
|
{
|
||||||
if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
|
if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
|
||||||
{
|
{
|
||||||
|
|
@ -7271,7 +7282,7 @@ static void prvResetNextTaskUnblockTime( void )
|
||||||
|
|
||||||
#if ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 )
|
#if ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 )
|
||||||
|
|
||||||
static char * prvWriteNameToBuffer( char * pcBuffer,
|
STATIC char * prvWriteNameToBuffer( char * pcBuffer,
|
||||||
const char * pcTaskName )
|
const char * pcTaskName )
|
||||||
{
|
{
|
||||||
size_t x;
|
size_t x;
|
||||||
|
|
@ -7351,7 +7362,7 @@ static void prvResetNextTaskUnblockTime( void )
|
||||||
/* MISRA Ref 11.5.1 [Malloc memory assignment] */
|
/* MISRA Ref 11.5.1 [Malloc memory assignment] */
|
||||||
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */
|
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */
|
||||||
/* coverity[misra_c_2012_rule_11_5_violation] */
|
/* coverity[misra_c_2012_rule_11_5_violation] */
|
||||||
pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( TaskStatus_t ) );
|
pxTaskStatusArray = pvPortMalloc( uxArraySize * sizeof( TaskStatus_t ) );
|
||||||
|
|
||||||
if( pxTaskStatusArray != NULL )
|
if( pxTaskStatusArray != NULL )
|
||||||
{
|
{
|
||||||
|
|
@ -7520,7 +7531,7 @@ static void prvResetNextTaskUnblockTime( void )
|
||||||
/* MISRA Ref 11.5.1 [Malloc memory assignment] */
|
/* MISRA Ref 11.5.1 [Malloc memory assignment] */
|
||||||
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */
|
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */
|
||||||
/* coverity[misra_c_2012_rule_11_5_violation] */
|
/* coverity[misra_c_2012_rule_11_5_violation] */
|
||||||
pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( TaskStatus_t ) );
|
pxTaskStatusArray = pvPortMalloc( uxArraySize * sizeof( TaskStatus_t ) );
|
||||||
|
|
||||||
if( pxTaskStatusArray != NULL )
|
if( pxTaskStatusArray != NULL )
|
||||||
{
|
{
|
||||||
|
|
@ -8587,7 +8598,7 @@ TickType_t uxTaskResetEventItemValue( void )
|
||||||
#endif /* if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) */
|
#endif /* if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
STATIC void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
||||||
const BaseType_t xCanBlockIndefinitely )
|
const BaseType_t xCanBlockIndefinitely )
|
||||||
{
|
{
|
||||||
TickType_t xTimeToWake;
|
TickType_t xTimeToWake;
|
||||||
|
|
@ -8739,7 +8750,7 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
|
||||||
#include "freertos_tasks_c_additions.h"
|
#include "freertos_tasks_c_additions.h"
|
||||||
|
|
||||||
#ifdef FREERTOS_TASKS_C_ADDITIONS_INIT
|
#ifdef FREERTOS_TASKS_C_ADDITIONS_INIT
|
||||||
static void freertos_tasks_c_additions_init( void )
|
STATIC void freertos_tasks_c_additions_init( void )
|
||||||
{
|
{
|
||||||
FREERTOS_TASKS_C_ADDITIONS_INIT();
|
FREERTOS_TASKS_C_ADDITIONS_INIT();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue