-
-/* Scheduler includes. */
-#include "FreeRTOS.h"
-#include "task.h"
-
-#ifndef configINTERRUPT_CONTROLLER_BASE_ADDRESS
- #error configINTERRUPT_CONTROLLER_BASE_ADDRESS must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
-#endif
-
-#ifndef configINTERRUPT_CONTROLLER_CPU_INTERFACE_OFFSET
- #error configINTERRUPT_CONTROLLER_CPU_INTERFACE_OFFSET must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
-#endif
-
-#ifndef configUNIQUE_INTERRUPT_PRIORITIES
- #error configUNIQUE_INTERRUPT_PRIORITIES must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
-#endif
-
-#ifndef configSETUP_TICK_INTERRUPT
- #error configSETUP_TICK_INTERRUPT() must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
-#endif /* configSETUP_TICK_INTERRUPT */
-
-#ifndef configMAX_API_CALL_INTERRUPT_PRIORITY
- #error configMAX_API_CALL_INTERRUPT_PRIORITY must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
-#endif
-
-#if configMAX_API_CALL_INTERRUPT_PRIORITY == 0
- #error configMAX_API_CALL_INTERRUPT_PRIORITY must not be set to 0
-#endif
-
-#if configMAX_API_CALL_INTERRUPT_PRIORITY > configUNIQUE_INTERRUPT_PRIORITIES
- #error configMAX_API_CALL_INTERRUPT_PRIORITY must be less than or equal to configUNIQUE_INTERRUPT_PRIORITIES as the lower the numeric priority value the higher the logical interrupt priority
-#endif
-
-#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1
- /* Check the configuration. */
- #if( configMAX_PRIORITIES > 32 )
- #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.
- #endif
-#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */
-
-/* In case security extensions are implemented. */
-#if configMAX_API_CALL_INTERRUPT_PRIORITY <= ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )
- #error configMAX_API_CALL_INTERRUPT_PRIORITY must be greater than ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )
-#endif
-
-/* Some vendor specific files default configCLEAR_TICK_INTERRUPT() in
-portmacro.h. */
-#ifndef configCLEAR_TICK_INTERRUPT
- #define configCLEAR_TICK_INTERRUPT()
-#endif
-
-/* A critical section is exited when the critical section nesting count reaches
-this value. */
-#define portNO_CRITICAL_NESTING ( ( size_t ) 0 )
-
-/* In all GICs 255 can be written to the priority mask register to unmask all
-(but the lowest) interrupt priority. */
-#define portUNMASK_VALUE ( 0xFFUL )
-
-/* Tasks are not created with a floating point context, but can be given a
-floating point context after they have been created. A variable is stored as
-part of the tasks context that holds portNO_FLOATING_POINT_CONTEXT if the task
-does not have an FPU context, or any other value if the task does have an FPU
-context. */
-#define portNO_FLOATING_POINT_CONTEXT ( ( StackType_t ) 0 )
-
-/* Constants required to setup the initial task context. */
-#define portEL3 ( ( StackType_t ) 0x0c )
-#define portSP_ELx ( ( StackType_t ) 0x01 )
-#define portSP_EL0 ( ( StackType_t ) 0x00 )
-
-/* At the time of writing, the BSP only supports EL3. */
-#define portINITIAL_PSTATE ( portEL3 | portSP_EL0 )
-
-/* Used by portASSERT_IF_INTERRUPT_PRIORITY_INVALID() when ensuring the binary
-point is zero. */
-#define portBINARY_POINT_BITS ( ( uint8_t ) 0x03 )
-
-/* Masks all bits in the APSR other than the mode bits. */
-#define portAPSR_MODE_BITS_MASK ( 0x0C )
-
-/* The I bit in the DAIF bits. */
-#define portDAIF_I ( 0x80 )
-
-/* Macro to unmask all interrupt priorities. */
-#define portCLEAR_INTERRUPT_MASK() \
-{ \
- portDISABLE_INTERRUPTS(); \
- portICCPMR_PRIORITY_MASK_REGISTER = portUNMASK_VALUE; \
- __asm volatile ( "DSB SY \n" \
- "ISB SY \n" ); \
- portENABLE_INTERRUPTS(); \
-}
-
-/* Hardware specifics used when sanity checking the configuration. */
-#define portINTERRUPT_PRIORITY_REGISTER_OFFSET 0x400UL
-#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff )
-#define portBIT_0_SET ( ( uint8_t ) 0x01 )
-
-/*-----------------------------------------------------------*/
-
-/*
- * Starts the first task executing. This function is necessarily written in
- * assembly code so is implemented in portASM.s.
- */
-extern void vPortRestoreTaskContext( void );
-
-/*-----------------------------------------------------------*/
-
-/* A variable is used to keep track of the critical section nesting. This
-variable has to be stored as part of the task context and must be initialised to
-a non zero value to ensure interrupts don't inadvertently become unmasked before
-the scheduler starts. As it is stored as part of the task context it will
-automatically be set to 0 when the first task is started. */
-volatile uint64_t ullCriticalNesting = 9999ULL;
-
-/* Saved as part of the task context. If ullPortTaskHasFPUContext is non-zero
-then floating point context must be saved and restored for the task. */
-uint64_t ullPortTaskHasFPUContext = pdFALSE;
-
-/* Set to 1 to pend a context switch from an ISR. */
-uint64_t ullPortYieldRequired = pdFALSE;
-
-/* Counts the interrupt nesting depth. A context switch is only performed if
-if the nesting depth is 0. */
-uint64_t ullPortInterruptNesting = 0;
-
-/* Used in the ASM code. */
-__attribute__(( used )) const uint64_t ullICCEOIR = portICCEOIR_END_OF_INTERRUPT_REGISTER_ADDRESS;
-__attribute__(( used )) const uint64_t ullICCIAR = portICCIAR_INTERRUPT_ACKNOWLEDGE_REGISTER_ADDRESS;
-__attribute__(( used )) const uint64_t ullICCPMR = portICCPMR_PRIORITY_MASK_REGISTER_ADDRESS;
-__attribute__(( used )) const uint64_t ullMaxAPIPriorityMask = ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT );
-
-/*-----------------------------------------------------------*/
-
-/*
- * See header file for description.
- */
-StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
-{
- /* Setup the initial stack of the task. The stack is set exactly as
- expected by the portRESTORE_CONTEXT() macro. */
-
- /* First all the general purpose registers. */
- pxTopOfStack--;
- *pxTopOfStack = 0x0101010101010101ULL; /* R1 */
- pxTopOfStack--;
- *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0303030303030303ULL; /* R3 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0202020202020202ULL; /* R2 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0505050505050505ULL; /* R5 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0404040404040404ULL; /* R4 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0707070707070707ULL; /* R7 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0606060606060606ULL; /* R6 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0909090909090909ULL; /* R9 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0808080808080808ULL; /* R8 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1111111111111111ULL; /* R11 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1010101010101010ULL; /* R10 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1313131313131313ULL; /* R13 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1212121212121212ULL; /* R12 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1515151515151515ULL; /* R15 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1414141414141414ULL; /* R14 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1717171717171717ULL; /* R17 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1616161616161616ULL; /* R16 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1919191919191919ULL; /* R19 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1818181818181818ULL; /* R18 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2121212121212121ULL; /* R21 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2020202020202020ULL; /* R20 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2323232323232323ULL; /* R23 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2222222222222222ULL; /* R22 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2525252525252525ULL; /* R25 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2424242424242424ULL; /* R24 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2727272727272727ULL; /* R27 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2626262626262626ULL; /* R26 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2929292929292929ULL; /* R29 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2828282828282828ULL; /* R28 */
- pxTopOfStack--;
- *pxTopOfStack = ( StackType_t ) 0x00; /* XZR - has no effect, used so there are an even number of registers. */
- pxTopOfStack--;
- *pxTopOfStack = ( StackType_t ) 0x00; /* R30 - procedure call link register. */
- pxTopOfStack--;
-
- *pxTopOfStack = portINITIAL_PSTATE;
- pxTopOfStack--;
-
- *pxTopOfStack = ( StackType_t ) pxCode; /* Exception return address. */
- pxTopOfStack--;
-
- /* The task will start with a critical nesting count of 0 as interrupts are
- enabled. */
- *pxTopOfStack = portNO_CRITICAL_NESTING;
- pxTopOfStack--;
-
- /* The task will start without a floating point context. A task that uses
- the floating point hardware must call vPortTaskUsesFPU() before executing
- any floating point instructions. */
- *pxTopOfStack = portNO_FLOATING_POINT_CONTEXT;
-
- return pxTopOfStack;
-}
-/*-----------------------------------------------------------*/
-
-BaseType_t xPortStartScheduler( void )
-{
-uint32_t ulAPSR;
-
- #if( configASSERT_DEFINED == 1 )
- {
- volatile uint32_t ulOriginalPriority;
- volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( configINTERRUPT_CONTROLLER_BASE_ADDRESS + portINTERRUPT_PRIORITY_REGISTER_OFFSET );
- volatile uint8_t ucMaxPriorityValue;
-
- /* Determine how many priority bits are implemented in the GIC.
-
- Save the interrupt priority value that is about to be clobbered. */
- ulOriginalPriority = *pucFirstUserPriorityRegister;
-
- /* Determine the number of priority bits available. First write to
- all possible bits. */
- *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;
-
- /* Read the value back to see how many bits stuck. */
- ucMaxPriorityValue = *pucFirstUserPriorityRegister;
-
- /* Shift to the least significant bits. */
- while( ( ucMaxPriorityValue & portBIT_0_SET ) != portBIT_0_SET )
- {
- ucMaxPriorityValue >>= ( uint8_t ) 0x01;
- }
-
- /* Sanity check configUNIQUE_INTERRUPT_PRIORITIES matches the read
- value. */
- configASSERT( ucMaxPriorityValue == portLOWEST_INTERRUPT_PRIORITY );
-
- /* Restore the clobbered interrupt priority register to its original
- value. */
- *pucFirstUserPriorityRegister = ulOriginalPriority;
- }
- #endif /* conifgASSERT_DEFINED */
-
-
- /* At the time of writing, the BSP only supports EL3. */
- __asm volatile ( "MRS %0, CurrentEL" : "=r" ( ulAPSR ) );
- ulAPSR &= portAPSR_MODE_BITS_MASK;
- configASSERT( ulAPSR == portEL3 );
-
- if( ulAPSR == portEL3 )
- {
- /* Only continue if the binary point value is set to its lowest possible
- setting. See the comments in vPortValidateInterruptPriority() below for
- more information. */
- configASSERT( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE );
-
- if( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE )
- {
- /* Interrupts are turned off in the CPU itself to ensure a tick does
- not execute while the scheduler is being started. Interrupts are
- automatically turned back on in the CPU when the first task starts
- executing. */
- portDISABLE_INTERRUPTS();
-
- /* Start the timer that generates the tick ISR. */
- configSETUP_TICK_INTERRUPT();
-
- /* Start the first task executing. */
- vPortRestoreTaskContext();
- }
- }
-
- return 0;
-}
-/*-----------------------------------------------------------*/
-
-void vPortEndScheduler( void )
-{
- /* Not implemented in ports where there is nothing to return to.
- Artificially force an assert. */
- configASSERT( ullCriticalNesting == 1000ULL );
-}
-/*-----------------------------------------------------------*/
-
-void vPortEnterCritical( void )
-{
- /* Mask interrupts up to the max syscall interrupt priority. */
- uxPortSetInterruptMask();
-
- /* Now interrupts are disabled ullCriticalNesting can be accessed
- directly. Increment ullCriticalNesting to keep a count of how many times
- portENTER_CRITICAL() has been called. */
- ullCriticalNesting++;
-
- /* This is not the interrupt safe version of the enter critical function so
- assert() if it is being called from an interrupt context. Only API
- functions that end in "FromISR" can be used in an interrupt. Only assert if
- the critical nesting count is 1 to protect against recursive calls if the
- assert function also uses a critical section. */
- if( ullCriticalNesting == 1ULL )
- {
- configASSERT( ullPortInterruptNesting == 0 );
- }
-}
-/*-----------------------------------------------------------*/
-
-void vPortExitCritical( void )
-{
- if( ullCriticalNesting > portNO_CRITICAL_NESTING )
- {
- /* Decrement the nesting count as the critical section is being
- exited. */
- ullCriticalNesting--;
-
- /* If the nesting level has reached zero then all interrupt
- priorities must be re-enabled. */
- if( ullCriticalNesting == portNO_CRITICAL_NESTING )
- {
- /* Critical nesting has reached zero so all interrupt priorities
- should be unmasked. */
- portCLEAR_INTERRUPT_MASK();
- }
- }
-}
-/*-----------------------------------------------------------*/
-
-void FreeRTOS_Tick_Handler( void )
-{
- /* Must be the lowest possible priority. */
- configASSERT( portICCRPR_RUNNING_PRIORITY_REGISTER == ( uint32_t ) ( portLOWEST_USABLE_INTERRUPT_PRIORITY << portPRIORITY_SHIFT ) );
-
- /* Interrupts should not be enabled before this point. */
- #if( configASSERT_DEFINED == 1 )
- {
- uint32_t ulMaskBits;
-
- __asm volatile( "mrs %0, daif" : "=r"( ulMaskBits ) );
- configASSERT( ( ulMaskBits & portDAIF_I ) != 0 );
- }
- #endif /* configASSERT_DEFINED */
-
- /* Set interrupt mask before altering scheduler structures. The tick
- handler runs at the lowest priority, so interrupts cannot already be masked,
- so there is no need to save and restore the current mask value. It is
- necessary to turn off interrupts in the CPU itself while the ICCPMR is being
- updated. */
- portICCPMR_PRIORITY_MASK_REGISTER = ( uint32_t ) ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT );
- __asm volatile ( "dsb sy \n"
- "isb sy \n" );
-
- /* Ok to enable interrupts after the interrupt source has been cleared. */
- configCLEAR_TICK_INTERRUPT();
- portENABLE_INTERRUPTS();
-
- /* Increment the RTOS tick. */
- if( xTaskIncrementTick() != pdFALSE )
- {
- ullPortYieldRequired = pdTRUE;
- }
-
- /* Ensure all interrupt priorities are active again. */
- portCLEAR_INTERRUPT_MASK();
-}
-/*-----------------------------------------------------------*/
-
-void vPortTaskUsesFPU( void )
-{
- /* A task is registering the fact that it needs an FPU context. Set the
- FPU flag (which is saved as part of the task context). */
- ullPortTaskHasFPUContext = pdTRUE;
-
- /* Consider initialising the FPSR here - but probably not necessary in
- AArch64. */
-}
-/*-----------------------------------------------------------*/
-
-void vPortClearInterruptMask( UBaseType_t uxNewMaskValue )
-{
- if( uxNewMaskValue == pdFALSE )
- {
- portCLEAR_INTERRUPT_MASK();
- }
-}
-/*-----------------------------------------------------------*/
-
-UBaseType_t uxPortSetInterruptMask( void )
-{
-uint32_t ulReturn;
-
- /* Interrupt in the CPU must be turned off while the ICCPMR is being
- updated. */
- portDISABLE_INTERRUPTS();
- if( portICCPMR_PRIORITY_MASK_REGISTER == ( uint32_t ) ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT ) )
- {
- /* Interrupts were already masked. */
- ulReturn = pdTRUE;
- }
- else
- {
- ulReturn = pdFALSE;
- portICCPMR_PRIORITY_MASK_REGISTER = ( uint32_t ) ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT );
- __asm volatile ( "dsb sy \n"
- "isb sy \n" );
- }
- portENABLE_INTERRUPTS();
-
- return ulReturn;
-}
-/*-----------------------------------------------------------*/
-
-#if( configASSERT_DEFINED == 1 )
-
- void vPortValidateInterruptPriority( void )
- {
- /* The following assertion will fail if a service routine (ISR) for
- an interrupt that has been assigned a priority above
- configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API
- function. ISR safe FreeRTOS API functions must *only* be called
- from interrupts that have been assigned a priority at or below
- configMAX_SYSCALL_INTERRUPT_PRIORITY.
-
- Numerically low interrupt priority numbers represent logically high
- interrupt priorities, therefore the priority of the interrupt must
- be set to a value equal to or numerically *higher* than
- configMAX_SYSCALL_INTERRUPT_PRIORITY.
-
- FreeRTOS maintains separate thread and ISR API functions to ensure
- interrupt entry is as fast and simple as possible. */
- configASSERT( portICCRPR_RUNNING_PRIORITY_REGISTER >= ( uint32_t ) ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT ) );
-
- /* Priority grouping: The interrupt controller (GIC) allows the bits
- that define each interrupt's priority to be split between bits that
- define the interrupt's pre-emption priority bits and bits that define
- the interrupt's sub-priority. For simplicity all bits must be defined
- to be pre-emption priority bits. The following assertion will fail if
- this is not the case (if some bits represent a sub-priority).
-
- The priority grouping is configured by the GIC's binary point register
- (ICCBPR). Writting 0 to ICCBPR will ensure it is set to its lowest
- possible value (which may be above 0). */
- configASSERT( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE );
- }
-
-#endif /* configASSERT_DEFINED */
-/*-----------------------------------------------------------*/
diff --git a/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/portASM.S b/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/portASM.S
deleted file mode 100644
index 8a03afef..00000000
--- a/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/portASM.S
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- FreeRTOS V8.2.3 - Copyright (C) 2015 Real Time Engineers Ltd.
- All rights reserved
-
- VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
-
- This file is part of the FreeRTOS distribution.
-
- FreeRTOS is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License (version 2) as published by the
- Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.
-
- ***************************************************************************
- >>! NOTE: The modification to the GPL is included to allow you to !<<
- >>! distribute a combined work that includes FreeRTOS without being !<<
- >>! obliged to provide the source code for proprietary components !<<
- >>! outside of the FreeRTOS kernel. !<<
- ***************************************************************************
-
- FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. Full license text is available on the following
- link: http://www.freertos.org/a00114.html
-
- ***************************************************************************
- * *
- * FreeRTOS provides completely free yet professionally developed, *
- * robust, strictly quality controlled, supported, and cross *
- * platform software that is more than just the market leader, it *
- * is the industry's de facto standard. *
- * *
- * Help yourself get started quickly while simultaneously helping *
- * to support the FreeRTOS project by purchasing a FreeRTOS *
- * tutorial book, reference manual, or both: *
- * http://www.FreeRTOS.org/Documentation *
- * *
- ***************************************************************************
-
- http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
- the FAQ page "My application does not run, what could be wrong?". Have you
- defined configASSERT()?
-
- http://www.FreeRTOS.org/support - In return for receiving this top quality
- embedded software for free we request you assist our global community by
- participating in the support forum.
-
- http://www.FreeRTOS.org/training - Investing in training allows your team to
- be as productive as possible as early as possible. Now you can receive
- FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
- Ltd, and the world's leading authority on the world's leading RTOS.
-
- http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
- including FreeRTOS+Trace - an indispensable productivity tool, a DOS
- compatible FAT file system, and our tiny thread aware UDP/IP stack.
-
- http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
- Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
-
- http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
- Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
- licenses offer ticketed support, indemnification and commercial middleware.
-
- http://www.SafeRTOS.com - High Integrity Systems also provide a safety
- engineered and independently SIL3 certified version for use in safety and
- mission critical applications that require provable dependability.
-
- 1 tab == 4 spaces!
-*/
-
- .text
-
- /* Variables and functions. */
- .extern ullMaxAPIPriorityMask
- .extern pxCurrentTCB
- .extern vTaskSwitchContext
- .extern FreeRTOS_ApplicationIRQHandler
- .extern ullPortInterruptNesting
- .extern ullPortTaskHasFPUContext
- .extern ullCriticalNesting
- .extern ullPortYieldRequired
- .extern ullICCEOIR
- .extern ullICCIAR
- .extern _freertos_vector_table
-
- .global FreeRTOS_IRQ_Handler
- .global FreeRTOS_SWI_Handler
- .global vPortRestoreTaskContext
-
-
-.macro portSAVE_CONTEXT
-
- /* Switch to use the EL0 stack pointer. */
- MSR SPSEL, #0
-
- /* Save the entire context. */
- STP X0, X1, [SP, #-0x10]!
- STP X2, X3, [SP, #-0x10]!
- STP X4, X5, [SP, #-0x10]!
- STP X6, X7, [SP, #-0x10]!
- STP X8, X9, [SP, #-0x10]!
- STP X10, X11, [SP, #-0x10]!
- STP X12, X13, [SP, #-0x10]!
- STP X14, X15, [SP, #-0x10]!
- STP X16, X17, [SP, #-0x10]!
- STP X18, X19, [SP, #-0x10]!
- STP X20, X21, [SP, #-0x10]!
- STP X22, X23, [SP, #-0x10]!
- STP X24, X25, [SP, #-0x10]!
- STP X26, X27, [SP, #-0x10]!
- STP X28, X29, [SP, #-0x10]!
- STP X30, XZR, [SP, #-0x10]!
-
- /* Save the SPSR. */
- MRS X3, SPSR_EL3
-
- /* Save the ELR. */
- MRS X2, ELR_EL3
-
- STP X2, X3, [SP, #-0x10]!
-
- /* Save the critical section nesting depth. */
- LDR X0, ullCriticalNestingConst
- LDR X3, [X0]
-
- /* Save the FPU context indicator. */
- LDR X0, ullPortTaskHasFPUContextConst
- LDR X2, [X0]
-
- /* Save the FPU context, if any (32 128-bit registers). */
- CMP X2, #0
- B.EQ 1f
- 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]!
-
-1:
- /* Store the critical nesting count and FPU context indicator. */
- STP X2, X3, [SP, #-0x10]!
-
- LDR X0, pxCurrentTCBConst
- LDR X1, [X0]
- MOV X0, SP /* Move SP into X0 for saving. */
- STR X0, [X1]
-
- /* Switch to use the ELx stack pointer. */
- MSR SPSEL, #1
-
- .endm
-
-; /**********************************************************************/
-
-.macro portRESTORE_CONTEXT
-
- /* Switch to use the EL0 stack pointer. */
- MSR SPSEL, #0
-
- /* Set the SP to point to the stack of the task being restored. */
- LDR X0, pxCurrentTCBConst
- LDR X1, [X0]
- LDR X0, [X1]
- MOV SP, X0
-
- LDP X2, X3, [SP], #0x10 /* Critical nesting and FPU context. */
-
- /* Set the PMR register to be correct for the current critical nesting
- depth. */
- LDR X0, ullCriticalNestingConst /* X0 holds the address of ullCriticalNesting. */
- MOV X1, #255 /* X1 holds the unmask value. */
- LDR X4, ullICCPMRConst /* X4 holds the address of the ICCPMR constant. */
- CMP X3, #0
- LDR X5, [X4] /* X5 holds the address of the ICCPMR register. */
- B.EQ 1f
- LDR X6, ullMaxAPIPriorityMaskConst
- LDR X1, [X6] /* X1 holds the mask value. */
-1:
- STR W1, [X5] /* Write the mask value to ICCPMR. */
- DSB SY /* _RB_Barriers probably not required here. */
- ISB SY
- STR X3, [X0] /* Restore the task's critical nesting count. */
-
- /* Restore the FPU context indicator. */
- LDR X0, ullPortTaskHasFPUContextConst
- STR X2, [X0]
-
- /* Restore the FPU context, if any. */
- CMP X2, #0
- B.EQ 1f
- 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
-1:
- LDP X2, X3, [SP], #0x10 /* SPSR and ELR. */
-
- /* Restore the SPSR. */
- MSR SPSR_EL3, X3 /*_RB_ Assumes started in EL3. */
-
- /* Restore the ELR. */
- MSR ELR_EL3, X2
-
- LDP X30, XZR, [SP], #0x10
- LDP X28, X29, [SP], #0x10
- LDP X26, X27, [SP], #0x10
- LDP X24, X25, [SP], #0x10
- LDP X22, X23, [SP], #0x10
- LDP X20, X21, [SP], #0x10
- LDP X18, X19, [SP], #0x10
- LDP X16, X17, [SP], #0x10
- LDP X14, X15, [SP], #0x10
- LDP X12, X13, [SP], #0x10
- LDP X10, X11, [SP], #0x10
- LDP X8, X9, [SP], #0x10
- LDP X6, X7, [SP], #0x10
- LDP X4, X5, [SP], #0x10
- LDP X2, X3, [SP], #0x10
- LDP X0, X1, [SP], #0x10
-
- /* Switch to use the ELx stack pointer. _RB_ Might not be required. */
- MSR SPSEL, #1
-
- ERET
-
- .endm
-
-
-/******************************************************************************
- * FreeRTOS_SWI_Handler handler is used to perform a context switch.
- *****************************************************************************/
-.align 8
-.type FreeRTOS_SWI_Handler, %function
-FreeRTOS_SWI_Handler:
- /* Save the context of the current task and select a new task to run. */
- portSAVE_CONTEXT
-
- MRS X0, ESR_EL3
- LSR X1, X0, #26
- CMP X1, #0x17 /* 0x17 = SMC instruction. */
- B.NE FreeRTOS_Abort
- BL vTaskSwitchContext
-
- portRESTORE_CONTEXT
-
-FreeRTOS_Abort:
- /* Full ESR is in X0, exception class code is in X1. */
- B .
-
-/******************************************************************************
- * vPortRestoreTaskContext is used to start the scheduler.
- *****************************************************************************/
-.align 8
-.type vPortRestoreTaskContext, %function
-vPortRestoreTaskContext:
-.set freertos_vector_base, _freertos_vector_table
-
- /* Install the FreeRTOS interrupt handlers. */
- LDR X1, =freertos_vector_base
- MSR VBAR_EL3, X1
- DSB SY
- ISB SY
-
- /* Start the first task. */
- portRESTORE_CONTEXT
-
-
-/******************************************************************************
- * FreeRTOS_IRQ_Handler handles IRQ entry and exit.
- *****************************************************************************/
-.align 8
-.type FreeRTOS_IRQ_Handler, %function
-FreeRTOS_IRQ_Handler:
- /* Save volatile registers. */
- STP X0, X1, [SP, #-0x10]!
- STP X2, X3, [SP, #-0x10]!
- STP X4, X5, [SP, #-0x10]!
- STP X6, X7, [SP, #-0x10]!
- STP X8, X9, [SP, #-0x10]!
- STP X10, X11, [SP, #-0x10]!
- STP X12, X13, [SP, #-0x10]!
- STP X14, X15, [SP, #-0x10]!
- STP X16, X17, [SP, #-0x10]!
- STP X18, X19, [SP, #-0x10]!
- STP X29, X30, [SP, #-0x10]!
-
- /* Save the SPSR and ELR. */
- MRS X3, SPSR_EL3
- MRS X2, ELR_EL3
- STP X2, X3, [SP, #-0x10]!
-
- /* Increment the interrupt nesting counter. */
- LDR X5, ullPortInterruptNestingConst
- LDR X1, [X5] /* Old nesting count in X1. */
- ADD X6, X1, #1
- STR X6, [X5] /* Address of nesting count variable in X5. */
-
- /* Maintain the interrupt nesting information across the function call. */
- STP X1, X5, [SP, #-0x10]!
-
- /* Read value from the interrupt acknowledge register, which is stored in W0
- for future parameter and interrupt clearing use. */
- LDR X2, ullICCIARConst
- LDR X3, [X2]
- LDR W0, [X3] /* ICCIAR in W0 as parameter. */
-
- /* Maintain the ICCIAR value across the function call. */
- STP X0, X1, [SP, #-0x10]!
-
- /* Call the C handler. */
- BL FreeRTOS_ApplicationIRQHandler
-
- /* Disable interrupts. */
- MSR DAIFSET, #2
- DSB SY
- ISB SY
-
- /* Restore the ICCIAR value. */
- LDP X0, X1, [SP], #0x10
-
- /* End IRQ processing by writing ICCIAR to the EOI register. */
- LDR X4, ullICCEOIRConst
- LDR X4, [X4]
- STR W0, [X4]
-
- /* Restore the critical nesting count. */
- LDP X1, X5, [SP], #0x10
- STR X1, [X5]
-
- /* Has interrupt nesting unwound? */
- CMP X1, #0
- B.NE Exit_IRQ_No_Context_Switch
-
- /* Is a context switch required? */
- LDR X0, ullPortYieldRequiredConst
- LDR X1, [X0]
- CMP X1, #0
- B.EQ Exit_IRQ_No_Context_Switch
-
- /* Reset ullPortYieldRequired to 0. */
- MOV X2, #0
- STR X2, [X0]
-
- /* Restore volatile registers. */
- LDP X4, X5, [SP], #0x10 /* SPSR and ELR. */
- MSR SPSR_EL3, X5 /*_RB_ Assumes started in EL3. */
- MSR ELR_EL3, X4
- DSB SY
- ISB SY
-
- LDP X29, X30, [SP], #0x10
- LDP X18, X19, [SP], #0x10
- LDP X16, X17, [SP], #0x10
- LDP X14, X15, [SP], #0x10
- LDP X12, X13, [SP], #0x10
- LDP X10, X11, [SP], #0x10
- LDP X8, X9, [SP], #0x10
- LDP X6, X7, [SP], #0x10
- LDP X4, X5, [SP], #0x10
- LDP X2, X3, [SP], #0x10
- LDP X0, X1, [SP], #0x10
-
- /* Save the context of the current task and select a new task to run. */
- portSAVE_CONTEXT
- BL vTaskSwitchContext
- portRESTORE_CONTEXT
-
-Exit_IRQ_No_Context_Switch:
- /* Restore volatile registers. */
- LDP X4, X5, [SP], #0x10 /* SPSR and ELR. */
- MSR SPSR_EL3, X5 /*_RB_ Assumes started in EL3. */
- MSR ELR_EL3, X4
- DSB SY
- ISB SY
-
- LDP X29, X30, [SP], #0x10
- LDP X18, X19, [SP], #0x10
- LDP X16, X17, [SP], #0x10
- LDP X14, X15, [SP], #0x10
- LDP X12, X13, [SP], #0x10
- LDP X10, X11, [SP], #0x10
- LDP X8, X9, [SP], #0x10
- LDP X6, X7, [SP], #0x10
- LDP X4, X5, [SP], #0x10
- LDP X2, X3, [SP], #0x10
- LDP X0, X1, [SP], #0x10
-
- ERET
-
-
-
-
-.align 8
-pxCurrentTCBConst: .dword pxCurrentTCB
-ullCriticalNestingConst: .dword ullCriticalNesting
-ullPortTaskHasFPUContextConst: .dword ullPortTaskHasFPUContext
-
-ullICCPMRConst: .dword ullICCPMR
-ullMaxAPIPriorityMaskConst: .dword ullMaxAPIPriorityMask
-vApplicationIRQHandlerConst: .word FreeRTOS_ApplicationIRQHandler
-ullPortInterruptNestingConst: .dword ullPortInterruptNesting
-ullPortYieldRequiredConst: .dword ullPortYieldRequired
-ullICCIARConst: .dword ullICCIAR
-ullICCEOIRConst: .dword ullICCEOIR
-
-
-
-.end
diff --git a/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/portZynqUltrascale.c b/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/portZynqUltrascale.c
deleted file mode 100644
index c967de85..00000000
--- a/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/portZynqUltrascale.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- FreeRTOS V8.2.3 - Copyright (C) 2015 Real Time Engineers Ltd.
- All rights reserved
-
- VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
-
- This file is part of the FreeRTOS distribution.
-
- FreeRTOS is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License (version 2) as published by the
- Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.
-
- ***************************************************************************
- >>! NOTE: The modification to the GPL is included to allow you to !<<
- >>! distribute a combined work that includes FreeRTOS without being !<<
- >>! obliged to provide the source code for proprietary components !<<
- >>! outside of the FreeRTOS kernel. !<<
- ***************************************************************************
-
- FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. Full license text is available on the following
- link: http://www.freertos.org/a00114.html
-
- ***************************************************************************
- * *
- * FreeRTOS provides completely free yet professionally developed, *
- * robust, strictly quality controlled, supported, and cross *
- * platform software that is more than just the market leader, it *
- * is the industry's de facto standard. *
- * *
- * Help yourself get started quickly while simultaneously helping *
- * to support the FreeRTOS project by purchasing a FreeRTOS *
- * tutorial book, reference manual, or both: *
- * http://www.FreeRTOS.org/Documentation *
- * *
- ***************************************************************************
-
- http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
- the FAQ page "My application does not run, what could be wrong?". Have you
- defined configASSERT()?
-
- http://www.FreeRTOS.org/support - In return for receiving this top quality
- embedded software for free we request you assist our global community by
- participating in the support forum.
-
- http://www.FreeRTOS.org/training - Investing in training allows your team to
- be as productive as possible as early as possible. Now you can receive
- FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
- Ltd, and the world's leading authority on the world's leading RTOS.
-
- http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
- including FreeRTOS+Trace - an indispensable productivity tool, a DOS
- compatible FAT file system, and our tiny thread aware UDP/IP stack.
-
- http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
- Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
-
- http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
- Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
- licenses offer ticketed support, indemnification and commercial middleware.
-
- http://www.SafeRTOS.com - High Integrity Systems also provide a safety
- engineered and independently SIL3 certified version for use in safety and
- mission critical applications that require provable dependability.
-
- 1 tab == 4 spaces!
-*/
-
-/* FreeRTOS includes. */
-#include "FreeRTOS.h"
-#include "task.h"
-
-/* Xilinx includes. */
-#include "xttcps.h"
-#include "xscugic.h"
-
-/* Timer used to generate the tick interrupt. */
-static XTtcPs xTimerInstance;
-XScuGic xInterruptController;
-/*-----------------------------------------------------------*/
-
-void FreeRTOS_SetupTickInterrupt( void )
-{
-BaseType_t xStatus;
-XTtcPs_Config *pxTimerConfiguration;
-uint16_t usInterval;
-uint8_t ucPrescale;
-const uint8_t ucLevelSensitive = 1;
-XScuGic_Config *pxInterruptControllerConfig;
-
- /* Initialize the interrupt controller driver. */
- pxInterruptControllerConfig = XScuGic_LookupConfig( configINTERRUPT_CONTROLLER_DEVICE_ID );
- XScuGic_CfgInitialize( &xInterruptController,
- pxInterruptControllerConfig,
- pxInterruptControllerConfig->CpuBaseAddress );
-
- /* Connect the interrupt controller interrupt handler to the hardware
- interrupt handling logic in the ARM processor. */
- Xil_ExceptionRegisterHandler( XIL_EXCEPTION_ID_IRQ_INT,
- ( Xil_ExceptionHandler ) XScuGic_InterruptHandler,
- &xInterruptController);
-
- /* Enable interrupts in the ARM. */
- Xil_ExceptionEnable();
-
- pxTimerConfiguration = XTtcPs_LookupConfig( configTIMER_ID );
-
- /* Initialise the device. */
- xStatus = XTtcPs_CfgInitialize( &xTimerInstance, pxTimerConfiguration, pxTimerConfiguration->BaseAddress );
-
- if( xStatus != XST_SUCCESS )
- {
- /* Not sure how to do this before XTtcPs_CfgInitialize is called as
- *xRTOSTickTimerInstance is set within XTtcPs_CfgInitialize(). */
- XTtcPs_Stop( &xTimerInstance );
- xStatus = XTtcPs_CfgInitialize( &xTimerInstance, pxTimerConfiguration, pxTimerConfiguration->BaseAddress );
- configASSERT( xStatus == XST_SUCCESS );
- }
-
- /* Set the options. */
- XTtcPs_SetOptions( &xTimerInstance, ( XTTCPS_OPTION_INTERVAL_MODE | XTTCPS_OPTION_WAVE_DISABLE ) );
-
- /* Derive values from the tick rate. */
- XTtcPs_CalcIntervalFromFreq( &xTimerInstance, configTICK_RATE_HZ, &( usInterval ), &( ucPrescale ) );
-
- /* Set the interval and prescale. */
- XTtcPs_SetInterval( &xTimerInstance, usInterval );
- XTtcPs_SetPrescaler( &xTimerInstance, ucPrescale );
-
- /* The priority must be the lowest possible. */
- XScuGic_SetPriorityTriggerType( &xInterruptController, configTIMER_INTERRUPT_ID, portLOWEST_USABLE_INTERRUPT_PRIORITY << portPRIORITY_SHIFT, ucLevelSensitive );
-
- /* Connect to the interrupt controller. */
- XScuGic_Connect( &xInterruptController,
- configTIMER_INTERRUPT_ID,
- ( Xil_InterruptHandler ) FreeRTOS_Tick_Handler,
- ( void * ) &xTimerInstance );
-
- /* Enable the interrupt in the GIC. */
- XScuGic_Enable( &xInterruptController, configTIMER_INTERRUPT_ID );
-
- /* Enable the interrupts in the timer. */
- XTtcPs_EnableInterrupts( &xTimerInstance, XTTCPS_IXR_INTERVAL_MASK );
-
- /* Start the timer. */
- XTtcPs_Start( &xTimerInstance );
-}
-/*-----------------------------------------------------------*/
-
-void FreeRTOS_ClearTickInterrupt( void )
-{
-volatile uint32_t ulInterruptStatus;
-
- /* Read the interrupt status, then write it back to clear the interrupt. */
- ulInterruptStatus = XTtcPs_GetInterruptStatus( &xTimerInstance );
- XTtcPs_ClearInterruptStatus( &xTimerInstance, ulInterruptStatus );
- __asm volatile( "DSB SY" );
- __asm volatile( "ISB SY" );
-}
-/*-----------------------------------------------------------*/
-
-void FreeRTOS_ApplicationIRQHandler( uint32_t ulICCIAR )
-{
-extern const XScuGic_Config XScuGic_ConfigTable[];
-static const XScuGic_VectorTableEntry *pxVectorTable = XScuGic_ConfigTable[ XPAR_SCUGIC_SINGLE_DEVICE_ID ].HandlerTable;
-uint32_t ulInterruptID;
-const XScuGic_VectorTableEntry *pxVectorEntry;
-
- /* Interrupts cannot be re-enabled until the source of the interrupt is
- cleared. The ID of the interrupt is obtained by bitwise ANDing the ICCIAR
- value with 0x3FF. */
- ulInterruptID = ulICCIAR & 0x3FFUL;
- if( ulInterruptID < XSCUGIC_MAX_NUM_INTR_INPUTS )
- {
- /* Call the function installed in the array of installed handler
- functions. */
- pxVectorEntry = &( pxVectorTable[ ulInterruptID ] );
- configASSERT( pxVectorEntry );
- pxVectorEntry->Handler( pxVectorEntry->CallBackRef );
- }
-}
-/*-----------------------------------------------------------*/
-
-/* This version of vApplicationAssert() is declared as a weak symbol to allow it
-to be overridden by a version implemented within the application that is using
-this BSP. */
-void vApplicationAssert( const char *pcFileName, uint32_t ulLine )
-{
-volatile uint32_t ul = 0;
-volatile const char *pcLocalFileName = pcFileName; /* To prevent pcFileName being optimized away. */
-volatile uint32_t ulLocalLine = ulLine; /* To prevent ulLine being optimized away. */
-
- /* Prevent compile warnings about the following two variables being set but
- not referenced. They are intended for viewing in the debugger. */
- ( void ) pcLocalFileName;
- ( void ) ulLocalLine;
-
- xil_printf( "Assert failed in file %s, line %lu\r\n", pcLocalFileName, ulLocalLine );
-
- /* If this function is entered then a call to configASSERT() failed in the
- FreeRTOS code because of a fatal error. The pcFileName and ulLine
- parameters hold the file name and line number in that file of the assert
- that failed. Additionally, if using the debugger, the function call stack
- can be viewed to find which line failed its configASSERT() test. Finally,
- the debugger can be used to set ul to a non-zero value, then step out of
- this function to find where the assert function was entered. */
- taskENTER_CRITICAL();
- {
- while( ul == 0 )
- {
- __asm volatile( "NOP" );
- }
- }
- taskEXIT_CRITICAL();
-}
-/*-----------------------------------------------------------*/
-
-/* This default tick hook does nothing and is declared as a weak symbol to allow
-the application writer to override this default by providing their own
-implementation in the application code. */
-void vApplicationTickHook( void )
-{
-}
-/*-----------------------------------------------------------*/
-
-/* This default idle hook does nothing and is declared as a weak symbol to allow
-the application writer to override this default by providing their own
-implementation in the application code. */
-void vApplicationIdleHook( void )
-{
-}
-/*-----------------------------------------------------------*/
-
-/* This default malloc failed hook does nothing and is declared as a weak symbol
-to allow the application writer to override this default by providing their own
-implementation in the application code. */
-void vApplicationMallocFailedHook( void )
-{
- xil_printf( "vApplicationMallocFailedHook() called\n" );
-}
-/*-----------------------------------------------------------*/
-
-/* This default stack overflow hook will stop the application for executing. It
-is declared as a weak symbol to allow the application writer to override this
-default by providing their own implementation in the application code. */
-void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName )
-{
-/* Attempt to prevent the handle and name of the task that overflowed its stack
-from being optimised away because they are not used. */
-volatile TaskHandle_t xOverflowingTaskHandle = xTask;
-volatile char *pcOverflowingTaskName = pcTaskName;
-
- ( void ) xOverflowingTaskHandle;
- ( void ) pcOverflowingTaskName;
-
- xil_printf( "HALT: Task %s overflowed its stack.", pcOverflowingTaskName );
- portDISABLE_INTERRUPTS();
- for( ;; );
-}
\ No newline at end of file
diff --git a/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/port_asm_vectors.S b/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/port_asm_vectors.S
deleted file mode 100644
index da706551..00000000
--- a/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/port_asm_vectors.S
+++ /dev/null
@@ -1,307 +0,0 @@
-/******************************************************************************
-*
-* Copyright (C) 2014 Xilinx, Inc. All rights reserved.
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy
-* of this software and associated documentation files (the "Software"), to deal
-* in the Software without restriction, including without limitation the rights
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the Software is
-* furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* Use of the Software is limited solely to applications:
-* (a) running on a Xilinx device, or
-* (b) that interact with a Xilinx device through a bus or interconnect.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-* SOFTWARE.
-*
-* Except as contained in this notice, the name of the Xilinx shall not be used
-* in advertising or otherwise to promote the sale, use or other dealings in
-* this Software without prior written authorization from Xilinx.
-*
-******************************************************************************/
-/*****************************************************************************/
-/**
-* @file asm_vectors.s
-*
-* This file contains the initial vector table for the Cortex A53 processor
-* Currently NEON registers are not saved on stack if interrupt is taken.
-* It will be implemented.
-*
-*
-* MODIFICATION HISTORY:
-*
-* Ver Who Date Changes
-* ----- ------- -------- ---------------------------------------------------
-* 5.00 pkp 5/21/14 Initial version
-*
-*
-* @note
-*
-* None.
-*
-******************************************************************************/
-
-
-
-.org 0
-.text
-
-.globl _boot
-.globl _vector_table
-.globl _freertos_vector_table
-
-.globl FIQInterrupt
-.globl IRQInterrupt
-.globl SErrorInterrupt
-.globl SynchronousInterrupt
-
-
-.org 0
-
-.section .vectors, "a"
-
-_vector_table:
-
-.set VBAR, _vector_table
-
-.org VBAR
- b _boot
-
-.org (VBAR + 0x80)
- b .
-
-.org (VBAR + 0x100)
- b .
-
-.org (VBAR + 0x180)
- b .
-
-
-.org (VBAR + 0x200)
- b .
-
-.org (VBAR + 0x280)
- b .
-
-.org (VBAR + 0x300)
- b .
-
-.org (VBAR + 0x380)
- b .
-
-
-
-.org (VBAR + 0x400)
- b .
-
-.org (VBAR + 0x480)
- b .
-
-.org (VBAR + 0x500)
- b .
-
-.org (VBAR + 0x580)
- b .
-
-.org (VBAR + 0x600)
- b .
-
-.org (VBAR + 0x680)
- b .
-
-.org (VBAR + 0x700)
- b .
-
-.org (VBAR + 0x780)
- b .
-
-
-
-/******************************************************************************
- * Vector table to use when FreeRTOS is running.
- *****************************************************************************/
-.set FREERTOS_VBAR, (VBAR+0x1000)
-
-.org(FREERTOS_VBAR)
-_freertos_vector_table:
- b FreeRTOS_SWI_Handler
-
-.org (FREERTOS_VBAR + 0x80)
- b FreeRTOS_IRQ_Handler
-
-.org (FREERTOS_VBAR + 0x100)
- b .
-
-.org (FREERTOS_VBAR + 0x180)
- b .
-
-.org (FREERTOS_VBAR + 0x200)
- b FreeRTOS_SWI_Handler
-
-.org (FREERTOS_VBAR + 0x280)
- b FreeRTOS_IRQ_Handler
-
-.org (FREERTOS_VBAR + 0x300)
- b .
-
-.org (FREERTOS_VBAR + 0x380)
- b .
-
-.org (FREERTOS_VBAR + 0x400)
- b .
-
-.org (FREERTOS_VBAR + 0x480)
- b .
-
-.org (FREERTOS_VBAR + 0x500)
- b .
-
-.org (FREERTOS_VBAR + 0x580)
- b .
-
-.org (FREERTOS_VBAR + 0x600)
- b .
-
-.org (FREERTOS_VBAR + 0x680)
- b .
-
-.org (FREERTOS_VBAR + 0x700)
- b .
-
-.org (FREERTOS_VBAR + 0x780)
- b .
-
-.org (FREERTOS_VBAR + 0x800)
-
-
-
-
-SynchronousInterruptHandler:
- stp X0,X1, [sp,#-0x10]!
- stp X2,X3, [sp,#-0x10]!
- stp X4,X5, [sp,#-0x10]!
- stp X6,X7, [sp,#-0x10]!
- stp X8,X9, [sp,#-0x10]!
- stp X10,X11, [sp,#-0x10]!
- stp X12,X13, [sp,#-0x10]!
- stp X14,X15, [sp,#-0x10]!
- stp X16,X17, [sp,#-0x10]!
- stp X18,X19, [sp,#-0x10]!
- stp X29,X30, [sp,#-0x10]!
-
- bl SynchronousInterrupt
-
- ldp X29,X30, [sp], #0x10
- ldp X18,X19, [sp], #0x10
- ldp X16,X17, [sp], #0x10
- ldp X14,X15, [sp], #0x10
- ldp X12,X13, [sp], #0x10
- ldp X10,X11, [sp], #0x10
- ldp X8,X9, [sp], #0x10
- ldp X6,X7, [sp], #0x10
- ldp X4,X5, [sp], #0x10
- ldp X2,X3, [sp], #0x10
- ldp X0,X1, [sp], #0x10
-
- eret
-
-IRQInterruptHandler:
- stp X0,X1, [sp,#-0x10]!
- stp X2,X3, [sp,#-0x10]!
- stp X4,X5, [sp,#-0x10]!
- stp X6,X7, [sp,#-0x10]!
- stp X8,X9, [sp,#-0x10]!
- stp X10,X11, [sp,#-0x10]!
- stp X12,X13, [sp,#-0x10]!
- stp X14,X15, [sp,#-0x10]!
- stp X16,X17, [sp,#-0x10]!
- stp X18,X19, [sp,#-0x10]!
- stp X29,X30, [sp,#-0x10]!
-
- bl IRQInterrupt
-
- ldp X29,X30, [sp], #0x10
- ldp X18,X19, [sp], #0x10
- ldp X16,X17, [sp], #0x10
- ldp X14,X15, [sp], #0x10
- ldp X12,X13, [sp], #0x10
- ldp X10,X11, [sp], #0x10
- ldp X8,X9, [sp], #0x10
- ldp X6,X7, [sp], #0x10
- ldp X4,X5, [sp], #0x10
- ldp X2,X3, [sp], #0x10
- ldp X0,X1, [sp], #0x10
-
- eret
-
-FIQInterruptHandler:
-
- stp X0,X1, [sp,#-0x10]!
- stp X2,X3, [sp,#-0x10]!
- stp X4,X5, [sp,#-0x10]!
- stp X6,X7, [sp,#-0x10]!
- stp X8,X9, [sp,#-0x10]!
- stp X10,X11, [sp,#-0x10]!
- stp X12,X13, [sp,#-0x10]!
- stp X14,X15, [sp,#-0x10]!
- stp X16,X17, [sp,#-0x10]!
- stp X18,X19, [sp,#-0x10]!
- stp X29,X30, [sp,#-0x10]!
-
- bl FIQInterrupt
-
- ldp X29,X30, [sp], #0x10
- ldp X18,X19, [sp], #0x10
- ldp X16,X17, [sp], #0x10
- ldp X14,X15, [sp], #0x10
- ldp X12,X13, [sp], #0x10
- ldp X10,X11, [sp], #0x10
- ldp X8,X9, [sp], #0x10
- ldp X6,X7, [sp], #0x10
- ldp X4,X5, [sp], #0x10
- ldp X2,X3, [sp], #0x10
- ldp X0,X1, [sp], #0x10
-
- eret
-
-SErrorInterruptHandler:
-
- stp X0,X1, [sp,#-0x10]!
- stp X2,X3, [sp,#-0x10]!
- stp X4,X5, [sp,#-0x10]!
- stp X6,X7, [sp,#-0x10]!
- stp X8,X9, [sp,#-0x10]!
- stp X10,X11, [sp,#-0x10]!
- stp X12,X13, [sp,#-0x10]!
- stp X14,X15, [sp,#-0x10]!
- stp X16,X17, [sp,#-0x10]!
- stp X18,X19, [sp,#-0x10]!
- stp X29,X30, [sp,#-0x10]!
-
- bl SErrorInterrupt
-
- ldp X29,X30, [sp], #0x10
- ldp X18,X19, [sp], #0x10
- ldp X16,X17, [sp], #0x10
- ldp X14,X15, [sp], #0x10
- ldp X12,X13, [sp], #0x10
- ldp X10,X11, [sp], #0x10
- ldp X8,X9, [sp], #0x10
- ldp X6,X7, [sp], #0x10
- ldp X4,X5, [sp], #0x10
- ldp X2,X3, [sp], #0x10
- ldp X0,X1, [sp], #0x10
-
- eret
-
-.end
diff --git a/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/portmacro.h b/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/portmacro.h
deleted file mode 100644
index e2f687b5..00000000
--- a/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CA53/portmacro.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- FreeRTOS V8.2.3 - Copyright (C) 2015 Real Time Engineers Ltd.
- All rights reserved
-
- VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
-
- This file is part of the FreeRTOS distribution.
-
- FreeRTOS is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License (version 2) as published by the
- Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.
-
- ***************************************************************************
- >>! NOTE: The modification to the GPL is included to allow you to !<<
- >>! distribute a combined work that includes FreeRTOS without being !<<
- >>! obliged to provide the source code for proprietary components !<<
- >>! outside of the FreeRTOS kernel. !<<
- ***************************************************************************
-
- FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. Full license text is available on the following
- link: http://www.freertos.org/a00114.html
-
- ***************************************************************************
- * *
- * FreeRTOS provides completely free yet professionally developed, *
- * robust, strictly quality controlled, supported, and cross *
- * platform software that is more than just the market leader, it *
- * is the industry's de facto standard. *
- * *
- * Help yourself get started quickly while simultaneously helping *
- * to support the FreeRTOS project by purchasing a FreeRTOS *
- * tutorial book, reference manual, or both: *
- * http://www.FreeRTOS.org/Documentation *
- * *
- ***************************************************************************
-
- http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
- the FAQ page "My application does not run, what could be wrong?". Have you
- defined configASSERT()?
-
- http://www.FreeRTOS.org/support - In return for receiving this top quality
- embedded software for free we request you assist our global community by
- participating in the support forum.
-
- http://www.FreeRTOS.org/training - Investing in training allows your team to
- be as productive as possible as early as possible. Now you can receive
- FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
- Ltd, and the world's leading authority on the world's leading RTOS.
-
- http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
- including FreeRTOS+Trace - an indispensable productivity tool, a DOS
- compatible FAT file system, and our tiny thread aware UDP/IP stack.
-
- http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
- Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
-
- http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
- Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
- licenses offer ticketed support, indemnification and commercial middleware.
-
- http://www.SafeRTOS.com - High Integrity Systems also provide a safety
- engineered and independently SIL3 certified version for use in safety and
- mission critical applications that require provable dependability.
-
- 1 tab == 4 spaces!
-*/
-
-#ifndef PORTMACRO_H
-#define PORTMACRO_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/*-----------------------------------------------------------
- * Port specific definitions.
- *
- * The settings in this file configure FreeRTOS correctly for the given hardware
- * and compiler.
- *
- * These settings should not be altered.
- *-----------------------------------------------------------
- */
-
-/* Type definitions. */
-#define portCHAR char
-#define portFLOAT float
-#define portDOUBLE double
-#define portLONG long
-#define portSHORT short
-#define portSTACK_TYPE size_t
-#define portBASE_TYPE long
-
-typedef portSTACK_TYPE StackType_t;
-typedef portBASE_TYPE BaseType_t;
-typedef uint64_t UBaseType_t;
-
-typedef uint64_t TickType_t;
-#define portMAX_DELAY ( ( TickType_t ) 0xffffffffffffffff )
-
-/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do
-not need to be guarded with a critical section. */
-#define portTICK_TYPE_IS_ATOMIC 1
-
-/*-----------------------------------------------------------*/
-
-/* Hardware specifics. */
-#define portSTACK_GROWTH ( -1 )
-#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
-#define portBYTE_ALIGNMENT 16
-#define portPOINTER_SIZE_TYPE uint64_t
-
-/*-----------------------------------------------------------*/
-
-/* Task utilities. */
-
-/* Called at the end of an ISR that can cause a context switch. */
-#define portEND_SWITCHING_ISR( xSwitchRequired )\
-{ \
-extern uint64_t ullPortYieldRequired; \
- \
- if( xSwitchRequired != pdFALSE ) \
- { \
- ullPortYieldRequired = pdTRUE; \
- } \
-}
-
-#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x )
-#define portYIELD() __asm volatile ( "SMC 0" )
-
-/*-----------------------------------------------------------
- * Critical section control
- *----------------------------------------------------------*/
-
-extern void vPortEnterCritical( void );
-extern void vPortExitCritical( void );
-extern UBaseType_t uxPortSetInterruptMask( void );
-extern void vPortClearInterruptMask( UBaseType_t uxNewMaskValue );
-extern void vPortInstallFreeRTOSVectorTable( void );
-
-#define portDISABLE_INTERRUPTS() \
- __asm volatile ( "MSR DAIFSET, #2" ); \
- __asm volatile ( "DSB SY" ); \
- __asm volatile ( "ISB SY" );
-
-#define portENABLE_INTERRUPTS() \
- __asm volatile ( "MSR DAIFCLR, #2" ); \
- __asm volatile ( "DSB SY" ); \
- __asm volatile ( "ISB SY" );
-
-
-/* These macros do not globally disable/enable interrupts. They do mask off
-interrupts that have a priority below configMAX_API_CALL_INTERRUPT_PRIORITY. */
-#define portENTER_CRITICAL() vPortEnterCritical();
-#define portEXIT_CRITICAL() vPortExitCritical();
-#define portSET_INTERRUPT_MASK_FROM_ISR() uxPortSetInterruptMask()
-#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortClearInterruptMask(x)
-
-/*-----------------------------------------------------------*/
-
-/* Task function macros as described on the FreeRTOS.org WEB site. These are
-not required for this port but included in case common demo code that uses these
-macros is used. */
-#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )
-#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
-
-/* Prototype of the FreeRTOS tick handler. This must be installed as the
-handler for whichever peripheral is used to generate the RTOS tick. */
-void FreeRTOS_Tick_Handler( void );
-
-/* Any task that uses the floating point unit MUST call vPortTaskUsesFPU()
-before any floating point instructions are executed. */
-void vPortTaskUsesFPU( void );
-#define portTASK_USES_FLOATING_POINT() vPortTaskUsesFPU()
-
-#define portLOWEST_INTERRUPT_PRIORITY ( ( ( uint32_t ) configUNIQUE_INTERRUPT_PRIORITIES ) - 1UL )
-#define portLOWEST_USABLE_INTERRUPT_PRIORITY ( portLOWEST_INTERRUPT_PRIORITY - 1UL )
-
-/* Architecture specific optimisations. */
-#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION
- #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
-#endif
-
-#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1
-
- /* Store/clear the ready priorities in a bit map. */
- #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) )
- #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) )
-
- /*-----------------------------------------------------------*/
-
- #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31 - __builtin_clz( uxReadyPriorities ) )
-
-#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */
-
-#ifdef configASSERT
- void vPortValidateInterruptPriority( void );
- #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority()
-#endif /* configASSERT */
-
-#define portNOP() __asm volatile( "NOP" )
-#define portINLINE __inline
-
-#ifdef __cplusplus
- } /* extern C */
-#endif
-
-
-/* The number of bits to shift for an interrupt priority is dependent on the
-number of bits implemented by the interrupt controller. */
-#if configUNIQUE_INTERRUPT_PRIORITIES == 16
- #define portPRIORITY_SHIFT 4
- #define portMAX_BINARY_POINT_VALUE 3
-#elif configUNIQUE_INTERRUPT_PRIORITIES == 32
- #define portPRIORITY_SHIFT 3
- #define portMAX_BINARY_POINT_VALUE 2
-#elif configUNIQUE_INTERRUPT_PRIORITIES == 64
- #define portPRIORITY_SHIFT 2
- #define portMAX_BINARY_POINT_VALUE 1
-#elif configUNIQUE_INTERRUPT_PRIORITIES == 128
- #define portPRIORITY_SHIFT 1
- #define portMAX_BINARY_POINT_VALUE 0
-#elif configUNIQUE_INTERRUPT_PRIORITIES == 256
- #define portPRIORITY_SHIFT 0
- #define portMAX_BINARY_POINT_VALUE 0
-#else
- #error Invalid configUNIQUE_INTERRUPT_PRIORITIES setting. configUNIQUE_INTERRUPT_PRIORITIES must be set to the number of unique priorities implemented by the target hardware
-#endif
-
-/* Interrupt controller access addresses. */
-#define portICCPMR_PRIORITY_MASK_OFFSET ( 0x04 )
-#define portICCIAR_INTERRUPT_ACKNOWLEDGE_OFFSET ( 0x0C )
-#define portICCEOIR_END_OF_INTERRUPT_OFFSET ( 0x10 )
-#define portICCBPR_BINARY_POINT_OFFSET ( 0x08 )
-#define portICCRPR_RUNNING_PRIORITY_OFFSET ( 0x14 )
-
-#define portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS ( configINTERRUPT_CONTROLLER_BASE_ADDRESS + configINTERRUPT_CONTROLLER_CPU_INTERFACE_OFFSET )
-#define portICCPMR_PRIORITY_MASK_REGISTER ( *( ( volatile uint32_t * ) ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCPMR_PRIORITY_MASK_OFFSET ) ) )
-#define portICCIAR_INTERRUPT_ACKNOWLEDGE_REGISTER_ADDRESS ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCIAR_INTERRUPT_ACKNOWLEDGE_OFFSET )
-#define portICCEOIR_END_OF_INTERRUPT_REGISTER_ADDRESS ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCEOIR_END_OF_INTERRUPT_OFFSET )
-#define portICCPMR_PRIORITY_MASK_REGISTER_ADDRESS ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCPMR_PRIORITY_MASK_OFFSET )
-#define portICCBPR_BINARY_POINT_REGISTER ( *( ( const volatile uint32_t * ) ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCBPR_BINARY_POINT_OFFSET ) ) )
-#define portICCRPR_RUNNING_PRIORITY_REGISTER ( *( ( const volatile uint32_t * ) ( portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCRPR_RUNNING_PRIORITY_OFFSET ) ) )
-
-#endif /* PORTMACRO_H */