Merge branch 'main' into clear-pending-signals

This commit is contained in:
John Boiles 2025-01-29 12:08:49 -08:00 committed by GitHub
commit 0e644d3cd0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
43 changed files with 799 additions and 296 deletions

View file

@ -150,16 +150,25 @@ jobs:
with: with:
path: ./FreeRTOS/Source path: ./FreeRTOS/Source
- name: Install MSP430 Toolchain - env:
stepName: Install MSP430 Toolchain
shell: bash shell: bash
run: | run: |
sudo apt-get -y update # ${{ env.stepName }}
sudo apt-get -y install gcc-msp430 build-essential echo -e "::group::${{ env.bashInfo }} ${{ env.stepName }} ${{ env.bashEnd }}"
curl -L -O https://dr-download.ti.com/software-development/ide-configuration-compiler-or-debugger/MD-LlCjWuAbzH/9.3.1.2/msp430-gcc-full-linux-x64-installer-9.3.1.2.7z
sudo apt update -y
sudo apt install -y p7zip-full
7z x ./msp430-gcc-full-linux-x64-installer-9.3.1.2.7z
chmod +x ./msp430-gcc-full-linux-x64-installer-9.3.1.2.run
sudo ./msp430-gcc-full-linux-x64-installer-9.3.1.2.run --prefix /usr/bin/msp430-gcc --mode unattended
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"
- name: Build msp430_GCC Demo - name: Build msp430_GCC Demo
shell: bash shell: bash
working-directory: FreeRTOS/Demo/msp430_GCC working-directory: FreeRTOS/Demo/msp430_GCC
run: make -j run: make -j CC=/usr/bin/msp430-gcc/bin/msp430-elf-gcc OPT="-Os -I/usr/bin/msp430-gcc/include -L/usr/bin/msp430-gcc/include"
MicroBlaze-GCC: MicroBlaze-GCC:
name: GCC MicroBlaze Toolchain name: GCC MicroBlaze Toolchain
@ -259,12 +268,12 @@ jobs:
fetch-depth: 1 fetch-depth: 1
- env: - env:
stepName: Fetch Community-Supported-Demos Submodule stepName: Fetch Dependencies
shell: bash shell: bash
run: | run: |
# ${{ env.stepName }} # ${{ env.stepName }}
echo -e "::group::${{ env.bashInfo }} ${{ env.stepName }} ${{ env.bashEnd }}" echo -e "::group::${{ env.bashInfo }} ${{ env.stepName }} ${{ env.bashEnd }}"
git submodule update --checkout --init --depth 1 FreeRTOS/Demo/ThirdParty/Community-Supported-Demos git submodule update --checkout --init --depth 1 FreeRTOS/Demo/ThirdParty/Community-Supported-Demos FreeRTOS-Plus/Source/FreeRTOS-Plus-Trace
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"
# Checkout user pull request changes # Checkout user pull request changes

View file

@ -115,6 +115,25 @@ _Ref 11.5.5_
because data storage buffers are implemented as uint8_t arrays for the because data storage buffers are implemented as uint8_t arrays for the
ease of sizing, alignment and access. ease of sizing, alignment and access.
#### Rule 14.3
MISRA C-2012 Rule 14.3: Controlling expressions shall not be invariant.
_Ref 14.3_
- The `configMAX_TASK_NAME_LEN` and `taskRESERVED_TASK_NAME_LENGTH` are
evaluated to constants at compile time and may vary based on the build
configuration.
#### Rule 18.1
MISRA C-2012 Rule 18.1: A pointer resulting from arithmetic on a pointer operand
shall address an element of the same array as that pointer operand.
_Ref 18.1_
- Array access remains within bounds since either the null terminator in
the IDLE task name will break the loop, or the loop will break normally
if the array size is smaller than the IDLE task name length.
#### Rule 21.6 #### Rule 21.6
MISRA C-2012 Rule 21.6: The Standard Library input/output functions shall not MISRA C-2012 Rule 21.6: The Standard Library input/output functions shall not

View file

@ -1484,6 +1484,14 @@
#define traceRETURN_xQueueCreateSet( pxQueue ) #define traceRETURN_xQueueCreateSet( pxQueue )
#endif #endif
#ifndef traceENTER_xQueueCreateSetStatic
#define traceENTER_xQueueCreateSetStatic( uxEventQueueLength )
#endif
#ifndef traceRETURN_xQueueCreateSetStatic
#define traceRETURN_xQueueCreateSetStatic( pxQueue )
#endif
#ifndef traceENTER_xQueueAddToSet #ifndef traceENTER_xQueueAddToSet
#define traceENTER_xQueueAddToSet( xQueueOrSemaphore, xQueueSet ) #define traceENTER_xQueueAddToSet( xQueueOrSemaphore, xQueueSet )
#endif #endif

View file

@ -43,12 +43,12 @@
* writer and reader to be different tasks or interrupts, but, unlike other * writer and reader to be different tasks or interrupts, but, unlike other
* FreeRTOS objects, it is not safe to have multiple different writers or * FreeRTOS objects, it is not safe to have multiple different writers or
* multiple different readers. If there are to be multiple different writers * multiple different readers. If there are to be multiple different writers
* then the application writer must place each call to a writing API function * then the application writer must serialize calls to writing API functions
* (such as xMessageBufferSend()) inside a critical section and set the send * (such as xStreamBufferSend()). Likewise, if there are to be multiple
* block time to 0. Likewise, if there are to be multiple different readers * different readers then the application writer must serialize calls to reading
* then the application writer must place each call to a reading API function * API functions (such as xStreamBufferReceive()). One way to achieve such
* (such as xMessageBufferRead()) inside a critical section and set the receive * serialization in single core or SMP kernel is to place each API call inside a
* timeout to 0. * critical section and use a block time of 0.
* *
* Message buffers hold variable length messages. To enable that, when a * Message buffers hold variable length messages. To enable that, when a
* message is written to the message buffer an additional sizeof( size_t ) bytes * message is written to the message buffer an additional sizeof( size_t ) bytes
@ -306,12 +306,12 @@ typedef StreamBufferHandle_t MessageBufferHandle_t;
* writer and reader to be different tasks or interrupts, but, unlike other * writer and reader to be different tasks or interrupts, but, unlike other
* FreeRTOS objects, it is not safe to have multiple different writers or * FreeRTOS objects, it is not safe to have multiple different writers or
* multiple different readers. If there are to be multiple different writers * multiple different readers. If there are to be multiple different writers
* then the application writer must place each call to a writing API function * then the application writer must serialize calls to writing API functions
* (such as xMessageBufferSend()) inside a critical section and set the send * (such as xStreamBufferSend()). Likewise, if there are to be multiple
* block time to 0. Likewise, if there are to be multiple different readers * different readers then the application writer must serialize calls to reading
* then the application writer must place each call to a reading API function * API functions (such as xStreamBufferReceive()). One way to achieve such
* (such as xMessageBufferRead()) inside a critical section and set the receive * serialization in single core or SMP kernel is to place each API call inside a
* block time to 0. * critical section and use a block time of 0.
* *
* Use xMessageBufferSend() to write to a message buffer from a task. Use * Use xMessageBufferSend() to write to a message buffer from a task. Use
* xMessageBufferSendFromISR() to write to a message buffer from an interrupt * xMessageBufferSendFromISR() to write to a message buffer from an interrupt
@ -409,12 +409,12 @@ typedef StreamBufferHandle_t MessageBufferHandle_t;
* writer and reader to be different tasks or interrupts, but, unlike other * writer and reader to be different tasks or interrupts, but, unlike other
* FreeRTOS objects, it is not safe to have multiple different writers or * FreeRTOS objects, it is not safe to have multiple different writers or
* multiple different readers. If there are to be multiple different writers * multiple different readers. If there are to be multiple different writers
* then the application writer must place each call to a writing API function * then the application writer must serialize calls to writing API functions
* (such as xMessageBufferSend()) inside a critical section and set the send * (such as xStreamBufferSend()). Likewise, if there are to be multiple
* block time to 0. Likewise, if there are to be multiple different readers * different readers then the application writer must serialize calls to reading
* then the application writer must place each call to a reading API function * API functions (such as xStreamBufferReceive()). One way to achieve such
* (such as xMessageBufferRead()) inside a critical section and set the receive * serialization in single core or SMP kernel is to place each API call inside a
* block time to 0. * critical section and use a block time of 0.
* *
* Use xMessageBufferSend() to write to a message buffer from a task. Use * Use xMessageBufferSend() to write to a message buffer from a task. Use
* xMessageBufferSendFromISR() to write to a message buffer from an interrupt * xMessageBufferSendFromISR() to write to a message buffer from an interrupt
@ -516,12 +516,12 @@ typedef StreamBufferHandle_t MessageBufferHandle_t;
* writer and reader to be different tasks or interrupts, but, unlike other * writer and reader to be different tasks or interrupts, but, unlike other
* FreeRTOS objects, it is not safe to have multiple different writers or * FreeRTOS objects, it is not safe to have multiple different writers or
* multiple different readers. If there are to be multiple different writers * multiple different readers. If there are to be multiple different writers
* then the application writer must place each call to a writing API function * then the application writer must serialize calls to writing API functions
* (such as xMessageBufferSend()) inside a critical section and set the send * (such as xStreamBufferSend()). Likewise, if there are to be multiple
* block time to 0. Likewise, if there are to be multiple different readers * different readers then the application writer must serialize calls to reading
* then the application writer must place each call to a reading API function * API functions (such as xStreamBufferReceive()). One way to achieve such
* (such as xMessageBufferRead()) inside a critical section and set the receive * serialization in single core or SMP kernel is to place each API call inside a
* block time to 0. * critical section and use a block time of 0.
* *
* Use xMessageBufferReceive() to read from a message buffer from a task. Use * Use xMessageBufferReceive() to read from a message buffer from a task. Use
* xMessageBufferReceiveFromISR() to read from a message buffer from an * xMessageBufferReceiveFromISR() to read from a message buffer from an
@ -610,12 +610,12 @@ typedef StreamBufferHandle_t MessageBufferHandle_t;
* writer and reader to be different tasks or interrupts, but, unlike other * writer and reader to be different tasks or interrupts, but, unlike other
* FreeRTOS objects, it is not safe to have multiple different writers or * FreeRTOS objects, it is not safe to have multiple different writers or
* multiple different readers. If there are to be multiple different writers * multiple different readers. If there are to be multiple different writers
* then the application writer must place each call to a writing API function * then the application writer must serialize calls to writing API functions
* (such as xMessageBufferSend()) inside a critical section and set the send * (such as xStreamBufferSend()). Likewise, if there are to be multiple
* block time to 0. Likewise, if there are to be multiple different readers * different readers then the application writer must serialize calls to reading
* then the application writer must place each call to a reading API function * API functions (such as xStreamBufferReceive()). One way to achieve such
* (such as xMessageBufferRead()) inside a critical section and set the receive * serialization in single core or SMP kernel is to place each API call inside a
* block time to 0. * critical section and use a block time of 0.
* *
* Use xMessageBufferReceive() to read from a message buffer from a task. Use * Use xMessageBufferReceive() to read from a message buffer from a task. Use
* xMessageBufferReceiveFromISR() to read from a message buffer from an * xMessageBufferReceiveFromISR() to read from a message buffer from an

View file

@ -269,6 +269,9 @@ uint8_t MPU_ucQueueGetQueueType( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;
StaticQueue_t * pxStaticQueue, StaticQueue_t * pxStaticQueue,
const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL; const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL;
QueueSetHandle_t MPU_xQueueCreateSet( const UBaseType_t uxEventQueueLength ) FREERTOS_SYSTEM_CALL; QueueSetHandle_t MPU_xQueueCreateSet( const UBaseType_t uxEventQueueLength ) FREERTOS_SYSTEM_CALL;
QueueSetHandle_t MPU_xQueueCreateSetStatic( const UBaseType_t uxEventQueueLength,
uint8_t * pucQueueStorage,
StaticQueue_t * pxStaticQueue ) FREERTOS_SYSTEM_CALL;
BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,
QueueSetHandle_t xQueueSet ) FREERTOS_SYSTEM_CALL; QueueSetHandle_t xQueueSet ) FREERTOS_SYSTEM_CALL;
BaseType_t MPU_xQueueGenericReset( QueueHandle_t xQueue, BaseType_t MPU_xQueueGenericReset( QueueHandle_t xQueue,
@ -294,6 +297,9 @@ uint8_t MPU_ucQueueGetQueueType( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;
StaticQueue_t * pxStaticQueue, StaticQueue_t * pxStaticQueue,
const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
QueueSetHandle_t MPU_xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION; QueueSetHandle_t MPU_xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;
QueueSetHandle_t MPU_xQueueCreateSetStatic( const UBaseType_t uxEventQueueLength,
uint8_t * pucQueueStorage,
StaticQueue_t * pxStaticQueue ) PRIVILEGED_FUNCTION;
BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,
QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
BaseType_t MPU_xQueueGenericReset( QueueHandle_t xQueue, BaseType_t MPU_xQueueGenericReset( QueueHandle_t xQueue,

View file

@ -150,6 +150,7 @@
#define xQueueGenericCreateStatic MPU_xQueueGenericCreateStatic #define xQueueGenericCreateStatic MPU_xQueueGenericCreateStatic
#define xQueueGenericReset MPU_xQueueGenericReset #define xQueueGenericReset MPU_xQueueGenericReset
#define xQueueCreateSet MPU_xQueueCreateSet #define xQueueCreateSet MPU_xQueueCreateSet
#define xQueueCreateSetStatic MPU_xQueueCreateSetStatic
#define xQueueRemoveFromSet MPU_xQueueRemoveFromSet #define xQueueRemoveFromSet MPU_xQueueRemoveFromSet
#if ( configUSE_MPU_WRAPPERS_V1 == 0 ) #if ( configUSE_MPU_WRAPPERS_V1 == 0 )

View file

@ -1638,12 +1638,12 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION;
* See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this
* function. * function.
* *
* A queue set must be explicitly created using a call to xQueueCreateSet() * A queue set must be explicitly created using a call to xQueueCreateSet() or
* before it can be used. Once created, standard FreeRTOS queues and semaphores * xQueueCreateSetStatic() before it can be used. Once created, standard
* can be added to the set using calls to xQueueAddToSet(). * FreeRTOS queues and semaphores can be added to the set using calls to
* xQueueSelectFromSet() is then used to determine which, if any, of the queues * xQueueAddToSet(). xQueueSelectFromSet() is then used to determine which, if
* or semaphores contained in the set is in a state where a queue read or * any, of the queues or semaphores contained in the set is in a state where a
* semaphore take operation would be successful. * queue read or semaphore take operation would be successful.
* *
* Note 1: See the documentation on https://www.freertos.org/Documentation/02-Kernel/04-API-references/07-Queue-sets/00-RTOS-queue-sets * Note 1: See the documentation on https://www.freertos.org/Documentation/02-Kernel/04-API-references/07-Queue-sets/00-RTOS-queue-sets
* for reasons why queue sets are very rarely needed in practice as there are * for reasons why queue sets are very rarely needed in practice as there are
@ -1683,9 +1683,69 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION;
QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION; QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;
#endif #endif
/*
* Queue sets provide a mechanism to allow a task to block (pend) on a read
* operation from multiple queues or semaphores simultaneously.
*
* See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this
* function.
*
* A queue set must be explicitly created using a call to xQueueCreateSet()
* or xQueueCreateSetStatic() before it can be used. Once created, standard
* FreeRTOS queues and semaphores can be added to the set using calls to
* xQueueAddToSet(). xQueueSelectFromSet() is then used to determine which, if
* any, of the queues or semaphores contained in the set is in a state where a
* queue read or semaphore take operation would be successful.
*
* Note 1: See the documentation on https://www.freertos.org/Documentation/02-Kernel/04-API-references/07-Queue-sets/00-RTOS-queue-sets
* for reasons why queue sets are very rarely needed in practice as there are
* simpler methods of blocking on multiple objects.
*
* Note 2: Blocking on a queue set that contains a mutex will not cause the
* mutex holder to inherit the priority of the blocked task.
*
* Note 3: An additional 4 bytes of RAM is required for each space in a every
* queue added to a queue set. Therefore counting semaphores that have a high
* maximum count value should not be added to a queue set.
*
* Note 4: A receive (in the case of a queue) or take (in the case of a
* semaphore) operation must not be performed on a member of a queue set unless
* a call to xQueueSelectFromSet() has first returned a handle to that set member.
*
* @param uxEventQueueLength Queue sets store events that occur on
* the queues and semaphores contained in the set. uxEventQueueLength specifies
* the maximum number of events that can be queued at once. To be absolutely
* certain that events are not lost uxEventQueueLength should be set to the
* total sum of the length of the queues added to the set, where binary
* semaphores and mutexes have a length of 1, and counting semaphores have a
* length set by their maximum count value. Examples:
* + If a queue set is to hold a queue of length 5, another queue of length 12,
* and a binary semaphore, then uxEventQueueLength should be set to
* (5 + 12 + 1), or 18.
* + If a queue set is to hold three binary semaphores then uxEventQueueLength
* should be set to (1 + 1 + 1 ), or 3.
* + If a queue set is to hold a counting semaphore that has a maximum count of
* 5, and a counting semaphore that has a maximum count of 3, then
* uxEventQueueLength should be set to (5 + 3), or 8.
*
* @param pucQueueStorage pucQueueStorage must point to a uint8_t array that is
* at least large enough to hold uxEventQueueLength events.
*
* @param pxQueueBuffer Must point to a variable of type StaticQueue_t, which
* will be used to hold the queue's data structure.
*
* @return If the queue set is created successfully then a handle to the created
* queue set is returned. If pxQueueBuffer is NULL then NULL is returned.
*/
#if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
QueueSetHandle_t xQueueCreateSetStatic( const UBaseType_t uxEventQueueLength,
uint8_t * pucQueueStorage,
StaticQueue_t * pxStaticQueue ) PRIVILEGED_FUNCTION;
#endif
/* /*
* Adds a queue or semaphore to a queue set that was previously created by a * Adds a queue or semaphore to a queue set that was previously created by a
* call to xQueueCreateSet(). * call to xQueueCreateSet() or xQueueCreateSetStatic().
* *
* See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this
* function. * function.

View file

@ -40,12 +40,12 @@
* writer and reader to be different tasks or interrupts, but, unlike other * writer and reader to be different tasks or interrupts, but, unlike other
* FreeRTOS objects, it is not safe to have multiple different writers or * FreeRTOS objects, it is not safe to have multiple different writers or
* multiple different readers. If there are to be multiple different writers * multiple different readers. If there are to be multiple different writers
* then the application writer must place each call to a writing API function * then the application writer must serialize calls to writing API functions
* (such as xStreamBufferSend()) inside a critical section and set the send * (such as xStreamBufferSend()). Likewise, if there are to be multiple
* block time to 0. Likewise, if there are to be multiple different readers * different readers then the application writer must serialize calls to reading
* then the application writer must place each call to a reading API function * API functions (such as xStreamBufferReceive()). One way to achieve such
* (such as xStreamBufferReceive()) inside a critical section section and set the * serialization in single core or SMP kernel is to place each API call inside a
* receive block time to 0. * critical section and use a block time of 0.
* *
*/ */
@ -514,12 +514,12 @@ typedef void (* StreamBufferCallbackFunction_t)( StreamBufferHandle_t xStreamBuf
* writer and reader to be different tasks or interrupts, but, unlike other * writer and reader to be different tasks or interrupts, but, unlike other
* FreeRTOS objects, it is not safe to have multiple different writers or * FreeRTOS objects, it is not safe to have multiple different writers or
* multiple different readers. If there are to be multiple different writers * multiple different readers. If there are to be multiple different writers
* then the application writer must place each call to a writing API function * then the application writer must serialize calls to writing API functions
* (such as xStreamBufferSend()) inside a critical section and set the send * (such as xStreamBufferSend()). Likewise, if there are to be multiple
* block time to 0. Likewise, if there are to be multiple different readers * different readers then the application writer must serialize calls to reading
* then the application writer must place each call to a reading API function * API functions (such as xStreamBufferReceive()). One way to achieve such
* (such as xStreamBufferReceive()) inside a critical section and set the receive * serialization in single core or SMP kernel is to place each API call inside a
* block time to 0. * critical section and use a block time of 0.
* *
* Use xStreamBufferSend() to write to a stream buffer from a task. Use * Use xStreamBufferSend() to write to a stream buffer from a task. Use
* xStreamBufferSendFromISR() to write to a stream buffer from an interrupt * xStreamBufferSendFromISR() to write to a stream buffer from an interrupt
@ -615,12 +615,12 @@ size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
* writer and reader to be different tasks or interrupts, but, unlike other * writer and reader to be different tasks or interrupts, but, unlike other
* FreeRTOS objects, it is not safe to have multiple different writers or * FreeRTOS objects, it is not safe to have multiple different writers or
* multiple different readers. If there are to be multiple different writers * multiple different readers. If there are to be multiple different writers
* then the application writer must place each call to a writing API function * then the application writer must serialize calls to writing API functions
* (such as xStreamBufferSend()) inside a critical section and set the send * (such as xStreamBufferSend()). Likewise, if there are to be multiple
* block time to 0. Likewise, if there are to be multiple different readers * different readers then the application writer must serialize calls to reading
* then the application writer must place each call to a reading API function * API functions (such as xStreamBufferReceive()). One way to achieve such
* (such as xStreamBufferReceive()) inside a critical section and set the receive * serialization in single core or SMP kernel is to place each API call inside a
* block time to 0. * critical section and use a block time of 0.
* *
* Use xStreamBufferSend() to write to a stream buffer from a task. Use * Use xStreamBufferSend() to write to a stream buffer from a task. Use
* xStreamBufferSendFromISR() to write to a stream buffer from an interrupt * xStreamBufferSendFromISR() to write to a stream buffer from an interrupt
@ -718,12 +718,12 @@ size_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer,
* writer and reader to be different tasks or interrupts, but, unlike other * writer and reader to be different tasks or interrupts, but, unlike other
* FreeRTOS objects, it is not safe to have multiple different writers or * FreeRTOS objects, it is not safe to have multiple different writers or
* multiple different readers. If there are to be multiple different writers * multiple different readers. If there are to be multiple different writers
* then the application writer must place each call to a writing API function * then the application writer must serialize calls to writing API functions
* (such as xStreamBufferSend()) inside a critical section and set the send * (such as xStreamBufferSend()). Likewise, if there are to be multiple
* block time to 0. Likewise, if there are to be multiple different readers * different readers then the application writer must serialize calls to reading
* then the application writer must place each call to a reading API function * API functions (such as xStreamBufferReceive()). One way to achieve such
* (such as xStreamBufferReceive()) inside a critical section and set the receive * serialization in single core or SMP kernel is to place each API call inside a
* block time to 0. * critical section and use a block time of 0.
* *
* Use xStreamBufferReceive() to read from a stream buffer from a task. Use * Use xStreamBufferReceive() to read from a stream buffer from a task. Use
* xStreamBufferReceiveFromISR() to read from a stream buffer from an * xStreamBufferReceiveFromISR() to read from a stream buffer from an

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -1524,6 +1524,34 @@
#endif /* if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */ #endif /* if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
QueueSetHandle_t MPU_xQueueCreateSetStatic( const UBaseType_t uxEventQueueLength,
uint8_t * pucQueueStorage,
StaticQueue_t * pxStaticQueue ) /* FREERTOS_SYSTEM_CALL */
{
QueueSetHandle_t xReturn;
if( portIS_PRIVILEGED() == pdFALSE )
{
portRAISE_PRIVILEGE();
portMEMORY_BARRIER();
xReturn = xQueueCreateSetStatic( uxEventQueueLength, pucQueueStorage, pxStaticQueue );
portMEMORY_BARRIER();
portRESET_PRIVILEGE();
portMEMORY_BARRIER();
}
else
{
xReturn = xQueueCreateSetStatic( uxEventQueueLength, pucQueueStorage, pxStaticQueue );
}
return xReturn;
}
#endif /* if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) */
/*-----------------------------------------------------------*/
#if ( configUSE_QUEUE_SETS == 1 ) #if ( configUSE_QUEUE_SETS == 1 )
QueueSetMemberHandle_t MPU_xQueueSelectFromSet( QueueSetHandle_t xQueueSet, QueueSetMemberHandle_t MPU_xQueueSelectFromSet( QueueSetHandle_t xQueueSet,
TickType_t xBlockTimeTicks ) /* FREERTOS_SYSTEM_CALL */ TickType_t xBlockTimeTicks ) /* FREERTOS_SYSTEM_CALL */

View file

@ -3016,6 +3016,39 @@
#endif /* if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */ #endif /* if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
QueueSetHandle_t MPU_xQueueCreateSetStatic( const UBaseType_t uxEventQueueLength,
uint8_t * pucQueueStorage,
StaticQueue_t * pxStaticQueue ) /* PRIVILEGED_FUNCTION */
{
QueueSetHandle_t xInternalQueueSetHandle = NULL;
QueueSetHandle_t xExternalQueueSetHandle = NULL;
int32_t lIndex;
lIndex = MPU_GetFreeIndexInKernelObjectPool();
if( lIndex != -1 )
{
xInternalQueueSetHandle = xQueueCreateSetStatic( uxEventQueueLength, pucQueueStorage, pxStaticQueue );
if( xInternalQueueSetHandle != NULL )
{
MPU_StoreQueueSetHandleAtIndex( lIndex, xInternalQueueSetHandle );
xExternalQueueSetHandle = ( QueueSetHandle_t ) CONVERT_TO_EXTERNAL_INDEX( lIndex );
}
else
{
MPU_SetIndexFreeInKernelObjectPool( lIndex );
}
}
return xExternalQueueSetHandle;
}
#endif /* if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) */
/*-----------------------------------------------------------*/
#if ( configUSE_QUEUE_SETS == 1 ) #if ( configUSE_QUEUE_SETS == 1 )
BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,

View file

@ -121,6 +121,10 @@
::"r" ( portUNMASK_VALUE ) ); \ ::"r" ( portUNMASK_VALUE ) ); \
} }
/* The space on the stack required to hold the FPU registers.
* There are 32 128-bit plus 2 64-bit status registers.*/
#define portFPU_REGISTER_WORDS ( (32 * 2) + 2 )
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
/* /*
@ -129,6 +133,27 @@
*/ */
extern void vPortRestoreTaskContext( void ); extern void vPortRestoreTaskContext( void );
/*
* If the application provides an implementation of vApplicationIRQHandler(),
* then it will get called directly without saving the FPU registers on
* interrupt entry, and this weak implementation of
* vApplicationFPUSafeIRQHandler() is just provided to remove linkage errors -
* it should never actually get called so its implementation contains a
* call to configASSERT() that will always fail.
*
* If the application provides its own implementation of
* vApplicationFPUSafeIRQHandler() then the implementation of
* vApplicationIRQHandler() provided in portASM.S will save the FPU registers
* before calling it.
*
* Therefore, if the application writer wants FPU registers to be saved on
* interrupt entry their IRQ handler must be called
* vApplicationFPUSafeIRQHandler(), and if the application writer does not want
* FPU registers to be saved on interrupt entry their IRQ handler must be
* called vApplicationIRQHandler().
*/
void vApplicationFPUSafeIRQHandler( uint32_t ulICCIAR ) __attribute__((weak) );
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
/* A variable is used to keep track of the critical section nesting. This /* A variable is used to keep track of the critical section nesting. This
@ -229,23 +254,47 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
*pxTopOfStack = ( StackType_t ) 0x00; /* XZR - has no effect, used so there are an even number of registers. */ *pxTopOfStack = ( StackType_t ) 0x00; /* XZR - has no effect, used so there are an even number of registers. */
pxTopOfStack--; pxTopOfStack--;
*pxTopOfStack = ( StackType_t ) 0x00; /* R30 - procedure call link register. */ *pxTopOfStack = ( StackType_t ) 0x00; /* R30 - procedure call link register. */
pxTopOfStack--;
pxTopOfStack--;
*pxTopOfStack = portINITIAL_PSTATE; *pxTopOfStack = portINITIAL_PSTATE;
pxTopOfStack--;
pxTopOfStack--;
*pxTopOfStack = ( StackType_t ) pxCode; /* Exception return address. */ *pxTopOfStack = ( StackType_t ) pxCode; /* Exception return address. */
pxTopOfStack--;
/* The task will start with a critical nesting count of 0 as interrupts are #if ( configUSE_TASK_FPU_SUPPORT == 1 )
* enabled. */ {
*pxTopOfStack = portNO_CRITICAL_NESTING; /* The task will start with a critical nesting count of 0 as interrupts are
pxTopOfStack--; * enabled. */
pxTopOfStack--;
*pxTopOfStack = portNO_CRITICAL_NESTING;
/* The task will start without a floating point context. A task that uses /* The task will start without a floating point context. A task that
* the floating point hardware must call vPortTaskUsesFPU() before executing * uses the floating point hardware must call vPortTaskUsesFPU() before
* any floating point instructions. */ * executing any floating point instructions. */
*pxTopOfStack = portNO_FLOATING_POINT_CONTEXT; pxTopOfStack--;
*pxTopOfStack = portNO_FLOATING_POINT_CONTEXT;
}
#elif ( configUSE_TASK_FPU_SUPPORT == 2 )
{
/* The task will start with a floating point context. Leave enough
* space for the registers - and ensure they are initialised to 0. */
pxTopOfStack -= portFPU_REGISTER_WORDS;
memset( pxTopOfStack, 0x00, portFPU_REGISTER_WORDS * sizeof( StackType_t ) );
/* The task will start with a critical nesting count of 0 as interrupts are
* enabled. */
pxTopOfStack--;
*pxTopOfStack = portNO_CRITICAL_NESTING;
pxTopOfStack--;
*pxTopOfStack = pdTRUE;
ullPortTaskHasFPUContext = pdTRUE;
}
#else /* if ( configUSE_TASK_FPU_SUPPORT == 1 ) */
{
#error "Invalid configUSE_TASK_FPU_SUPPORT setting - configUSE_TASK_FPU_SUPPORT must be set to 1, 2, or left undefined."
}
#endif /* if ( configUSE_TASK_FPU_SUPPORT == 1 ) */
return pxTopOfStack; return pxTopOfStack;
} }
@ -384,6 +433,8 @@ void FreeRTOS_Tick_Handler( void )
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( configUSE_TASK_FPU_SUPPORT != 2 )
void vPortTaskUsesFPU( void ) void vPortTaskUsesFPU( void )
{ {
/* A task is registering the fact that it needs an FPU context. Set the /* A task is registering the fact that it needs an FPU context. Set the
@ -393,6 +444,8 @@ void vPortTaskUsesFPU( void )
/* Consider initialising the FPSR here - but probably not necessary in /* Consider initialising the FPSR here - but probably not necessary in
* AArch64. */ * AArch64. */
} }
#endif /* configUSE_TASK_FPU_SUPPORT */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
void vPortClearInterruptMask( UBaseType_t uxNewMaskValue ) void vPortClearInterruptMask( UBaseType_t uxNewMaskValue )
@ -463,3 +516,9 @@ UBaseType_t uxPortSetInterruptMask( void )
#endif /* configASSERT_DEFINED */ #endif /* configASSERT_DEFINED */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
void vApplicationFPUSafeIRQHandler( uint32_t ulICCIAR )
{
( void ) ulICCIAR;
configASSERT( ( volatile void * ) NULL );
}

View file

@ -87,7 +87,7 @@
LDR X0, ullPortTaskHasFPUContextConst LDR X0, ullPortTaskHasFPUContextConst
LDR X2, [X0] LDR X2, [X0]
/* Save the FPU context, if any (32 128-bit registers). */ /* Save the FPU context, if any (32 128-bit plus two 64-bit status registers). */
CMP X2, #0 CMP X2, #0
B.EQ 1f B.EQ 1f
STP Q0, Q1, [SP,#-0x20]! STP Q0, Q1, [SP,#-0x20]!
@ -107,6 +107,11 @@
STP Q28, Q29, [SP,#-0x20]! STP Q28, Q29, [SP,#-0x20]!
STP Q30, Q31, [SP,#-0x20]! STP Q30, Q31, [SP,#-0x20]!
/* Even though upper 32 bits of FPSR and FPCR are reserved, save and restore the whole 64 bits to keep 16-byte SP alignement. */
MRS X9, FPSR
MRS X10, FPCR
STP X9, X10, [SP, #-0x10]!
1: 1:
/* Store the critical nesting count and FPU context indicator. */ /* Store the critical nesting count and FPU context indicator. */
STP X2, X3, [SP, #-0x10]! STP X2, X3, [SP, #-0x10]!
@ -157,6 +162,7 @@
/* Restore the FPU context, if any. */ /* Restore the FPU context, if any. */
CMP X2, #0 CMP X2, #0
B.EQ 1f B.EQ 1f
LDP X9, X10, [SP], #0x10
LDP Q30, Q31, [SP], #0x20 LDP Q30, Q31, [SP], #0x20
LDP Q28, Q29, [SP], #0x20 LDP Q28, Q29, [SP], #0x20
LDP Q26, Q27, [SP], #0x20 LDP Q26, Q27, [SP], #0x20
@ -173,6 +179,8 @@
LDP Q4, Q5, [SP], #0x20 LDP Q4, Q5, [SP], #0x20
LDP Q2, Q3, [SP], #0x20 LDP Q2, Q3, [SP], #0x20
LDP Q0, Q1, [SP], #0x20 LDP Q0, Q1, [SP], #0x20
MSR FPSR, X9
MSR FPCR, X10
1: 1:
LDP X2, X3, [SP], #0x10 /* SPSR and ELR. */ LDP X2, X3, [SP], #0x10 /* SPSR and ELR. */
@ -406,8 +414,82 @@ Exit_IRQ_No_Context_Switch:
ERET ERET
/******************************************************************************
* If the application provides an implementation of vApplicationIRQHandler(),
* then it will get called directly without saving the FPU registers on
* interrupt entry, and this weak implementation of
* vApplicationIRQHandler() will not get called.
*
* If the application provides its own implementation of
* vApplicationFPUSafeIRQHandler() then this implementation of
* vApplicationIRQHandler() will be called, save the FPU registers, and then
* call vApplicationFPUSafeIRQHandler().
*
* Therefore, if the application writer wants FPU registers to be saved on
* interrupt entry their IRQ handler must be called
* vApplicationFPUSafeIRQHandler(), and if the application writer does not want
* FPU registers to be saved on interrupt entry their IRQ handler must be
* called vApplicationIRQHandler().
*****************************************************************************/
.align 8
.weak vApplicationIRQHandler
.type vApplicationIRQHandler, %function
vApplicationIRQHandler:
/* Save LR and FP on the stack */
STP X29, X30, [SP, #-0x10]!
/* Save FPU registers (32 128-bits + 2 64-bits configuration and status registers) */
STP Q0, Q1, [SP,#-0x20]!
STP Q2, Q3, [SP,#-0x20]!
STP Q4, Q5, [SP,#-0x20]!
STP Q6, Q7, [SP,#-0x20]!
STP Q8, Q9, [SP,#-0x20]!
STP Q10, Q11, [SP,#-0x20]!
STP Q12, Q13, [SP,#-0x20]!
STP Q14, Q15, [SP,#-0x20]!
STP Q16, Q17, [SP,#-0x20]!
STP Q18, Q19, [SP,#-0x20]!
STP Q20, Q21, [SP,#-0x20]!
STP Q22, Q23, [SP,#-0x20]!
STP Q24, Q25, [SP,#-0x20]!
STP Q26, Q27, [SP,#-0x20]!
STP Q28, Q29, [SP,#-0x20]!
STP Q30, Q31, [SP,#-0x20]!
/* Even though upper 32 bits of FPSR and FPCR are reserved, save and restore the whole 64 bits to keep 16-byte SP alignement. */
MRS X9, FPSR
MRS X10, FPCR
STP X9, X10, [SP, #-0x10]!
/* Call the C handler. */
BL vApplicationFPUSafeIRQHandler
/* Restore FPU registers */
LDP X9, X10, [SP], #0x10
LDP Q30, Q31, [SP], #0x20
LDP Q28, Q29, [SP], #0x20
LDP Q26, Q27, [SP], #0x20
LDP Q24, Q25, [SP], #0x20
LDP Q22, Q23, [SP], #0x20
LDP Q20, Q21, [SP], #0x20
LDP Q18, Q19, [SP], #0x20
LDP Q16, Q17, [SP], #0x20
LDP Q14, Q15, [SP], #0x20
LDP Q12, Q13, [SP], #0x20
LDP Q10, Q11, [SP], #0x20
LDP Q8, Q9, [SP], #0x20
LDP Q6, Q7, [SP], #0x20
LDP Q4, Q5, [SP], #0x20
LDP Q2, Q3, [SP], #0x20
LDP Q0, Q1, [SP], #0x20
MSR FPSR, X9
MSR FPCR, X10
/* Restore FP and LR */
LDP X29, X30, [SP], #0x10
RET
.align 8 .align 8
pxCurrentTCBConst: .dword pxCurrentTCB pxCurrentTCBConst: .dword pxCurrentTCB

View file

@ -135,9 +135,18 @@ extern void vPortInstallFreeRTOSVectorTable( void );
* handler for whichever peripheral is used to generate the RTOS tick. */ * handler for whichever peripheral is used to generate the RTOS tick. */
void FreeRTOS_Tick_Handler( void ); void FreeRTOS_Tick_Handler( void );
/* Any task that uses the floating point unit MUST call vPortTaskUsesFPU() /* If configUSE_TASK_FPU_SUPPORT is set to 1 (or left undefined) then tasks are
* before any floating point instructions are executed. */ * created without an FPU context and must call vPortTaskUsesFPU() to give
void vPortTaskUsesFPU( void ); * themselves an FPU context before using any FPU instructions. If
* configUSE_TASK_FPU_SUPPORT is set to 2 then all tasks will have an FPU context
* by default. */
#if ( configUSE_TASK_FPU_SUPPORT != 2 )
void vPortTaskUsesFPU( void );
#else
/* Each task has an FPU context already, so define this function away to
* nothing to prevent it from being called accidentally. */
#define vPortTaskUsesFPU()
#endif
#define portTASK_USES_FLOATING_POINT() vPortTaskUsesFPU() #define portTASK_USES_FLOATING_POINT() vPortTaskUsesFPU()
#define portLOWEST_INTERRUPT_PRIORITY ( ( ( uint32_t ) configUNIQUE_INTERRUPT_PRIORITIES ) - 1UL ) #define portLOWEST_INTERRUPT_PRIORITY ( ( ( uint32_t ) configUNIQUE_INTERRUPT_PRIORITIES ) - 1UL )

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -125,6 +125,14 @@ typedef struct MPU_REGION_SETTINGS
#endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */ #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
/*
* +------------------------------+-------------------------------+-----+
* | CONTROL, r4-r11, EXC_RETURN | PSP, r0-r3, r12, LR, PC, xPSR | |
* +------------------------------+-------------------------------+-----+
*
* <-----------------------------><-------------------------------><---->
* 10 9 1
*/
#define MAX_CONTEXT_SIZE ( 20 ) #define MAX_CONTEXT_SIZE ( 20 )
/* Size of an Access Control List (ACL) entry in bits. */ /* Size of an Access Control List (ACL) entry in bits. */

View file

@ -219,7 +219,16 @@ typedef struct MPU_REGION_SETTINGS
#endif /* configUSE_MPU_WRAPPERS_V1 == 0 */ #endif /* configUSE_MPU_WRAPPERS_V1 == 0 */
#define MAX_CONTEXT_SIZE ( 52 ) /*
* +---------+---------------+-----------------+-----------------+-----+
* | s16-s31 | s0-s15, FPSCR | CONTROL, r4-r11 | PSP, r0-r3, r12 | |
* | | | EXC_RETURN | LR, PC, xPSR | |
* +---------+---------------+-----------------+-----------------+-----+
*
* <--------><---------------><----------------><----------------><---->
* 16 17 10 9 1
*/
#define MAX_CONTEXT_SIZE ( 53 )
/* Size of an Access Control List (ACL) entry in bits. */ /* Size of an Access Control List (ACL) entry in bits. */
#define portACL_ENTRY_SIZE_BITS ( 32U ) #define portACL_ENTRY_SIZE_BITS ( 32U )

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -221,7 +221,16 @@ typedef struct MPU_REGION_SETTINGS
#endif /* configUSE_MPU_WRAPPERS_V1 == 0 */ #endif /* configUSE_MPU_WRAPPERS_V1 == 0 */
#define MAX_CONTEXT_SIZE ( 52 ) /*
* +---------+---------------+-----------------+-----------------+-----+
* | s16-s31 | s0-s15, FPSCR | CONTROL, r4-r11 | PSP, r0-r3, r12 | |
* | | | EXC_RETURN | LR, PC, xPSR | |
* +---------+---------------+-----------------+-----------------+-----+
*
* <--------><---------------><----------------><----------------><---->
* 16 17 10 9 1
*/
#define MAX_CONTEXT_SIZE ( 53 )
/* Size of an Access Control List (ACL) entry in bits. */ /* Size of an Access Control List (ACL) entry in bits. */
#define portACL_ENTRY_SIZE_BITS ( 32U ) #define portACL_ENTRY_SIZE_BITS ( 32U )

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -251,9 +251,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><-----------><----> * <-----------><--------------><---------><----------------><-----------------------------><-----------><---->
* 16 16 8 8 5 16 1 * 16 17 8 8 5 16 1
*/ */
#define MAX_CONTEXT_SIZE 70 #define MAX_CONTEXT_SIZE 71
#elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) ) #elif ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 0 ) )
@ -264,9 +264,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+------------------------------+-----+ * +-----------+---------------+----------+-----------------+------------------------------+-----+
* *
* <-----------><--------------><---------><----------------><-----------------------------><----> * <-----------><--------------><---------><----------------><-----------------------------><---->
* 16 16 8 8 5 1 * 16 17 8 8 5 1
*/ */
#define MAX_CONTEXT_SIZE 54 #define MAX_CONTEXT_SIZE 55
#elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) ) #elif ( ( configENABLE_TRUSTZONE == 0 ) && ( configENABLE_PAC == 1 ) )
@ -277,9 +277,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><-----------><----> * <-----------><--------------><---------><----------------><---------------------><-----------><---->
* 16 16 8 8 4 16 1 * 16 17 8 8 4 16 1
*/ */
#define MAX_CONTEXT_SIZE 69 #define MAX_CONTEXT_SIZE 70
#else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #else /* if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */
@ -290,9 +290,9 @@ extern void vClearInterruptMask( uint32_t ulMask ) /* __attribute__(( naked )) P
* +-----------+---------------+----------+-----------------+----------------------+-----+ * +-----------+---------------+----------+-----------------+----------------------+-----+
* *
* <-----------><--------------><---------><----------------><---------------------><----> * <-----------><--------------><---------><----------------><---------------------><---->
* 16 16 8 8 4 1 * 16 17 8 8 4 1
*/ */
#define MAX_CONTEXT_SIZE 53 #define MAX_CONTEXT_SIZE 54
#endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */ #endif /* #if ( ( configENABLE_TRUSTZONE == 1 ) && ( configENABLE_PAC == 1 ) ) */

View file

@ -218,7 +218,16 @@ typedef struct MPU_REGION_SETTINGS
#endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */ #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
#define MAX_CONTEXT_SIZE ( 52 ) /*
* +---------+---------------+-----------------+-----------------+-----+
* | s16-s31 | s0-s15, FPSCR | CONTROL, r4-r11 | PSP, r0-r3, r12 | |
* | | | EXC_RETURN | LR, PC, xPSR | |
* +---------+---------------+-----------------+-----------------+-----+
*
* <--------><---------------><----------------><----------------><---->
* 16 17 10 9 1
*/
#define MAX_CONTEXT_SIZE ( 53 )
/* Size of an Access Control List (ACL) entry in bits. */ /* Size of an Access Control List (ACL) entry in bits. */
#define portACL_ENTRY_SIZE_BITS ( 32U ) #define portACL_ENTRY_SIZE_BITS ( 32U )

@ -1 +1 @@
Subproject commit 3c5bfb8f2e557735b5200176b4a8b25a40c68d1b Subproject commit bae4c7aa19009825ba48071a8fe25dcb8be84880

View file

@ -65,10 +65,6 @@
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#ifdef __APPLE__
#include <mach/mach_vm.h>
#endif
/* Scheduler includes. */ /* Scheduler includes. */
#include "FreeRTOS.h" #include "FreeRTOS.h"
#include "task.h" #include "task.h"
@ -109,6 +105,8 @@ static BaseType_t xSchedulerEnd = pdFALSE;
static pthread_t hTimerTickThread; static pthread_t hTimerTickThread;
static bool xTimerTickThreadShouldRun; static bool xTimerTickThreadShouldRun;
static uint64_t prvStartTimeNs; static uint64_t prvStartTimeNs;
static pthread_mutex_t xThreadMutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_key_t xThreadKey = 0;
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
static void prvSetupSignalsAndSchedulerPolicy( void ); static void prvSetupSignalsAndSchedulerPolicy( void );
@ -121,6 +119,66 @@ static void prvResumeThread( Thread_t * xThreadId );
static void vPortSystemTickHandler( int sig ); static void vPortSystemTickHandler( int sig );
static void vPortStartFirstTask( void ); static void vPortStartFirstTask( void );
static void prvPortYieldFromISR( void ); static void prvPortYieldFromISR( void );
static void prvThreadKeyDestructor( void * pvData );
static void prvInitThreadKey( void );
static void prvMarkAsFreeRTOSThread( void );
static BaseType_t prvIsFreeRTOSThread( void );
static void prvDestroyThreadKey( void );
/*-----------------------------------------------------------*/
static void prvThreadKeyDestructor( void * pvData )
{
free( pvData );
}
/*-----------------------------------------------------------*/
static void prvInitThreadKey( void )
{
pthread_mutex_lock( &xThreadMutex );
if( xThreadKey == 0 )
{
pthread_key_create( &xThreadKey, prvThreadKeyDestructor );
}
pthread_mutex_unlock( &xThreadMutex );
}
/*-----------------------------------------------------------*/
static void prvMarkAsFreeRTOSThread( void )
{
uint8_t * pucThreadData = NULL;
prvInitThreadKey();
pucThreadData = malloc( 1 );
configASSERT( pucThreadData != NULL );
*pucThreadData = 1;
pthread_setspecific( xThreadKey, pucThreadData );
}
/*-----------------------------------------------------------*/
static BaseType_t prvIsFreeRTOSThread( void )
{
uint8_t * pucThreadData = NULL;
BaseType_t xRet = pdFALSE;
pucThreadData = ( uint8_t * ) pthread_getspecific( xThreadKey );
if( ( pucThreadData != NULL ) && ( *pucThreadData == 1 ) )
{
xRet = pdTRUE;
}
return xRet;
}
/*-----------------------------------------------------------*/
static void prvDestroyThreadKey( void )
{
pthread_key_delete( xThreadKey );
}
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
static void prvFatalError( const char * pcCall, static void prvFatalError( const char * pcCall,
@ -283,6 +341,8 @@ BaseType_t xPortStartScheduler( void )
/* Restore original signal mask. */ /* Restore original signal mask. */
( void ) pthread_sigmask( SIG_SETMASK, &xSchedulerOriginalSignalMask, NULL ); ( void ) pthread_sigmask( SIG_SETMASK, &xSchedulerOriginalSignalMask, NULL );
prvDestroyThreadKey();
return 0; return 0;
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
@ -300,8 +360,12 @@ void vPortEndScheduler( void )
( void ) pthread_kill( hMainThread, SIG_RESUME ); ( void ) pthread_kill( hMainThread, SIG_RESUME );
/* Waiting to be deleted here. */ /* Waiting to be deleted here. */
pxCurrentThread = prvGetThreadFromTask( xTaskGetCurrentTaskHandle() ); if( prvIsFreeRTOSThread() == pdTRUE )
event_wait( pxCurrentThread->ev ); {
pxCurrentThread = prvGetThreadFromTask( xTaskGetCurrentTaskHandle() );
event_wait( pxCurrentThread->ev );
}
pthread_testcancel(); pthread_testcancel();
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
@ -356,13 +420,19 @@ void vPortYield( void )
void vPortDisableInterrupts( void ) void vPortDisableInterrupts( void )
{ {
pthread_sigmask( SIG_BLOCK, &xAllSignals, NULL ); if( prvIsFreeRTOSThread() == pdTRUE )
{
pthread_sigmask(SIG_BLOCK, &xAllSignals, NULL);
}
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
void vPortEnableInterrupts( void ) void vPortEnableInterrupts( void )
{ {
pthread_sigmask( SIG_UNBLOCK, &xAllSignals, NULL ); if( prvIsFreeRTOSThread() == pdTRUE )
{
pthread_sigmask( SIG_UNBLOCK, &xAllSignals, NULL );
}
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
@ -398,7 +468,9 @@ static void * prvTimerTickHandler( void * arg )
{ {
( void ) arg; ( void ) arg;
prvPortSetCurrentThreadName("Scheduler timer"); prvMarkAsFreeRTOSThread();
prvPortSetCurrentThreadName( "Scheduler timer" );
while( xTimerTickThreadShouldRun ) while( xTimerTickThreadShouldRun )
{ {
@ -430,26 +502,33 @@ void prvSetupTimerInterrupt( void )
static void vPortSystemTickHandler( int sig ) static void vPortSystemTickHandler( int sig )
{ {
Thread_t * pxThreadToSuspend; if( prvIsFreeRTOSThread() == pdTRUE )
Thread_t * pxThreadToResume;
( void ) sig;
uxCriticalNesting++; /* Signals are blocked in this signal handler. */
pxThreadToSuspend = prvGetThreadFromTask( xTaskGetCurrentTaskHandle() );
if( xTaskIncrementTick() != pdFALSE )
{ {
/* Select Next Task. */ Thread_t * pxThreadToSuspend;
vTaskSwitchContext(); Thread_t * pxThreadToResume;
pxThreadToResume = prvGetThreadFromTask( xTaskGetCurrentTaskHandle() ); ( void ) sig;
prvSwitchThread( pxThreadToResume, pxThreadToSuspend ); uxCriticalNesting++; /* Signals are blocked in this signal handler. */
pxThreadToSuspend = prvGetThreadFromTask( xTaskGetCurrentTaskHandle() );
if( xTaskIncrementTick() != pdFALSE )
{
/* Select Next Task. */
vTaskSwitchContext();
pxThreadToResume = prvGetThreadFromTask( xTaskGetCurrentTaskHandle() );
prvSwitchThread( pxThreadToResume, pxThreadToSuspend );
}
uxCriticalNesting--;
}
else
{
fprintf( stderr, "vPortSystemTickHandler called from non-FreeRTOS thread\n" );
} }
uxCriticalNesting--;
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
@ -482,6 +561,8 @@ static void * prvWaitForStart( void * pvParams )
{ {
Thread_t * pxThread = pvParams; Thread_t * pxThread = pvParams;
prvMarkAsFreeRTOSThread();
prvSuspendSelf( pxThread ); prvSuspendSelf( pxThread );
/* Resumed for the first time, unblocks all signals. */ /* Resumed for the first time, unblocks all signals. */

View file

@ -35,9 +35,11 @@
struct event struct event
{ {
pthread_mutex_t mutex; pthread_mutex_t mutex;
pthread_mutexattr_t mutexattr;
pthread_cond_t cond; pthread_cond_t cond;
bool event_triggered; bool event_triggered;
}; };
/*-----------------------------------------------------------*/
struct event * event_create( void ) struct event * event_create( void )
{ {
@ -46,23 +48,36 @@ struct event * event_create( void )
if( ev != NULL ) if( ev != NULL )
{ {
ev->event_triggered = false; ev->event_triggered = false;
pthread_mutex_init( &ev->mutex, NULL ); pthread_mutexattr_init( &ev->mutexattr );
#ifndef __APPLE__
pthread_mutexattr_setrobust( &ev->mutexattr, PTHREAD_MUTEX_ROBUST );
#endif
pthread_mutex_init( &ev->mutex, &ev->mutexattr );
pthread_cond_init( &ev->cond, NULL ); pthread_cond_init( &ev->cond, NULL );
} }
return ev; return ev;
} }
/*-----------------------------------------------------------*/
void event_delete( struct event * ev ) void event_delete( struct event * ev )
{ {
pthread_mutex_destroy( &ev->mutex ); pthread_mutex_destroy( &ev->mutex );
pthread_mutexattr_destroy( &ev->mutexattr );
pthread_cond_destroy( &ev->cond ); pthread_cond_destroy( &ev->cond );
free( ev ); free( ev );
} }
/*-----------------------------------------------------------*/
bool event_wait( struct event * ev ) bool event_wait( struct event * ev )
{ {
pthread_mutex_lock( &ev->mutex ); if( pthread_mutex_lock( &ev->mutex ) == EOWNERDEAD )
{
#ifndef __APPLE__
/* If the thread owning the mutex died, make the mutex consistent. */
pthread_mutex_consistent( &ev->mutex );
#endif
}
while( ev->event_triggered == false ) while( ev->event_triggered == false )
{ {
@ -73,6 +88,8 @@ bool event_wait( struct event * ev )
pthread_mutex_unlock( &ev->mutex ); pthread_mutex_unlock( &ev->mutex );
return true; return true;
} }
/*-----------------------------------------------------------*/
bool event_wait_timed( struct event * ev, bool event_wait_timed( struct event * ev,
time_t ms ) time_t ms )
{ {
@ -82,7 +99,13 @@ bool event_wait_timed( struct event * ev,
clock_gettime( CLOCK_REALTIME, &ts ); clock_gettime( CLOCK_REALTIME, &ts );
ts.tv_sec += ms / 1000; ts.tv_sec += ms / 1000;
ts.tv_nsec += ( ( ms % 1000 ) * 1000000 ); ts.tv_nsec += ( ( ms % 1000 ) * 1000000 );
pthread_mutex_lock( &ev->mutex ); if( pthread_mutex_lock( &ev->mutex ) == EOWNERDEAD )
{
#ifndef __APPLE__
/* If the thread owning the mutex died, make the mutex consistent. */
pthread_mutex_consistent( &ev->mutex );
#endif
}
while( ( ev->event_triggered == false ) && ( ret == 0 ) ) while( ( ev->event_triggered == false ) && ( ret == 0 ) )
{ {
@ -98,11 +121,19 @@ bool event_wait_timed( struct event * ev,
pthread_mutex_unlock( &ev->mutex ); pthread_mutex_unlock( &ev->mutex );
return true; return true;
} }
/*-----------------------------------------------------------*/
void event_signal( struct event * ev ) void event_signal( struct event * ev )
{ {
pthread_mutex_lock( &ev->mutex ); if( pthread_mutex_lock( &ev->mutex ) == EOWNERDEAD )
{
#ifndef __APPLE__
/* If the thread owning the mutex died, make the mutex consistent. */
pthread_mutex_consistent( &ev->mutex );
#endif
}
ev->event_triggered = true; ev->event_triggered = true;
pthread_cond_signal( &ev->cond ); pthread_cond_signal( &ev->cond );
pthread_mutex_unlock( &ev->mutex ); pthread_mutex_unlock( &ev->mutex );
} }
/*-----------------------------------------------------------*/

22
queue.c
View file

@ -3186,7 +3186,27 @@ BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )
return pxQueue; return pxQueue;
} }
#endif /* configUSE_QUEUE_SETS */ #endif /* #if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
/*-----------------------------------------------------------*/
#if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
QueueSetHandle_t xQueueCreateSetStatic( const UBaseType_t uxEventQueueLength,
uint8_t * pucQueueStorage,
StaticQueue_t * pxStaticQueue )
{
QueueSetHandle_t pxQueue;
traceENTER_xQueueCreateSetStatic( uxEventQueueLength );
pxQueue = xQueueGenericCreateStatic( uxEventQueueLength, ( UBaseType_t ) sizeof( Queue_t * ), pucQueueStorage, pxStaticQueue, queueQUEUE_TYPE_SET );
traceRETURN_xQueueCreateSetStatic( pxQueue );
return pxQueue;
}
#endif /* #if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( configUSE_QUEUE_SETS == 1 ) #if ( configUSE_QUEUE_SETS == 1 )

46
tasks.c
View file

@ -156,6 +156,23 @@
#define configIDLE_TASK_NAME "IDLE" #define configIDLE_TASK_NAME "IDLE"
#endif #endif
#if ( configNUMBER_OF_CORES > 1 )
/* Reserve space for Core ID and null termination. */
#if ( configMAX_TASK_NAME_LEN < 2U )
#error Minimum required task name length is 2. Please increase configMAX_TASK_NAME_LEN.
#endif
#define taskRESERVED_TASK_NAME_LENGTH 2U
#elif ( configNUMBER_OF_CORES > 9 )
#warning Please increase taskRESERVED_TASK_NAME_LENGTH. 1 character is insufficient to store the core ID.
#else
/* Reserve space for null termination. */
#if ( configMAX_TASK_NAME_LEN < 1U )
#error Minimum required task name length is 1. Please increase configMAX_TASK_NAME_LEN.
#endif
#define taskRESERVED_TASK_NAME_LENGTH 1U
#endif /* if ( ( configNUMBER_OF_CORES > 1 ) */
#if ( configUSE_PORT_OPTIMISED_TASK_SELECTION == 0 ) #if ( configUSE_PORT_OPTIMISED_TASK_SELECTION == 0 )
/* If configUSE_PORT_OPTIMISED_TASK_SELECTION is 0 then task selection is /* If configUSE_PORT_OPTIMISED_TASK_SELECTION is 0 then task selection is
@ -3527,21 +3544,26 @@ static BaseType_t prvCreateIdleTasks( void )
BaseType_t xCoreID; BaseType_t xCoreID;
char cIdleName[ configMAX_TASK_NAME_LEN ] = { 0 }; char cIdleName[ configMAX_TASK_NAME_LEN ] = { 0 };
TaskFunction_t pxIdleTaskFunction = NULL; TaskFunction_t pxIdleTaskFunction = NULL;
BaseType_t xIdleTaskNameIndex; UBaseType_t xIdleTaskNameIndex;
BaseType_t xIdleNameLen;
BaseType_t xCopyLen;
configASSERT( ( configIDLE_TASK_NAME != NULL ) && ( configMAX_TASK_NAME_LEN > 3 ) ); /* MISRA Ref 14.3.1 [Configuration dependent invariant] */
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-143. */
/* The length of the idle task name is limited to the minimum of the length /* coverity[misra_c_2012_rule_14_3_violation] */
* of configIDLE_TASK_NAME and configMAX_TASK_NAME_LEN - 2, keeping space for( xIdleTaskNameIndex = 0U; xIdleTaskNameIndex < ( configMAX_TASK_NAME_LEN - taskRESERVED_TASK_NAME_LENGTH ); xIdleTaskNameIndex++ )
* for the core ID suffix and the null-terminator. */
xIdleNameLen = strlen( configIDLE_TASK_NAME );
xCopyLen = xIdleNameLen < ( configMAX_TASK_NAME_LEN - 2 ) ? xIdleNameLen : ( configMAX_TASK_NAME_LEN - 2 );
for( xIdleTaskNameIndex = ( BaseType_t ) 0; xIdleTaskNameIndex < xCopyLen; xIdleTaskNameIndex++ )
{ {
/* MISRA Ref 18.1.1 [Configuration dependent bounds checking] */
/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-181. */
/* coverity[misra_c_2012_rule_18_1_violation] */
cIdleName[ xIdleTaskNameIndex ] = configIDLE_TASK_NAME[ xIdleTaskNameIndex ]; cIdleName[ xIdleTaskNameIndex ] = configIDLE_TASK_NAME[ xIdleTaskNameIndex ];
if( cIdleName[ xIdleTaskNameIndex ] == ( char ) 0x00 )
{
break;
}
else
{
mtCOVERAGE_TEST_MARKER();
}
} }
/* Ensure null termination. */ /* Ensure null termination. */