diff --git a/README.md b/README.md index b574bad55..a6d383add 100644 --- a/README.md +++ b/README.md @@ -14,12 +14,12 @@ application projects. That way you will have the correct FreeRTOS source files included, and the correct include paths configured. Once a demo application is building and executing you can remove the demo application files, and start to add in your own application source files. See the -[FreeRTOS Kernel Quick Start Guide](https://www.FreeRTOS.org/FreeRTOS-quick-start-guide.html) +[FreeRTOS Kernel Quick Start Guide](https://www.freertos.org/Documentation/01-FreeRTOS-quick-start/01-Beginners-guide/02-Quick-start-guide) for detailed instructions and other useful links. Additionally, for FreeRTOS kernel feature information refer to the -[Developer Documentation](https://www.FreeRTOS.org/features.html), -and [API Reference](https://www.FreeRTOS.org/a00106.html). +[Developer Documentation](https://www.freertos.org/Documentation/02-Kernel/02-Kernel-features/00-Developer-docs), +and [API Reference](https://www.freertos.org/Documentation/02-Kernel/04-API-references/01-Task-creation/00-TaskHandle). Also for contributing and creating a Pull Request please refer to [the instructions here](.github/CONTRIBUTING.md#contributing-via-pull-request). diff --git a/examples/cmake_example/main.c b/examples/cmake_example/main.c index b7ced4dd9..96a2abfe1 100644 --- a/examples/cmake_example/main.c +++ b/examples/cmake_example/main.c @@ -30,7 +30,7 @@ * This is a simple main that will start the FreeRTOS-Kernel and run a periodic task * that only delays if compiled with the template port, this project will do nothing. * For more information on getting started please look here: - * https://freertos.org/FreeRTOS-quick-start-guide.html + * https://www.freertos.org/Documentation/01-FreeRTOS-quick-start/01-Beginners-guide/02-Quick-start-guide */ /* FreeRTOS includes. */ diff --git a/include/queue.h b/include/queue.h index 62d095a8e..80345b9f0 100644 --- a/include/queue.h +++ b/include/queue.h @@ -1645,7 +1645,7 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION; * 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/RTOS-queue-sets.html + * 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. * @@ -1742,7 +1742,7 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION; * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this * function. * - * Note 1: See the documentation on https://www.FreeRTOS.org/RTOS-queue-sets.html + * 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. * diff --git a/list.c b/list.c index eb9efbd2d..0c0f3676e 100644 --- a/list.c +++ b/list.c @@ -166,7 +166,7 @@ void vListInsert( List_t * const pxList, { /* *** NOTE *********************************************************** * If you find your application is crashing here then likely causes are - * listed below. In addition see https://www.FreeRTOS.org/FAQHelp.html for + * listed below. In addition see https://www.freertos.org/Why-FreeRTOS/FAQs for * more tips, and ensure configASSERT() is defined! * https://www.FreeRTOS.org/a00110.html#configASSERT * diff --git a/portable/ARMv8M/non_secure/port.c b/portable/ARMv8M/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/ARMv8M/non_secure/port.c +++ b/portable/ARMv8M/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/CCS/ARM_CM3/port.c b/portable/CCS/ARM_CM3/port.c index 5ed26c2d2..8373c14c0 100644 --- a/portable/CCS/ARM_CM3/port.c +++ b/portable/CCS/ARM_CM3/port.c @@ -669,7 +669,7 @@ void vPortSetupTimerInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/CCS/ARM_CM4F/port.c b/portable/CCS/ARM_CM4F/port.c index 1ac7a59e6..1ad05077d 100644 --- a/portable/CCS/ARM_CM4F/port.c +++ b/portable/CCS/ARM_CM4F/port.c @@ -694,7 +694,7 @@ void vPortSetupTimerInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM0/port.c b/portable/GCC/ARM_CM0/port.c index 608afa5de..c3053c543 100644 --- a/portable/GCC/ARM_CM0/port.c +++ b/portable/GCC/ARM_CM0/port.c @@ -1288,7 +1288,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if diff --git a/portable/GCC/ARM_CM23/non_secure/port.c b/portable/GCC/ARM_CM23/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/GCC/ARM_CM23/non_secure/port.c +++ b/portable/GCC/ARM_CM23/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM23_NTZ/non_secure/port.c b/portable/GCC/ARM_CM23_NTZ/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/GCC/ARM_CM23_NTZ/non_secure/port.c +++ b/portable/GCC/ARM_CM23_NTZ/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM3/port.c b/portable/GCC/ARM_CM3/port.c index 5adf39bd7..ba7a718ab 100644 --- a/portable/GCC/ARM_CM3/port.c +++ b/portable/GCC/ARM_CM3/port.c @@ -292,7 +292,7 @@ BaseType_t xPortStartScheduler( void ) * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -801,7 +801,7 @@ __attribute__( ( weak ) ) void vPortSetupTimerInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM33/non_secure/port.c b/portable/GCC/ARM_CM33/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/GCC/ARM_CM33/non_secure/port.c +++ b/portable/GCC/ARM_CM33/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM33_NTZ/non_secure/port.c b/portable/GCC/ARM_CM33_NTZ/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/GCC/ARM_CM33_NTZ/non_secure/port.c +++ b/portable/GCC/ARM_CM33_NTZ/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM35P/non_secure/port.c b/portable/GCC/ARM_CM35P/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/GCC/ARM_CM35P/non_secure/port.c +++ b/portable/GCC/ARM_CM35P/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM35P_NTZ/non_secure/port.c b/portable/GCC/ARM_CM35P_NTZ/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/GCC/ARM_CM35P_NTZ/non_secure/port.c +++ b/portable/GCC/ARM_CM35P_NTZ/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM3_MPU/port.c b/portable/GCC/ARM_CM3_MPU/port.c index 6a36f1a88..bbe00b61f 100644 --- a/portable/GCC/ARM_CM3_MPU/port.c +++ b/portable/GCC/ARM_CM3_MPU/port.c @@ -767,7 +767,7 @@ BaseType_t xPortStartScheduler( void ) * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -1462,7 +1462,7 @@ void vPortStoreTaskMPUSettings( xMPU_SETTINGS * xMPUSettings, * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM4F/port.c b/portable/GCC/ARM_CM4F/port.c index 532bbce88..c4194f767 100644 --- a/portable/GCC/ARM_CM4F/port.c +++ b/portable/GCC/ARM_CM4F/port.c @@ -335,7 +335,7 @@ BaseType_t xPortStartScheduler( void ) * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -886,7 +886,7 @@ static void vPortEnableVFP( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM4_MPU/port.c b/portable/GCC/ARM_CM4_MPU/port.c index 68b2ab13f..30a65c423 100644 --- a/portable/GCC/ARM_CM4_MPU/port.c +++ b/portable/GCC/ARM_CM4_MPU/port.c @@ -853,7 +853,7 @@ BaseType_t xPortStartScheduler( void ) * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -1605,7 +1605,7 @@ void vPortStoreTaskMPUSettings( xMPU_SETTINGS * xMPUSettings, * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM55/non_secure/port.c b/portable/GCC/ARM_CM55/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/GCC/ARM_CM55/non_secure/port.c +++ b/portable/GCC/ARM_CM55/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM55_NTZ/non_secure/port.c b/portable/GCC/ARM_CM55_NTZ/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/GCC/ARM_CM55_NTZ/non_secure/port.c +++ b/portable/GCC/ARM_CM55_NTZ/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM7/r0p1/port.c b/portable/GCC/ARM_CM7/r0p1/port.c index ac067274d..766f0242d 100644 --- a/portable/GCC/ARM_CM7/r0p1/port.c +++ b/portable/GCC/ARM_CM7/r0p1/port.c @@ -323,7 +323,7 @@ BaseType_t xPortStartScheduler( void ) * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -876,7 +876,7 @@ static void vPortEnableVFP( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM85/non_secure/port.c b/portable/GCC/ARM_CM85/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/GCC/ARM_CM85/non_secure/port.c +++ b/portable/GCC/ARM_CM85/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/GCC/ARM_CM85_NTZ/non_secure/port.c b/portable/GCC/ARM_CM85_NTZ/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/GCC/ARM_CM85_NTZ/non_secure/port.c +++ b/portable/GCC/ARM_CM85_NTZ/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CA9/port.c b/portable/IAR/ARM_CA9/port.c index b558099af..f26ae3790 100644 --- a/portable/IAR/ARM_CA9/port.c +++ b/portable/IAR/ARM_CA9/port.c @@ -427,7 +427,7 @@ uint32_t ulPortSetInterruptMask( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( portICCRPR_RUNNING_PRIORITY_REGISTER >= ( uint32_t ) ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT ) ); /* Priority grouping: The interrupt controller (GIC) allows the bits diff --git a/portable/IAR/ARM_CM0/port.c b/portable/IAR/ARM_CM0/port.c index 809b6c417..6f5ec0ad5 100644 --- a/portable/IAR/ARM_CM0/port.c +++ b/portable/IAR/ARM_CM0/port.c @@ -205,7 +205,7 @@ BaseType_t xPortStartScheduler( void ) * * Assertion failures here indicate incorrect installation of the * FreeRTOS handler. For help installing the FreeRTOS handler, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if diff --git a/portable/IAR/ARM_CM23/non_secure/port.c b/portable/IAR/ARM_CM23/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/IAR/ARM_CM23/non_secure/port.c +++ b/portable/IAR/ARM_CM23/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM23_NTZ/non_secure/port.c b/portable/IAR/ARM_CM23_NTZ/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/IAR/ARM_CM23_NTZ/non_secure/port.c +++ b/portable/IAR/ARM_CM23_NTZ/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM3/port.c b/portable/IAR/ARM_CM3/port.c index 5d0d5aab5..ef590cf95 100644 --- a/portable/IAR/ARM_CM3/port.c +++ b/portable/IAR/ARM_CM3/port.c @@ -246,7 +246,7 @@ BaseType_t xPortStartScheduler( void ) * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -709,7 +709,7 @@ __weak void vPortSetupTimerInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM33/non_secure/port.c b/portable/IAR/ARM_CM33/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/IAR/ARM_CM33/non_secure/port.c +++ b/portable/IAR/ARM_CM33/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM33_NTZ/non_secure/port.c b/portable/IAR/ARM_CM33_NTZ/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/IAR/ARM_CM33_NTZ/non_secure/port.c +++ b/portable/IAR/ARM_CM33_NTZ/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM35P/non_secure/port.c b/portable/IAR/ARM_CM35P/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/IAR/ARM_CM35P/non_secure/port.c +++ b/portable/IAR/ARM_CM35P/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM35P_NTZ/non_secure/port.c b/portable/IAR/ARM_CM35P_NTZ/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/IAR/ARM_CM35P_NTZ/non_secure/port.c +++ b/portable/IAR/ARM_CM35P_NTZ/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM4F/port.c b/portable/IAR/ARM_CM4F/port.c index a4e2193b2..b96329a05 100644 --- a/portable/IAR/ARM_CM4F/port.c +++ b/portable/IAR/ARM_CM4F/port.c @@ -284,7 +284,7 @@ BaseType_t xPortStartScheduler( void ) * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -753,7 +753,7 @@ __weak void vPortSetupTimerInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM4F_MPU/port.c b/portable/IAR/ARM_CM4F_MPU/port.c index da070c56a..66092df01 100644 --- a/portable/IAR/ARM_CM4F_MPU/port.c +++ b/portable/IAR/ARM_CM4F_MPU/port.c @@ -748,7 +748,7 @@ BaseType_t xPortStartScheduler( void ) * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -1336,7 +1336,7 @@ void vPortStoreTaskMPUSettings( xMPU_SETTINGS * xMPUSettings, * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM55/non_secure/port.c b/portable/IAR/ARM_CM55/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/IAR/ARM_CM55/non_secure/port.c +++ b/portable/IAR/ARM_CM55/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM55_NTZ/non_secure/port.c b/portable/IAR/ARM_CM55_NTZ/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/IAR/ARM_CM55_NTZ/non_secure/port.c +++ b/portable/IAR/ARM_CM55_NTZ/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM7/r0p1/port.c b/portable/IAR/ARM_CM7/r0p1/port.c index 35a5b0b1b..723389633 100644 --- a/portable/IAR/ARM_CM7/r0p1/port.c +++ b/portable/IAR/ARM_CM7/r0p1/port.c @@ -272,7 +272,7 @@ BaseType_t xPortStartScheduler( void ) * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -741,7 +741,7 @@ __weak void vPortSetupTimerInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM85/non_secure/port.c b/portable/IAR/ARM_CM85/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/IAR/ARM_CM85/non_secure/port.c +++ b/portable/IAR/ARM_CM85/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/IAR/ARM_CM85_NTZ/non_secure/port.c b/portable/IAR/ARM_CM85_NTZ/non_secure/port.c index c9b596d12..75e9ea9dd 100644 --- a/portable/IAR/ARM_CM85_NTZ/non_secure/port.c +++ b/portable/IAR/ARM_CM85_NTZ/non_secure/port.c @@ -1650,7 +1650,7 @@ BaseType_t xPortStartScheduler( void ) /* PRIVILEGED_FUNCTION */ * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -2041,7 +2041,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/MikroC/ARM_CM4F/port.c b/portable/MikroC/ARM_CM4F/port.c index dd5f35361..a167f8588 100644 --- a/portable/MikroC/ARM_CM4F/port.c +++ b/portable/MikroC/ARM_CM4F/port.c @@ -892,7 +892,7 @@ BaseType_t xPortIsInsideInterrupt( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/RVDS/ARM_CA9/port.c b/portable/RVDS/ARM_CA9/port.c index 88979f42a..c89232644 100644 --- a/portable/RVDS/ARM_CA9/port.c +++ b/portable/RVDS/ARM_CA9/port.c @@ -465,7 +465,7 @@ uint32_t ulPortSetInterruptMask( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( portICCRPR_RUNNING_PRIORITY_REGISTER >= ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT ) ); /* Priority grouping: The interrupt controller (GIC) allows the bits diff --git a/portable/RVDS/ARM_CM3/port.c b/portable/RVDS/ARM_CM3/port.c index b75f00f29..725127193 100644 --- a/portable/RVDS/ARM_CM3/port.c +++ b/portable/RVDS/ARM_CM3/port.c @@ -770,7 +770,7 @@ __asm uint32_t vPortGetIPSR( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/RVDS/ARM_CM4F/port.c b/portable/RVDS/ARM_CM4F/port.c index dfbbf4e4d..8d21daffb 100644 --- a/portable/RVDS/ARM_CM4F/port.c +++ b/portable/RVDS/ARM_CM4F/port.c @@ -866,7 +866,7 @@ __asm uint32_t vPortGetIPSR( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/RVDS/ARM_CM4_MPU/port.c b/portable/RVDS/ARM_CM4_MPU/port.c index 87af70e3d..307ae6d02 100644 --- a/portable/RVDS/ARM_CM4_MPU/port.c +++ b/portable/RVDS/ARM_CM4_MPU/port.c @@ -852,7 +852,7 @@ BaseType_t xPortStartScheduler( void ) * * Assertion failures here indicate incorrect installation of the * FreeRTOS handlers. For help installing the FreeRTOS handlers, see - * https://www.FreeRTOS.org/FAQHelp.html. + * https://www.freertos.org/Why-FreeRTOS/FAQs. * * Systems with a configurable address for the interrupt vector table * can also encounter assertion failures or even system faults here if @@ -1602,7 +1602,7 @@ __asm uint32_t prvPortGetIPSR( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/portable/RVDS/ARM_CM7/r0p1/port.c b/portable/RVDS/ARM_CM7/r0p1/port.c index 464ac2e81..33fa80266 100644 --- a/portable/RVDS/ARM_CM7/r0p1/port.c +++ b/portable/RVDS/ARM_CM7/r0p1/port.c @@ -852,7 +852,7 @@ __asm uint32_t vPortGetIPSR( void ) * * The following links provide detailed information: * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html - * https://www.FreeRTOS.org/FAQHelp.html */ + * https://www.freertos.org/Why-FreeRTOS/FAQs */ configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); } diff --git a/tasks.c b/tasks.c index b5ab5ad59..d76bc33e5 100644 --- a/tasks.c +++ b/tasks.c @@ -3819,9 +3819,30 @@ void vTaskSuspendAll( void ) #if ( configNUMBER_OF_CORES == 1 ) { /* A critical section is not required as the variable is of type - * BaseType_t. Please read Richard Barry's reply in the following link to a - * post in the FreeRTOS support forum before reporting this as a bug! - - * https://goo.gl/wu4acr */ + * BaseType_t. Each task maintains its own context, and a context switch + * cannot occur if the variable is non zero. So, as long as the writing + * from the register back into the memory is atomic, it is not a + * problem. + * + * Consider the following scenario, which starts with + * uxSchedulerSuspended at zero. + * + * 1. load uxSchedulerSuspended into register. + * 2. Now a context switch causes another task to run, and the other + * task uses the same variable. The other task will see the variable + * as zero because the variable has not yet been updated by the + * original task. Eventually the original task runs again. **That can + * only happen when uxSchedulerSuspended is once again zero**. When + * the original task runs again, the contents of the CPU registers + * are restored to exactly how they were when it was switched out - + * therefore the value it read into the register still matches the + * value of the uxSchedulerSuspended variable. + * + * 3. increment register. + * 4. store register into uxSchedulerSuspended. The value restored to + * uxSchedulerSuspended will be the correct value of 1, even though + * the variable was used by other tasks in the mean time. + */ /* portSOFTWARE_BARRIER() is only implemented for emulated/simulated ports that * do not otherwise exhibit real time behaviour. */