Initial version
This commit is contained in:
226
FreeRTOSv10.2.1/FreeRTOS/Demo/Common/ARMv8M/mpu_demo/mpu_demo.c
Normal file
226
FreeRTOSv10.2.1/FreeRTOS/Demo/Common/ARMv8M/mpu_demo/mpu_demo.c
Normal file
@ -0,0 +1,226 @@
|
||||
/*
|
||||
* FreeRTOS Kernel V10.2.1
|
||||
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* http://www.FreeRTOS.org
|
||||
* http://aws.amazon.com/freertos
|
||||
*
|
||||
* 1 tab == 4 spaces!
|
||||
*/
|
||||
|
||||
/* FreeRTOS includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
|
||||
/**
|
||||
* @brief Size of the shared memory region.
|
||||
*/
|
||||
#define SHARED_MEMORY_SIZE 32
|
||||
|
||||
/**
|
||||
* @brief Memory region shared between two tasks.
|
||||
*/
|
||||
static uint8_t ucSharedMemory[ SHARED_MEMORY_SIZE ] __attribute__( ( aligned( 32 ) ) );
|
||||
|
||||
/**
|
||||
* @brief Memory region used to track Memory Fault intentionally caused by the
|
||||
* RO Access task.
|
||||
*
|
||||
* RO Access task sets ucROTaskFaultTracker[ 0 ] to 1 before accessing illegal
|
||||
* memory. Illegal memory access causes Memory Fault and the fault handler
|
||||
* checks ucROTaskFaultTracker[ 0 ] to see if this is an expected fault. We
|
||||
* recover gracefully from an expected fault by jumping to the next instruction.
|
||||
*
|
||||
* @note We are declaring a region of 32 bytes even though we need only one. The
|
||||
* reason is that the size of an MPU region must be a multiple of 32 bytes.
|
||||
*/
|
||||
static uint8_t ucROTaskFaultTracker[ SHARED_MEMORY_SIZE ] __attribute__( ( aligned( 32 ) ) ) = { 0 };
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief Implements the task which has Read Only access to the memory region
|
||||
* ucSharedMemory.
|
||||
*
|
||||
* @param pvParameters[in] Parameters as passed during task creation.
|
||||
*/
|
||||
static void prvROAccessTask( void * pvParameters );
|
||||
|
||||
/**
|
||||
* @brief Implements the task which has Read Write access to the memory region
|
||||
* ucSharedMemory.
|
||||
*
|
||||
* @param pvParameters[in] Parameters as passed during task creation.
|
||||
*/
|
||||
static void prvRWAccessTask( void * pvParameters );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvROAccessTask( void * pvParameters )
|
||||
{
|
||||
uint8_t ucVal;
|
||||
|
||||
/* Unused parameters. */
|
||||
( void ) pvParameters;
|
||||
|
||||
for( ; ; )
|
||||
{
|
||||
/* This task has RO access to ucSharedMemory and therefore it can read
|
||||
* it but cannot modify it. */
|
||||
ucVal = ucSharedMemory[ 0 ];
|
||||
|
||||
/* Silent compiler warnings about unused variables. */
|
||||
( void ) ucVal;
|
||||
|
||||
/* Since this task has Read Only access to the ucSharedMemory region,
|
||||
* writing to it results in Memory Fault. Set ucROTaskFaultTracker[ 0 ]
|
||||
* to 1 to tell the Memory Fault Handler that this is an expected fault.
|
||||
* The handler will recover from this fault gracefully by jumping to the
|
||||
* next instruction. */
|
||||
ucROTaskFaultTracker[ 0 ] = 1;
|
||||
|
||||
/* Illegal access to generate Memory Fault. */
|
||||
ucSharedMemory[ 0 ] = 0;
|
||||
|
||||
/* Wait for a second. */
|
||||
vTaskDelay( pdMS_TO_TICKS( 1000 ) );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvRWAccessTask( void * pvParameters )
|
||||
{
|
||||
/* Unused parameters. */
|
||||
( void ) pvParameters;
|
||||
|
||||
for( ; ; )
|
||||
{
|
||||
/* This task has RW access to ucSharedMemory and therefore can write to
|
||||
* it. */
|
||||
ucSharedMemory[ 0 ] = 0;
|
||||
|
||||
/* Wait for a second. */
|
||||
vTaskDelay( pdMS_TO_TICKS( 1000 ) );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vStartMPUDemo( void )
|
||||
{
|
||||
static StackType_t xROAccessTaskStack[ configMINIMAL_STACK_SIZE ] __attribute__( ( aligned( 32 ) ) );
|
||||
static StackType_t xRWAccessTaskStack[ configMINIMAL_STACK_SIZE ] __attribute__( ( aligned( 32 ) ) );
|
||||
TaskParameters_t xROAccessTaskParameters =
|
||||
{
|
||||
.pvTaskCode = prvROAccessTask,
|
||||
.pcName = "ROAccess",
|
||||
.usStackDepth = configMINIMAL_STACK_SIZE,
|
||||
.pvParameters = NULL,
|
||||
.uxPriority = tskIDLE_PRIORITY,
|
||||
.puxStackBuffer = xROAccessTaskStack,
|
||||
.xRegions = {
|
||||
{ ucSharedMemory, 32, tskMPU_REGION_READ_ONLY | tskMPU_REGION_EXECUTE_NEVER },
|
||||
{ ucROTaskFaultTracker, 32, tskMPU_REGION_READ_WRITE | tskMPU_REGION_EXECUTE_NEVER },
|
||||
{ 0, 0, 0 },
|
||||
}
|
||||
};
|
||||
TaskParameters_t xRWAccessTaskParameters =
|
||||
{
|
||||
.pvTaskCode = prvRWAccessTask,
|
||||
.pcName = "RWAccess",
|
||||
.usStackDepth = configMINIMAL_STACK_SIZE,
|
||||
.pvParameters = NULL,
|
||||
.uxPriority = tskIDLE_PRIORITY,
|
||||
.puxStackBuffer = xRWAccessTaskStack,
|
||||
.xRegions = {
|
||||
{ ucSharedMemory, 32, tskMPU_REGION_READ_WRITE | tskMPU_REGION_EXECUTE_NEVER },
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 0, 0 },
|
||||
}
|
||||
};
|
||||
|
||||
/* Create an unprivileged task with RO access to ucSharedMemory. */
|
||||
xTaskCreateRestricted( &( xROAccessTaskParameters ), NULL );
|
||||
|
||||
/* Create an unprivileged task with RW access to ucSharedMemory. */
|
||||
xTaskCreateRestricted( &( xRWAccessTaskParameters ), NULL );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
portDONT_DISCARD void vHandleMemoryFault( uint32_t * pulFaultStackAddress )
|
||||
{
|
||||
uint32_t ulPC;
|
||||
uint16_t usOffendingInstruction;
|
||||
|
||||
/* Is this an expected fault? */
|
||||
if( ucROTaskFaultTracker[ 0 ] == 1 )
|
||||
{
|
||||
/* Read program counter. */
|
||||
ulPC = pulFaultStackAddress[ 6 ];
|
||||
|
||||
/* Read the offending instruction. */
|
||||
usOffendingInstruction = *( uint16_t * )ulPC;
|
||||
|
||||
/* From ARM docs:
|
||||
* If the value of bits[15:11] of the halfword being decoded is one of
|
||||
* the following, the halfword is the first halfword of a 32-bit
|
||||
* instruction:
|
||||
* - 0b11101.
|
||||
* - 0b11110.
|
||||
* - 0b11111.
|
||||
* Otherwise, the halfword is a 16-bit instruction.
|
||||
*/
|
||||
|
||||
/* Extract bits[15:11] of the offending instruction. */
|
||||
usOffendingInstruction = usOffendingInstruction & 0xF800;
|
||||
usOffendingInstruction = ( usOffendingInstruction >> 11 );
|
||||
|
||||
/* Determine if the offending instruction is a 32-bit instruction or
|
||||
* a 16-bit instruction. */
|
||||
if( usOffendingInstruction == 0x001F ||
|
||||
usOffendingInstruction == 0x001E ||
|
||||
usOffendingInstruction == 0x001D )
|
||||
{
|
||||
/* Since the offending instruction is a 32-bit instruction,
|
||||
* increment the program counter by 4 to move to the next
|
||||
* instruction. */
|
||||
ulPC += 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Since the offending instruction is a 16-bit instruction,
|
||||
* increment the program counter by 2 to move to the next
|
||||
* instruction. */
|
||||
ulPC += 2;
|
||||
}
|
||||
|
||||
/* Save the new program counter on the stack. */
|
||||
pulFaultStackAddress[ 6 ] = ulPC;
|
||||
|
||||
/* Mark the fault as handled. */
|
||||
ucROTaskFaultTracker[ 0 ] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This is an unexpected fault - loop forever. */
|
||||
for( ; ; )
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* FreeRTOS Kernel V10.2.1
|
||||
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* http://www.FreeRTOS.org
|
||||
* http://aws.amazon.com/freertos
|
||||
*
|
||||
* 1 tab == 4 spaces!
|
||||
*/
|
||||
|
||||
#ifndef __MPU_DEMO_H__
|
||||
#define __MPU_DEMO_H__
|
||||
|
||||
/**
|
||||
* @brief Creates all the tasks for MPU demo.
|
||||
*
|
||||
* The MPU demo creates 2 unprivileged tasks - One of which has Read Only access
|
||||
* to a shared memory region while the other has Read Write access. The task
|
||||
* with Read Only access then tries to write to the shared memory which results
|
||||
* in a Memory fault. The fault handler examines that it is the fault generated
|
||||
* by the task with Read Only access and if so, it recovers from the fault
|
||||
* greacefully by moving the Program Counter to the next instruction to the one
|
||||
* which generated the fault. If any other memory access violation occurs, the
|
||||
* fault handler will get stuck in an inifinite loop.
|
||||
*/
|
||||
void vStartMPUDemo( void );
|
||||
|
||||
#endif /* __MPU_DEMO_H__ */
|
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* FreeRTOS Kernel V10.2.1
|
||||
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* http://www.FreeRTOS.org
|
||||
* http://aws.amazon.com/freertos
|
||||
*
|
||||
* 1 tab == 4 spaces!
|
||||
*/
|
||||
|
||||
#include <arm_cmse.h>
|
||||
#include "nsc_functions.h"
|
||||
#include "secure_port_macros.h"
|
||||
|
||||
/**
|
||||
* @brief Counter returned from NSCFunction.
|
||||
*/
|
||||
static uint32_t ulSecureCounter = 0;
|
||||
|
||||
/**
|
||||
* @brief typedef for non-secure callback.
|
||||
*/
|
||||
typedef void ( *NonSecureCallback_t ) ( void ) __attribute__( ( cmse_nonsecure_call ) );
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
secureportNON_SECURE_CALLABLE uint32_t NSCFunction( Callback_t pxCallback )
|
||||
{
|
||||
NonSecureCallback_t pxNonSecureCallback;
|
||||
|
||||
/* Return function pointer with cleared LSB. */
|
||||
pxNonSecureCallback = ( NonSecureCallback_t ) cmse_nsfptr_create( pxCallback );
|
||||
|
||||
/* Invoke the supplied callback. */
|
||||
pxNonSecureCallback();
|
||||
|
||||
/* Increment the secure side counter. */
|
||||
ulSecureCounter += 1;
|
||||
|
||||
/* Return the secure side counter. */
|
||||
return ulSecureCounter;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* FreeRTOS Kernel V10.2.1
|
||||
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* http://www.FreeRTOS.org
|
||||
* http://aws.amazon.com/freertos
|
||||
*
|
||||
* 1 tab == 4 spaces!
|
||||
*/
|
||||
|
||||
#ifndef __NSC_FUNCTIONS_H__
|
||||
#define __NSC_FUNCTIONS_H__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @brief Callback function pointer definition.
|
||||
*/
|
||||
typedef void ( *Callback_t ) ( void );
|
||||
|
||||
/**
|
||||
* @brief Invokes the supplied callback which is on the non-secure side.
|
||||
*
|
||||
* Returns a number which is one more than the value returned in previous
|
||||
* invocation of this function. Initial invocation returns 1.
|
||||
*
|
||||
* @param pxCallback[in] The callback to invoke.
|
||||
*
|
||||
* @return A number which is one more than the value returned in previous
|
||||
* invocation of this function.
|
||||
*/
|
||||
uint32_t NSCFunction( Callback_t pxCallback );
|
||||
|
||||
#endif /* __NSC_FUNCTIONS_H__ */
|
133
FreeRTOSv10.2.1/FreeRTOS/Demo/Common/ARMv8M/tz_demo/tz_demo.c
Normal file
133
FreeRTOSv10.2.1/FreeRTOS/Demo/Common/ARMv8M/tz_demo/tz_demo.c
Normal file
@ -0,0 +1,133 @@
|
||||
/*
|
||||
* FreeRTOS Kernel V10.2.1
|
||||
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* http://www.FreeRTOS.org
|
||||
* http://aws.amazon.com/freertos
|
||||
*
|
||||
* 1 tab == 4 spaces!
|
||||
*/
|
||||
|
||||
/* FreeRTOS includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
|
||||
/* Non-Secure callable functions. */
|
||||
#include "nsc_functions.h"
|
||||
|
||||
/**
|
||||
* @brief Counter incremented in the callback which is called from the secure
|
||||
* side.
|
||||
*
|
||||
* The size of an MPU region must be a multiple of 32 bytes. Therefore we need
|
||||
* to declare an array of size 8 to ensure that the total size is 32 bytes -
|
||||
* even though we only need 4 bytes. If we do not do that, anything placed after
|
||||
* 4 bytes and upto 32 bytes will also fall in the same MPU region and the task
|
||||
* having access to ulNonSecureCounter will also have access to all those items.
|
||||
*/
|
||||
static uint32_t ulNonSecureCounter[8] __attribute__( ( aligned( 32 ) ) ) = { 0 };
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief Creates all the tasks for TZ demo.
|
||||
*/
|
||||
void vStartTZDemo( void );
|
||||
|
||||
/**
|
||||
* @brief Increments the ulNonSecureCounter.
|
||||
*
|
||||
* This function is called from the secure side.
|
||||
*/
|
||||
static void prvCallback( void );
|
||||
|
||||
/**
|
||||
* @brief Implements the task which calls the functions exported from the secure
|
||||
* side.
|
||||
*
|
||||
* @param pvParameters[in] Parameters as passed during task creation.
|
||||
*/
|
||||
static void prvSecureCallingTask( void * pvParameters );
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vStartTZDemo( void )
|
||||
{
|
||||
static StackType_t xSecureCallingTaskStack[ configMINIMAL_STACK_SIZE ] __attribute__( ( aligned( 32 ) ) );
|
||||
TaskParameters_t xSecureCallingTaskParameters =
|
||||
{
|
||||
.pvTaskCode = prvSecureCallingTask,
|
||||
.pcName = "SecCalling",
|
||||
.usStackDepth = configMINIMAL_STACK_SIZE,
|
||||
.pvParameters = NULL,
|
||||
.uxPriority = tskIDLE_PRIORITY,
|
||||
.puxStackBuffer = xSecureCallingTaskStack,
|
||||
.xRegions = {
|
||||
{ ulNonSecureCounter, 32, tskMPU_REGION_READ_WRITE | tskMPU_REGION_EXECUTE_NEVER },
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 0, 0 },
|
||||
}
|
||||
};
|
||||
|
||||
/* Create an unprivileged task which calls secure functions. */
|
||||
xTaskCreateRestricted( &( xSecureCallingTaskParameters ), NULL );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvCallback( void )
|
||||
{
|
||||
/* This function is called from the secure side. Just increment the counter
|
||||
* here. The check that this counter keeps incrementing is performed in the
|
||||
* prvSecureCallingTask. */
|
||||
ulNonSecureCounter[ 0 ] += 1;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvSecureCallingTask( void * pvParameters )
|
||||
{
|
||||
uint32_t ulLastSecureCounter = 0, ulLastNonSecureCounter = 0;
|
||||
uint32_t ulCurrentSecureCounter = 0;
|
||||
|
||||
/* This task calls secure side functions. So allocate a secure context for
|
||||
* it. */
|
||||
portALLOCATE_SECURE_CONTEXT( configMINIMAL_SECURE_STACK_SIZE );
|
||||
|
||||
for( ; ; )
|
||||
{
|
||||
/* Call the secure side function. It does two things:
|
||||
* - It calls the supplied function (prvCallback) which in turn
|
||||
* increments the non-secure counter.
|
||||
* - It increments the secure counter and returns the incremented value.
|
||||
* Therefore at the end of this function call both the secure and
|
||||
* non-secure counters must have been incremented.
|
||||
*/
|
||||
ulCurrentSecureCounter = NSCFunction( prvCallback );
|
||||
|
||||
/* Make sure that both the counters are incremented. */
|
||||
configASSERT( ulCurrentSecureCounter == ulLastSecureCounter + 1 );
|
||||
configASSERT( ulNonSecureCounter[ 0 ] == ulLastNonSecureCounter + 1 );
|
||||
|
||||
/* Update the last values for both the counters. */
|
||||
ulLastSecureCounter = ulCurrentSecureCounter;
|
||||
ulLastNonSecureCounter = ulNonSecureCounter[ 0 ];
|
||||
|
||||
/* Wait for a second. */
|
||||
vTaskDelay( pdMS_TO_TICKS( 1000 ) );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* FreeRTOS Kernel V10.2.1
|
||||
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* http://www.FreeRTOS.org
|
||||
* http://aws.amazon.com/freertos
|
||||
*
|
||||
* 1 tab == 4 spaces!
|
||||
*/
|
||||
|
||||
#ifndef __TZ_DEMO_H__
|
||||
#define __TZ_DEMO_H__
|
||||
|
||||
/**
|
||||
* @brief Creates all the tasks for TZ demo.
|
||||
*
|
||||
* The Trust Zone (TZ) demo creates an unprivileged task which calls a secure
|
||||
* side function and passes a pointer to a callback function. The secure side
|
||||
* function does two things:
|
||||
* 1. It calls the provided callback function. The callback function increments
|
||||
* a counter.
|
||||
* 2. It increments a counter and returns the incremented value.
|
||||
* After the secure function call finishes, it verifies that both the counters
|
||||
* are incremented.
|
||||
*/
|
||||
void vStartTZDemo( void );
|
||||
|
||||
#endif /* __TZ_DEMO_H__ */
|
Reference in New Issue
Block a user