diff options
Diffstat (limited to 'FreeRTOS/Demo/ThirdParty/Template/RegTests.c')
-rw-r--r-- | FreeRTOS/Demo/ThirdParty/Template/RegTests.c | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/FreeRTOS/Demo/ThirdParty/Template/RegTests.c b/FreeRTOS/Demo/ThirdParty/Template/RegTests.c new file mode 100644 index 000000000..3c95e1830 --- /dev/null +++ b/FreeRTOS/Demo/ThirdParty/Template/RegTests.c @@ -0,0 +1,167 @@ +/* + * FreeRTOS V202104.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ + +/* Scheduler include files. */ +#include "FreeRTOS.h" +#include "task.h" + +/* Interface include files. */ +#include "RegTests.h" + +/* Tasks that implement register tests. */ +static void prvRegisterTest1Task( void *pvParameters ); +static void prvRegisterTest2Task( void *pvParameters ); +static void prvRegisterTest3Task( void *pvParameters ); +static void prvRegisterTest4Task( void *pvParameters ); + +/* Flag that will be latched to pdTRUE should any unexpected behaviour be +detected in any of the tasks. */ +static volatile BaseType_t xErrorDetected = pdFALSE; + +/* Counters that are incremented on each cycle of a test. This is used to +detect a stalled task - a test that is no longer running. */ +static volatile uint32_t ulRegisterTest1Counter = 0; +static volatile uint32_t ulRegisterTest2Counter = 0; +static volatile uint32_t ulRegisterTest3Counter = 0; +static volatile uint32_t ulRegisterTest4Counter = 0; +/*-----------------------------------------------------------*/ + +static void prvRegisterTest1Task( void *pvParameters ) +{ + ( void ) pvParameters; + + for( ; ; ) + { + /* 1. Fill the registers stored as part of task context with known values. + * 2. Force a context switch. + * 3. Verify that all the registers contain expected values. + * 4. If all the register contain expected values, increment ulRegisterTest1Counter. + */ + } +} +/*-----------------------------------------------------------*/ + +static void prvRegisterTest2Task( void *pvParameters ) +{ + ( void ) pvParameters; + + for( ; ; ) + { + /* 1. Fill the registers stored as part of task context with known values. + * 2. Force a context switch. + * 3. Verify that all the registers contain expected values. + * 4. If all the register contain expected values, increment ulRegisterTest2Counter. + */ + } +} +/*-----------------------------------------------------------*/ + +static void prvRegisterTest3Task( void *pvParameters ) +{ + ( void ) pvParameters; + + for( ; ; ) + { + /* 1. Fill the registers stored as part of task context with known values. + * 2. Force a context switch. + * 3. Verify that all the registers contain expected values. + * 4. If all the register contain expected values, increment ulRegisterTest3Counter. + */ + } +} +/*-----------------------------------------------------------*/ + +static void prvRegisterTest4Task( void *pvParameters ) +{ + ( void ) pvParameters; + + for( ; ; ) + { + /* 1. Fill the registers stored as part of task context with known values. + * 2. Force a context switch. + * 3. Verify that all the registers contain expected values. + * 4. If all the register contain expected values, increment ulRegisterTest4Counter. + */ + } +} +/*-----------------------------------------------------------*/ + +void vStartRegisterTasks( UBaseType_t uxPriority ) +{ + BaseType_t ret; + + ret = xTaskCreate( prvRegisterTest1Task, "RegTest1", configMINIMAL_STACK_SIZE, NULL, uxPriority, NULL ); + configASSERT( ret == pdPASS ); + + ret = xTaskCreate( prvRegisterTest2Task, "RegTest2", configMINIMAL_STACK_SIZE, NULL, uxPriority, NULL ); + configASSERT( ret == pdPASS ); + + ret = xTaskCreate( prvRegisterTest3Task, "RegTest3", configMINIMAL_STACK_SIZE, NULL, uxPriority, NULL ); + configASSERT( ret == pdPASS ); + + ret = xTaskCreate( prvRegisterTest4Task, "RegTest4", configMINIMAL_STACK_SIZE, NULL, uxPriority, NULL ); + configASSERT( ret == pdPASS ); +} +/*-----------------------------------------------------------*/ + +BaseType_t xAreRegisterTasksStillRunning( void ) +{ +static uint32_t ulLastRegisterTest1Counter = 0, ulLastRegisterTest2Counter = 0; +static uint32_t ulLastRegisterTest3Counter = 0, ulLastRegisterTest4Counter = 0; + + /* If the register test task is still running then we expect the loop + * counters to have incremented since this function was last called. */ + if( ulLastRegisterTest1Counter == ulRegisterTest1Counter ) + { + xErrorDetected = pdTRUE; + } + + if( ulLastRegisterTest2Counter == ulRegisterTest2Counter ) + { + xErrorDetected = pdTRUE; + } + + if( ulLastRegisterTest3Counter == ulRegisterTest3Counter ) + { + xErrorDetected = pdTRUE; + } + + if( ulLastRegisterTest4Counter == ulRegisterTest4Counter ) + { + xErrorDetected = pdTRUE; + } + + ulLastRegisterTest1Counter = ulRegisterTest1Counter; + ulLastRegisterTest2Counter = ulRegisterTest2Counter; + ulLastRegisterTest3Counter = ulRegisterTest3Counter; + ulLastRegisterTest4Counter = ulRegisterTest4Counter; + + /* Errors detected in the task itself will have latched xErrorDetected + * to true. */ + return ( BaseType_t ) !xErrorDetected; +} +/*-----------------------------------------------------------*/ |