mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2026-05-12 19:52:55 -04:00
Add register test tasks to QEMU project (#765)
* Add register test tasks to the CORTEX_MPS2_QEMU_IAR GCC and IAR builds. * Update header comment in the two added files. * Fix header checks * Fix build issue * update IAR version --------- Co-authored-by: none <> Co-authored-by: Rahul Kar <karahulx@amazon.com> Co-authored-by: Rahul Kar <118818625+kar-rahul-aws@users.noreply.github.com>
This commit is contained in:
parent
8e8dad2b09
commit
7cd180d914
10 changed files with 724 additions and 167 deletions
|
|
@ -28,104 +28,107 @@
|
||||||
#define FREERTOS_CONFIG_H
|
#define FREERTOS_CONFIG_H
|
||||||
|
|
||||||
/*-----------------------------------------------------------
|
/*-----------------------------------------------------------
|
||||||
* Application specific definitions.
|
* Application specific definitions.
|
||||||
*
|
*
|
||||||
* These definitions should be adjusted for your particular hardware and
|
* These definitions should be adjusted for your particular hardware and
|
||||||
* application requirements.
|
* application requirements.
|
||||||
*
|
*
|
||||||
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
|
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
|
||||||
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
|
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
|
||||||
*
|
*
|
||||||
* See http://www.freertos.org/a00110.html
|
* See http://www.freertos.org/a00110.html
|
||||||
*----------------------------------------------------------*/
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
#define configUSE_TRACE_FACILITY 0
|
#define configUSE_TRACE_FACILITY 0
|
||||||
#define configGENERATE_RUN_TIME_STATS 0
|
#define configGENERATE_RUN_TIME_STATS 0
|
||||||
|
|
||||||
#define configUSE_TICKLESS_IDLE 0
|
#define configUSE_PREEMPTION 1
|
||||||
#define configUSE_PREEMPTION 1
|
#define configUSE_IDLE_HOOK 0
|
||||||
#define configUSE_IDLE_HOOK 0
|
#define configUSE_TICK_HOOK 1
|
||||||
#define configUSE_TICK_HOOK 1
|
#define configCPU_CLOCK_HZ ( ( unsigned long ) 25000000 )
|
||||||
#define configCPU_CLOCK_HZ ( ( unsigned long ) 25000000 )
|
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
|
||||||
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
|
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 80 )
|
||||||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 80 )
|
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 60 * 1024 ) )
|
||||||
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 60 * 1024 ) )
|
#define configMAX_TASK_NAME_LEN ( 12 )
|
||||||
#define configMAX_TASK_NAME_LEN ( 12 )
|
#define configUSE_TRACE_FACILITY 0
|
||||||
#define configUSE_16_BIT_TICKS 0
|
#define configUSE_16_BIT_TICKS 0
|
||||||
#define configIDLE_SHOULD_YIELD 0
|
#define configIDLE_SHOULD_YIELD 0
|
||||||
#define configUSE_CO_ROUTINES 0
|
#define configUSE_CO_ROUTINES 0
|
||||||
#define configUSE_MUTEXES 1
|
#define configUSE_MUTEXES 1
|
||||||
#define configUSE_RECURSIVE_MUTEXES 1
|
#define configUSE_RECURSIVE_MUTEXES 1
|
||||||
#define configCHECK_FOR_STACK_OVERFLOW 2
|
#define configCHECK_FOR_STACK_OVERFLOW 2
|
||||||
#define configUSE_MALLOC_FAILED_HOOK 1
|
#define configUSE_MALLOC_FAILED_HOOK 1
|
||||||
#define configUSE_QUEUE_SETS 1
|
#define configUSE_QUEUE_SETS 1
|
||||||
#define configUSE_COUNTING_SEMAPHORES 1
|
#define configUSE_COUNTING_SEMAPHORES 1
|
||||||
|
|
||||||
#define configMAX_PRIORITIES ( 9UL )
|
#define configMAX_PRIORITIES ( 9UL )
|
||||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||||
#define configQUEUE_REGISTRY_SIZE 10
|
#define configQUEUE_REGISTRY_SIZE 10
|
||||||
#define configSUPPORT_STATIC_ALLOCATION 1
|
#define configSUPPORT_STATIC_ALLOCATION 1
|
||||||
|
|
||||||
/* Timer related defines. */
|
/* Timer related defines. */
|
||||||
#define configUSE_TIMERS 1
|
#define configUSE_TIMERS 1
|
||||||
#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 4 )
|
#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 4 )
|
||||||
#define configTIMER_QUEUE_LENGTH 20
|
#define configTIMER_QUEUE_LENGTH 20
|
||||||
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )
|
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )
|
||||||
|
|
||||||
#define configUSE_TASK_NOTIFICATIONS 1
|
#define configUSE_TASK_NOTIFICATIONS 1
|
||||||
#define configTASK_NOTIFICATION_ARRAY_ENTRIES 3
|
#define configTASK_NOTIFICATION_ARRAY_ENTRIES 3
|
||||||
|
|
||||||
/* Set the following definitions to 1 to include the API function, or zero
|
/* Set the following definitions to 1 to include the API function, or zero
|
||||||
to exclude the API function. */
|
* to exclude the API function. */
|
||||||
|
|
||||||
#define INCLUDE_vTaskPrioritySet 1
|
#define INCLUDE_vTaskPrioritySet 1
|
||||||
#define INCLUDE_uxTaskPriorityGet 1
|
#define INCLUDE_uxTaskPriorityGet 1
|
||||||
#define INCLUDE_vTaskDelete 1
|
#define INCLUDE_vTaskDelete 1
|
||||||
#define INCLUDE_vTaskCleanUpResources 0
|
#define INCLUDE_vTaskCleanUpResources 0
|
||||||
#define INCLUDE_vTaskSuspend 1
|
#define INCLUDE_vTaskSuspend 1
|
||||||
#define INCLUDE_vTaskDelayUntil 1
|
#define INCLUDE_vTaskDelayUntil 1
|
||||||
#define INCLUDE_vTaskDelay 1
|
#define INCLUDE_vTaskDelay 1
|
||||||
#define INCLUDE_uxTaskGetStackHighWaterMark 1
|
#define INCLUDE_uxTaskGetStackHighWaterMark 1
|
||||||
#define INCLUDE_xTaskGetSchedulerState 1
|
#define INCLUDE_xTaskGetSchedulerState 1
|
||||||
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 1
|
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 1
|
||||||
#define INCLUDE_xTaskGetIdleTaskHandle 1
|
#define INCLUDE_xTaskGetIdleTaskHandle 1
|
||||||
#define INCLUDE_xSemaphoreGetMutexHolder 1
|
#define INCLUDE_xSemaphoreGetMutexHolder 1
|
||||||
#define INCLUDE_eTaskGetState 1
|
#define INCLUDE_eTaskGetState 1
|
||||||
#define INCLUDE_xTimerPendFunctionCall 1
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
#define INCLUDE_xTaskAbortDelay 1
|
#define INCLUDE_xTaskAbortDelay 1
|
||||||
#define INCLUDE_xTaskGetHandle 1
|
#define INCLUDE_xTaskGetHandle 1
|
||||||
|
|
||||||
|
/* This demo makes use of one or more example stats formatting functions. These
|
||||||
|
* format the raw data provided by the uxTaskGetSystemState() function in to human
|
||||||
|
* readable ASCII form. See the notes in the implementation of vTaskList() within
|
||||||
|
* FreeRTOS/Source/tasks.c for limitations. */
|
||||||
|
#define configUSE_STATS_FORMATTING_FUNCTIONS 0
|
||||||
|
|
||||||
|
#define configKERNEL_INTERRUPT_PRIORITY ( 255 ) /* All eight bits as QEMU doesn't model the priority bits. */
|
||||||
|
|
||||||
/* This demo makes use of one or more example stats formatting functions. These
|
|
||||||
format the raw data provided by the uxTaskGetSystemState() function in to human
|
|
||||||
readable ASCII form. See the notes in the implementation of vTaskList() within
|
|
||||||
FreeRTOS/Source/tasks.c for limitations. */
|
|
||||||
#define configUSE_STATS_FORMATTING_FUNCTIONS 0
|
|
||||||
|
|
||||||
#define configKERNEL_INTERRUPT_PRIORITY ( 255 ) /* All eight bits as QEMU doesn't model the priority bits. */
|
|
||||||
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
|
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
|
||||||
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
|
* See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
|
||||||
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( 4 )
|
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( 4 )
|
||||||
|
|
||||||
/* Use the Cortex-M3 optimised task selection rather than the generic C code
|
/* Use the Cortex-M3 optimised task selection rather than the generic C code
|
||||||
version. */
|
* version. */
|
||||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||||
|
|
||||||
/* The Win32 target is capable of running all the tests tasks at the same
|
/* The Win32 target is capable of running all the tests tasks at the same
|
||||||
* time. */
|
* time. */
|
||||||
#define configRUN_ADDITIONAL_TESTS 1
|
#define configRUN_ADDITIONAL_TESTS 1
|
||||||
|
|
||||||
/* The test that checks the trigger level on stream buffers requires an
|
/* The test that checks the trigger level on stream buffers requires an
|
||||||
allowable margin of error on slower processors (slower than the Win32
|
* allowable margin of error on slower processors (slower than the Win32
|
||||||
machine on which the test is developed). */
|
* machine on which the test is developed). */
|
||||||
#define configSTREAM_BUFFER_TRIGGER_LEVEL_TEST_MARGIN 4
|
#define configSTREAM_BUFFER_TRIGGER_LEVEL_TEST_MARGIN 4
|
||||||
|
|
||||||
#ifndef __IASMARM__ /* Prevent C code being included in IAR asm files. */
|
#ifndef __IASMARM__ /* Prevent C code being included in IAR asm files. */
|
||||||
void vAssertCalled( const char *pcFileName, uint32_t ulLine );
|
void vAssertCalled( const char * pcFileName,
|
||||||
#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __FILE__, __LINE__ );
|
uint32_t ulLine );
|
||||||
|
#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __FILE__, __LINE__ );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define intqHIGHER_PRIORITY ( configMAX_PRIORITIES - 5 )
|
#define intqHIGHER_PRIORITY ( configMAX_PRIORITIES - 5 )
|
||||||
#define bktPRIMARY_PRIORITY ( configMAX_PRIORITIES - 3 )
|
#define bktPRIMARY_PRIORITY ( configMAX_PRIORITIES - 3 )
|
||||||
#define bktSECONDARY_PRIORITY ( configMAX_PRIORITIES - 4 )
|
#define bktSECONDARY_PRIORITY ( configMAX_PRIORITIES - 4 )
|
||||||
|
|
||||||
#endif /* FREERTOS_CONFIG_H */
|
#endif /* FREERTOS_CONFIG_H */
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,6 @@
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
<linkedResources>
|
<linkedResources>
|
||||||
<link>
|
|
||||||
<name>CommonDemoSource</name>
|
|
||||||
<type>2</type>
|
|
||||||
<locationURI>FREERTOS_ROOT/Demo/Common/Minimal</locationURI>
|
|
||||||
</link>
|
|
||||||
<link>
|
<link>
|
||||||
<name>FreeRTOS_kernel</name>
|
<name>FreeRTOS_kernel</name>
|
||||||
<type>2</type>
|
<type>2</type>
|
||||||
|
|
@ -40,20 +35,20 @@
|
||||||
<type>2</type>
|
<type>2</type>
|
||||||
<locationURI>virtual:/virtual</locationURI>
|
<locationURI>virtual:/virtual</locationURI>
|
||||||
</link>
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>Source/Blinky_Demo</name>
|
||||||
|
<type>2</type>
|
||||||
|
<locationURI>virtual:/virtual</locationURI>
|
||||||
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>Source/FreeRTOSConfig.h</name>
|
<name>Source/FreeRTOSConfig.h</name>
|
||||||
<type>1</type>
|
<type>1</type>
|
||||||
<locationURI>FREERTOS_ROOT/Demo/CORTEX_MPS2_QEMU_IAR_GCC/FreeRTOSConfig.h</locationURI>
|
<locationURI>FREERTOS_ROOT/Demo/CORTEX_MPS2_QEMU_IAR_GCC/FreeRTOSConfig.h</locationURI>
|
||||||
</link>
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>Source/IntQueueTimer.c</name>
|
<name>Source/Full_Demo</name>
|
||||||
<type>1</type>
|
<type>2</type>
|
||||||
<locationURI>FREERTOS_ROOT/Demo/CORTEX_MPS2_QEMU_IAR_GCC/IntQueueTimer.c</locationURI>
|
<locationURI>virtual:/virtual</locationURI>
|
||||||
</link>
|
|
||||||
<link>
|
|
||||||
<name>Source/IntQueueTimer.h</name>
|
|
||||||
<type>1</type>
|
|
||||||
<locationURI>FREERTOS_ROOT/Demo/CORTEX_MPS2_QEMU_IAR_GCC/IntQueueTimer.h</locationURI>
|
|
||||||
</link>
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>Source/main.c</name>
|
<name>Source/main.c</name>
|
||||||
|
|
@ -61,14 +56,29 @@
|
||||||
<locationURI>FREERTOS_ROOT/Demo/CORTEX_MPS2_QEMU_IAR_GCC/main.c</locationURI>
|
<locationURI>FREERTOS_ROOT/Demo/CORTEX_MPS2_QEMU_IAR_GCC/main.c</locationURI>
|
||||||
</link>
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>Source/main_blinky.c</name>
|
<name>Source/Blinky_Demo/main_blinky.c</name>
|
||||||
<type>1</type>
|
<type>1</type>
|
||||||
<locationURI>FREERTOS_ROOT/Demo/CORTEX_MPS2_QEMU_IAR_GCC/main_blinky.c</locationURI>
|
<locationURI>PARENT-2-PROJECT_LOC/main_blinky.c</locationURI>
|
||||||
</link>
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>Source/main_full.c</name>
|
<name>Source/Full_Demo/CommonDemoSource</name>
|
||||||
|
<type>2</type>
|
||||||
|
<locationURI>FREERTOS_ROOT/Demo/Common/Minimal</locationURI>
|
||||||
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>Source/Full_Demo/IntQueueTimer.c</name>
|
||||||
<type>1</type>
|
<type>1</type>
|
||||||
<locationURI>FREERTOS_ROOT/Demo/CORTEX_MPS2_QEMU_IAR_GCC/main_full.c</locationURI>
|
<locationURI>PARENT-2-PROJECT_LOC/IntQueueTimer.c</locationURI>
|
||||||
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>Source/Full_Demo/IntQueueTimer.h</name>
|
||||||
|
<type>1</type>
|
||||||
|
<locationURI>PARENT-2-PROJECT_LOC/IntQueueTimer.h</locationURI>
|
||||||
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>Source/Full_Demo/main_full.c</name>
|
||||||
|
<type>1</type>
|
||||||
|
<locationURI>PARENT-2-PROJECT_LOC/main_full.c</locationURI>
|
||||||
</link>
|
</link>
|
||||||
</linkedResources>
|
</linkedResources>
|
||||||
<filteredResources>
|
<filteredResources>
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ MAKE = make
|
||||||
|
|
||||||
|
|
||||||
CFLAGS += $(INCLUDE_DIRS) -nostartfiles -ffreestanding -mthumb -mcpu=cortex-m3 \
|
CFLAGS += $(INCLUDE_DIRS) -nostartfiles -ffreestanding -mthumb -mcpu=cortex-m3 \
|
||||||
-Wall -Wextra -g3 -O0 -ffunction-sections -fdata-sections \
|
-Wall -Wextra -g3 -Os -ffunction-sections -fdata-sections \
|
||||||
-MMD -MP -MF"$(@:%.o=%.d)" -MT $@
|
-MMD -MP -MF"$(@:%.o=%.d)" -MT $@
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
@ -79,6 +79,7 @@ SOURCE_FILES += (DEMO_PROJECT)/main.c
|
||||||
SOURCE_FILES += (DEMO_PROJECT)/main_blinky.c
|
SOURCE_FILES += (DEMO_PROJECT)/main_blinky.c
|
||||||
SOURCE_FILES += (DEMO_PROJECT)/main_full.c
|
SOURCE_FILES += (DEMO_PROJECT)/main_full.c
|
||||||
SOURCE_FILES += ./startup_gcc.c
|
SOURCE_FILES += ./startup_gcc.c
|
||||||
|
SOURCE_FILES += ./RegTest.c
|
||||||
# Lightweight print formatting to use in place of the heavier GCC equivalent.
|
# Lightweight print formatting to use in place of the heavier GCC equivalent.
|
||||||
SOURCE_FILES += ./printf-stdarg.c
|
SOURCE_FILES += ./printf-stdarg.c
|
||||||
|
|
||||||
|
|
|
||||||
187
FreeRTOS/Demo/CORTEX_MPS2_QEMU_IAR_GCC/build/gcc/RegTest.c
Normal file
187
FreeRTOS/Demo/CORTEX_MPS2_QEMU_IAR_GCC/build/gcc/RegTest.c
Normal file
|
|
@ -0,0 +1,187 @@
|
||||||
|
/*
|
||||||
|
* FreeRTOS V202212.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.
|
||||||
|
*
|
||||||
|
* https://www.FreeRTOS.org
|
||||||
|
* https://github.com/FreeRTOS
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "Reg test" tasks - These fill the registers with known values, then check
|
||||||
|
* that each register maintains its expected value for the lifetime of the
|
||||||
|
* task. Each task uses a different set of values. The reg test tasks execute
|
||||||
|
* with a very low priority, so get preempted very frequently. A register
|
||||||
|
* containing an unexpected value is indicative of an error in the context
|
||||||
|
* switching mechanism.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void vRegTest1Implementation( void ) __attribute__ ((naked));
|
||||||
|
void vRegTest2Implementation( void ) __attribute__ ((naked));
|
||||||
|
|
||||||
|
void vRegTest1Implementation( void )
|
||||||
|
{
|
||||||
|
__asm volatile
|
||||||
|
(
|
||||||
|
".extern ulRegTest1LoopCounter \n"
|
||||||
|
|
||||||
|
/* Fill the core registers with known values. */
|
||||||
|
"mov r0, #100 \n"
|
||||||
|
"mov r1, #101 \n"
|
||||||
|
"mov r2, #102 \n"
|
||||||
|
"mov r3, #103 \n"
|
||||||
|
"mov r4, #104 \n"
|
||||||
|
"mov r5, #105 \n"
|
||||||
|
"mov r6, #106 \n"
|
||||||
|
"mov r7, #107 \n"
|
||||||
|
"mov r8, #108 \n"
|
||||||
|
"mov r9, #109 \n"
|
||||||
|
"mov r10, #110 \n"
|
||||||
|
"mov r11, #111 \n"
|
||||||
|
"mov r12, #112 \n"
|
||||||
|
|
||||||
|
"reg1_loop: \n"
|
||||||
|
|
||||||
|
"cmp r0, #100 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r1, #101 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r2, #102 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r3, #103 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r4, #104 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r5, #105 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r6, #106 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r7, #107 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r8, #108 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r9, #109 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r10, #110 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r11, #111 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
"cmp r12, #112 \n"
|
||||||
|
"bne reg1_error_loop \n"
|
||||||
|
|
||||||
|
/* Everything passed, increment the loop counter. */
|
||||||
|
"push { r0-r1 } \n"
|
||||||
|
"ldr r0, =ulRegTest1LoopCounter \n"
|
||||||
|
"ldr r1, [r0] \n"
|
||||||
|
"adds r1, r1, #1 \n"
|
||||||
|
"str r1, [r0] \n"
|
||||||
|
"pop { r0-r1 } \n"
|
||||||
|
|
||||||
|
/* Start again. */
|
||||||
|
"b reg1_loop \n"
|
||||||
|
|
||||||
|
"reg1_error_loop: \n"
|
||||||
|
/* If this line is hit then there was an error in a core register value.
|
||||||
|
The loop ensures the loop counter stops incrementing. */
|
||||||
|
"b reg1_error_loop \n"
|
||||||
|
"nop \n"
|
||||||
|
); /* __asm volatile. */
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vRegTest2Implementation( void )
|
||||||
|
{
|
||||||
|
__asm volatile
|
||||||
|
(
|
||||||
|
".extern ulRegTest2LoopCounter \n"
|
||||||
|
|
||||||
|
/* Set all the core registers to known values. */
|
||||||
|
"mov r0, #-1 \n"
|
||||||
|
"mov r1, #1 \n"
|
||||||
|
"mov r2, #2 \n"
|
||||||
|
"mov r3, #3 \n"
|
||||||
|
"mov r4, #4 \n"
|
||||||
|
"mov r5, #5 \n"
|
||||||
|
"mov r6, #6 \n"
|
||||||
|
"mov r7, #7 \n"
|
||||||
|
"mov r8, #8 \n"
|
||||||
|
"mov r9, #9 \n"
|
||||||
|
"mov r10, #10 \n"
|
||||||
|
"mov r11, #11 \n"
|
||||||
|
"mov r12, #12 \n"
|
||||||
|
|
||||||
|
"reg2_loop : \n"
|
||||||
|
|
||||||
|
"cmp r0, #-1 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r1, #1 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r2, #2 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r3, #3 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r4, #4 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r5, #5 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r6, #6 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r7, #7 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r8, #8 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r9, #9 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r10, #10 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r11, #11 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
"cmp r12, #12 \n"
|
||||||
|
"bne reg2_error_loop \n"
|
||||||
|
|
||||||
|
/* Increment the loop counter to indicate this test is still functioning
|
||||||
|
correctly. */
|
||||||
|
"push { r0-r1 } \n"
|
||||||
|
"ldr r0, =ulRegTest2LoopCounter \n"
|
||||||
|
"ldr r1, [r0] \n"
|
||||||
|
"adds r1, r1, #1 \n"
|
||||||
|
"str r1, [r0] \n"
|
||||||
|
|
||||||
|
/* Yield to increase test coverage. */
|
||||||
|
"movs r0, #0x01 \n"
|
||||||
|
"ldr r1, =0xe000ed04 \n" /*NVIC_INT_CTRL */
|
||||||
|
"lsl r0, r0, #28 \n" /* Shift to PendSV bit */
|
||||||
|
"str r0, [r1] \n"
|
||||||
|
"dsb \n"
|
||||||
|
|
||||||
|
"pop { r0-r1 } \n"
|
||||||
|
|
||||||
|
/* Start again. */
|
||||||
|
"b reg2_loop \n"
|
||||||
|
|
||||||
|
"reg2_error_loop: \n"
|
||||||
|
/* If this line is hit then there was an error in a core register value.
|
||||||
|
This loop ensures the loop counter variable stops incrementing. */
|
||||||
|
"b reg2_error_loop \n"
|
||||||
|
|
||||||
|
); /* __asm volatile */
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project>
|
<project>
|
||||||
<fileVersion>3</fileVersion>
|
<fileVersion>4</fileVersion>
|
||||||
<configuration>
|
<configuration>
|
||||||
<name>Debug</name>
|
<name>Debug</name>
|
||||||
<toolchain>
|
<toolchain>
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<name>General</name>
|
<name>General</name>
|
||||||
<archiveVersion>3</archiveVersion>
|
<archiveVersion>3</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>33</version>
|
<version>36</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGLastSavedByProductVersion</name>
|
<name>OGLastSavedByProductVersion</name>
|
||||||
<state>9.10.2.39304</state>
|
<state>9.50.1.69462</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGChipSelectEditMenu</name>
|
<name>OGChipSelectEditMenu</name>
|
||||||
|
|
@ -98,7 +98,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GBECoreSlave</name>
|
<name>GBECoreSlave</name>
|
||||||
<version>30</version>
|
<version>33</version>
|
||||||
<state>38</state>
|
<state>38</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
|
|
@ -115,7 +115,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CoreVariant</name>
|
<name>CoreVariant</name>
|
||||||
<version>30</version>
|
<version>33</version>
|
||||||
<state>38</state>
|
<state>38</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
|
|
@ -138,7 +138,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GFPUCoreSlave2</name>
|
<name>GFPUCoreSlave2</name>
|
||||||
<version>30</version>
|
<version>33</version>
|
||||||
<state>38</state>
|
<state>38</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
|
|
@ -199,13 +199,30 @@
|
||||||
<name>OG_32_64Device</name>
|
<name>OG_32_64Device</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>BuildFilesPath</name>
|
||||||
|
<state>Debug</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>PointerAuthentication</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>FPU64</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OG_32_64DeviceCoreSlave</name>
|
||||||
|
<version>33</version>
|
||||||
|
<state>38</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ICCARM</name>
|
<name>ICCARM</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>37</version>
|
<version>38</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
|
@ -451,13 +468,21 @@
|
||||||
<name>CCStackProtection</name>
|
<name>CCStackProtection</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCPointerAutentiction</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCBranchTargetIdentification</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>AARM</name>
|
<name>AARM</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>11</version>
|
<version>12</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
|
@ -617,6 +642,10 @@
|
||||||
<name>PreInclude</name>
|
<name>PreInclude</name>
|
||||||
<state></state>
|
<state></state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>A_32_64Device</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
|
@ -659,19 +688,11 @@
|
||||||
<buildSequence>inputOutputBased</buildSequence>
|
<buildSequence>inputOutputBased</buildSequence>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
|
||||||
<name>BUILDACTION</name>
|
|
||||||
<archiveVersion>1</archiveVersion>
|
|
||||||
<data>
|
|
||||||
<prebuild></prebuild>
|
|
||||||
<postbuild></postbuild>
|
|
||||||
</data>
|
|
||||||
</settings>
|
|
||||||
<settings>
|
<settings>
|
||||||
<name>ILINK</name>
|
<name>ILINK</name>
|
||||||
<archiveVersion>0</archiveVersion>
|
<archiveVersion>0</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>25</version>
|
<version>27</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
|
@ -1023,6 +1044,22 @@
|
||||||
<name>IlinkDemangle</name>
|
<name>IlinkDemangle</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IlinkWrapperFileEnable</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IlinkWrapperFile</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IlinkProcessor</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IlinkFpuProcessor</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
|
@ -1046,6 +1083,11 @@
|
||||||
</option>
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
|
<settings>
|
||||||
|
<name>BUILDACTION</name>
|
||||||
|
<archiveVersion>2</archiveVersion>
|
||||||
|
<data />
|
||||||
|
</settings>
|
||||||
</configuration>
|
</configuration>
|
||||||
<group>
|
<group>
|
||||||
<name>Blinky Demo</name>
|
<name>Blinky Demo</name>
|
||||||
|
|
@ -1208,6 +1250,9 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\main_full.c</name>
|
<name>$PROJ_DIR$\..\..\main_full.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\RegTest.S</name>
|
||||||
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<name>System files</name>
|
<name>System files</name>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project>
|
<project>
|
||||||
<fileVersion>3</fileVersion>
|
<fileVersion>4</fileVersion>
|
||||||
<configuration>
|
<configuration>
|
||||||
<name>Debug</name>
|
<name>Debug</name>
|
||||||
<toolchain>
|
<toolchain>
|
||||||
|
|
@ -9,9 +9,9 @@
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<settings>
|
<settings>
|
||||||
<name>C-STAT</name>
|
<name>C-STAT</name>
|
||||||
<archiveVersion>515</archiveVersion>
|
<archiveVersion>518</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>515</version>
|
<version>518</version>
|
||||||
<cstatargs>
|
<cstatargs>
|
||||||
<useExtraArgs>0</useExtraArgs>
|
<useExtraArgs>0</useExtraArgs>
|
||||||
<extraArgs></extraArgs>
|
<extraArgs></extraArgs>
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
<outputDir>Debug\C-STAT</outputDir>
|
<outputDir>Debug\C-STAT</outputDir>
|
||||||
</cstatargs>
|
</cstatargs>
|
||||||
<cstat_settings>
|
<cstat_settings>
|
||||||
<cstat_version>2.3.1</cstat_version>
|
<cstat_version>2.6.0</cstat_version>
|
||||||
<checks_tree>
|
<checks_tree>
|
||||||
<package enabled="true" name="STDCHECKS">
|
<package enabled="true" name="STDCHECKS">
|
||||||
<group enabled="true" name="ARR">
|
<group enabled="true" name="ARR">
|
||||||
|
|
@ -356,6 +356,7 @@
|
||||||
<check enabled="true" name="CERT-ERR30-C_b" />
|
<check enabled="true" name="CERT-ERR30-C_b" />
|
||||||
<check enabled="true" name="CERT-ERR30-C_c" />
|
<check enabled="true" name="CERT-ERR30-C_c" />
|
||||||
<check enabled="true" name="CERT-ERR30-C_d" />
|
<check enabled="true" name="CERT-ERR30-C_d" />
|
||||||
|
<check enabled="true" name="CERT-ERR30-C_e" />
|
||||||
<check enabled="true" name="CERT-ERR32-C" />
|
<check enabled="true" name="CERT-ERR32-C" />
|
||||||
<check enabled="true" name="CERT-ERR33-C_a" />
|
<check enabled="true" name="CERT-ERR33-C_a" />
|
||||||
<check enabled="true" name="CERT-ERR33-C_b" />
|
<check enabled="true" name="CERT-ERR33-C_b" />
|
||||||
|
|
@ -798,6 +799,7 @@
|
||||||
<check enabled="false" name="MISRAC2012-Dir-4.11_h" />
|
<check enabled="false" name="MISRAC2012-Dir-4.11_h" />
|
||||||
<check enabled="false" name="MISRAC2012-Dir-4.11_i" />
|
<check enabled="false" name="MISRAC2012-Dir-4.11_i" />
|
||||||
<check enabled="false" name="MISRAC2012-Dir-4.12" />
|
<check enabled="false" name="MISRAC2012-Dir-4.12" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Dir-4.13_a" />
|
||||||
<check enabled="true" name="MISRAC2012-Dir-4.13_b" />
|
<check enabled="true" name="MISRAC2012-Dir-4.13_b" />
|
||||||
<check enabled="true" name="MISRAC2012-Dir-4.13_c" />
|
<check enabled="true" name="MISRAC2012-Dir-4.13_c" />
|
||||||
<check enabled="true" name="MISRAC2012-Dir-4.13_d" />
|
<check enabled="true" name="MISRAC2012-Dir-4.13_d" />
|
||||||
|
|
@ -817,6 +819,7 @@
|
||||||
<check enabled="true" name="MISRAC2012-Dir-4.14_j" />
|
<check enabled="true" name="MISRAC2012-Dir-4.14_j" />
|
||||||
<check enabled="true" name="MISRAC2012-Dir-4.14_l" />
|
<check enabled="true" name="MISRAC2012-Dir-4.14_l" />
|
||||||
<check enabled="true" name="MISRAC2012-Dir-4.14_m" />
|
<check enabled="true" name="MISRAC2012-Dir-4.14_m" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Dir-4.15" />
|
||||||
</group>
|
</group>
|
||||||
<group enabled="true" name="MISRAC2012-Rule-1">
|
<group enabled="true" name="MISRAC2012-Rule-1">
|
||||||
<check enabled="true" name="MISRAC2012-Rule-1.3_a" />
|
<check enabled="true" name="MISRAC2012-Rule-1.3_a" />
|
||||||
|
|
@ -830,6 +833,7 @@
|
||||||
<check enabled="true" name="MISRAC2012-Rule-1.3_i" />
|
<check enabled="true" name="MISRAC2012-Rule-1.3_i" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-1.3_j" />
|
<check enabled="true" name="MISRAC2012-Rule-1.3_j" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-1.3_k" />
|
<check enabled="true" name="MISRAC2012-Rule-1.3_k" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-1.3_l" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-1.3_m" />
|
<check enabled="true" name="MISRAC2012-Rule-1.3_m" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-1.3_n" />
|
<check enabled="true" name="MISRAC2012-Rule-1.3_n" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-1.3_o" />
|
<check enabled="true" name="MISRAC2012-Rule-1.3_o" />
|
||||||
|
|
@ -840,7 +844,15 @@
|
||||||
<check enabled="true" name="MISRAC2012-Rule-1.3_t" />
|
<check enabled="true" name="MISRAC2012-Rule-1.3_t" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-1.3_u" />
|
<check enabled="true" name="MISRAC2012-Rule-1.3_u" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-1.3_v" />
|
<check enabled="true" name="MISRAC2012-Rule-1.3_v" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-1.3_w" />
|
<check enabled="true" name="MISRAC2012-Rule-1.4_a" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-1.4_b" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-1.5_a" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-1.5_b" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-1.5_c" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-1.5_d" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-1.5_e" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-1.5_f" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-1.5_g" />
|
||||||
</group>
|
</group>
|
||||||
<group enabled="true" name="MISRAC2012-Rule-2">
|
<group enabled="true" name="MISRAC2012-Rule-2">
|
||||||
<check enabled="true" name="MISRAC2012-Rule-2.1_a" />
|
<check enabled="true" name="MISRAC2012-Rule-2.1_a" />
|
||||||
|
|
@ -876,6 +888,7 @@
|
||||||
<group enabled="true" name="MISRAC2012-Rule-6">
|
<group enabled="true" name="MISRAC2012-Rule-6">
|
||||||
<check enabled="true" name="MISRAC2012-Rule-6.1" />
|
<check enabled="true" name="MISRAC2012-Rule-6.1" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-6.2" />
|
<check enabled="true" name="MISRAC2012-Rule-6.2" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-6.3" />
|
||||||
</group>
|
</group>
|
||||||
<group enabled="true" name="MISRAC2012-Rule-7">
|
<group enabled="true" name="MISRAC2012-Rule-7">
|
||||||
<check enabled="true" name="MISRAC2012-Rule-7.1" />
|
<check enabled="true" name="MISRAC2012-Rule-7.1" />
|
||||||
|
|
@ -883,6 +896,7 @@
|
||||||
<check enabled="true" name="MISRAC2012-Rule-7.3" />
|
<check enabled="true" name="MISRAC2012-Rule-7.3" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-7.4_a" />
|
<check enabled="true" name="MISRAC2012-Rule-7.4_a" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-7.4_b" />
|
<check enabled="true" name="MISRAC2012-Rule-7.4_b" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-7.5" />
|
||||||
</group>
|
</group>
|
||||||
<group enabled="true" name="MISRAC2012-Rule-8">
|
<group enabled="true" name="MISRAC2012-Rule-8">
|
||||||
<check enabled="true" name="MISRAC2012-Rule-8.1" />
|
<check enabled="true" name="MISRAC2012-Rule-8.1" />
|
||||||
|
|
@ -900,6 +914,9 @@
|
||||||
<check enabled="true" name="MISRAC2012-Rule-8.12" />
|
<check enabled="true" name="MISRAC2012-Rule-8.12" />
|
||||||
<check enabled="false" name="MISRAC2012-Rule-8.13" />
|
<check enabled="false" name="MISRAC2012-Rule-8.13" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-8.14" />
|
<check enabled="true" name="MISRAC2012-Rule-8.14" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-8.15" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-8.16" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-8.17" />
|
||||||
</group>
|
</group>
|
||||||
<group enabled="true" name="MISRAC2012-Rule-9">
|
<group enabled="true" name="MISRAC2012-Rule-9">
|
||||||
<check enabled="true" name="MISRAC2012-Rule-9.1_a" />
|
<check enabled="true" name="MISRAC2012-Rule-9.1_a" />
|
||||||
|
|
@ -922,6 +939,7 @@
|
||||||
<check enabled="true" name="MISRAC2012-Rule-10.1_R6" />
|
<check enabled="true" name="MISRAC2012-Rule-10.1_R6" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-10.1_R7" />
|
<check enabled="true" name="MISRAC2012-Rule-10.1_R7" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-10.1_R8" />
|
<check enabled="true" name="MISRAC2012-Rule-10.1_R8" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-10.1_R10" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-10.2" />
|
<check enabled="true" name="MISRAC2012-Rule-10.2" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-10.3" />
|
<check enabled="true" name="MISRAC2012-Rule-10.3" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-10.4_a" />
|
<check enabled="true" name="MISRAC2012-Rule-10.4_a" />
|
||||||
|
|
@ -946,6 +964,7 @@
|
||||||
<check enabled="false" name="MISRAC2012-Rule-12.1" />
|
<check enabled="false" name="MISRAC2012-Rule-12.1" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-12.2" />
|
<check enabled="true" name="MISRAC2012-Rule-12.2" />
|
||||||
<check enabled="false" name="MISRAC2012-Rule-12.3" />
|
<check enabled="false" name="MISRAC2012-Rule-12.3" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-12.4" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-12.5" />
|
<check enabled="true" name="MISRAC2012-Rule-12.5" />
|
||||||
</group>
|
</group>
|
||||||
<group enabled="true" name="MISRAC2012-Rule-13">
|
<group enabled="true" name="MISRAC2012-Rule-13">
|
||||||
|
|
@ -1002,6 +1021,11 @@
|
||||||
<check enabled="true" name="MISRAC2012-Rule-17.6" />
|
<check enabled="true" name="MISRAC2012-Rule-17.6" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-17.7" />
|
<check enabled="true" name="MISRAC2012-Rule-17.7" />
|
||||||
<check enabled="false" name="MISRAC2012-Rule-17.8" />
|
<check enabled="false" name="MISRAC2012-Rule-17.8" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-17.9" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-17.10" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-17.11" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-17.12" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-17.13" />
|
||||||
</group>
|
</group>
|
||||||
<group enabled="true" name="MISRAC2012-Rule-18">
|
<group enabled="true" name="MISRAC2012-Rule-18">
|
||||||
<check enabled="true" name="MISRAC2012-Rule-18.1_a" />
|
<check enabled="true" name="MISRAC2012-Rule-18.1_a" />
|
||||||
|
|
@ -1018,6 +1042,7 @@
|
||||||
<check enabled="true" name="MISRAC2012-Rule-18.6_d" />
|
<check enabled="true" name="MISRAC2012-Rule-18.6_d" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-18.7" />
|
<check enabled="true" name="MISRAC2012-Rule-18.7" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-18.8" />
|
<check enabled="true" name="MISRAC2012-Rule-18.8" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-18.9" />
|
||||||
</group>
|
</group>
|
||||||
<group enabled="true" name="MISRAC2012-Rule-19">
|
<group enabled="true" name="MISRAC2012-Rule-19">
|
||||||
<check enabled="true" name="MISRAC2012-Rule-19.1" />
|
<check enabled="true" name="MISRAC2012-Rule-19.1" />
|
||||||
|
|
@ -1048,6 +1073,7 @@
|
||||||
<check enabled="true" name="MISRAC2012-Rule-21.11" />
|
<check enabled="true" name="MISRAC2012-Rule-21.11" />
|
||||||
<check enabled="false" name="MISRAC2012-Rule-21.12_a" />
|
<check enabled="false" name="MISRAC2012-Rule-21.12_a" />
|
||||||
<check enabled="false" name="MISRAC2012-Rule-21.12_b" />
|
<check enabled="false" name="MISRAC2012-Rule-21.12_b" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-21.12_c" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-21.13" />
|
<check enabled="true" name="MISRAC2012-Rule-21.13" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-21.14" />
|
<check enabled="true" name="MISRAC2012-Rule-21.14" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-21.15" />
|
<check enabled="true" name="MISRAC2012-Rule-21.15" />
|
||||||
|
|
@ -1063,6 +1089,10 @@
|
||||||
<check enabled="true" name="MISRAC2012-Rule-21.19_a" />
|
<check enabled="true" name="MISRAC2012-Rule-21.19_a" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-21.19_b" />
|
<check enabled="true" name="MISRAC2012-Rule-21.19_b" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-21.20" />
|
<check enabled="true" name="MISRAC2012-Rule-21.20" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-21.21" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-21.22" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-21.23" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-21.24" />
|
||||||
</group>
|
</group>
|
||||||
<group enabled="true" name="MISRAC2012-Rule-22">
|
<group enabled="true" name="MISRAC2012-Rule-22">
|
||||||
<check enabled="true" name="MISRAC2012-Rule-22.1_a" />
|
<check enabled="true" name="MISRAC2012-Rule-22.1_a" />
|
||||||
|
|
@ -1081,6 +1111,16 @@
|
||||||
<check enabled="true" name="MISRAC2012-Rule-22.9" />
|
<check enabled="true" name="MISRAC2012-Rule-22.9" />
|
||||||
<check enabled="true" name="MISRAC2012-Rule-22.10" />
|
<check enabled="true" name="MISRAC2012-Rule-22.10" />
|
||||||
</group>
|
</group>
|
||||||
|
<group enabled="true" name="MISRAC2012-Rule-23">
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-23.1" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-23.2" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-23.3" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-23.4" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-23.5" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-23.6" />
|
||||||
|
<check enabled="false" name="MISRAC2012-Rule-23.7" />
|
||||||
|
<check enabled="true" name="MISRAC2012-Rule-23.8" />
|
||||||
|
</group>
|
||||||
</package>
|
</package>
|
||||||
<package enabled="false" name="MISRAC++2008">
|
<package enabled="false" name="MISRAC++2008">
|
||||||
<group enabled="true" name="MISRAC++2008-0-1">
|
<group enabled="true" name="MISRAC++2008-0-1">
|
||||||
|
|
@ -1423,7 +1463,7 @@
|
||||||
<group>
|
<group>
|
||||||
<name>Blinky Demo</name>
|
<name>Blinky Demo</name>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\main_blinky.c</name>
|
<name>$PROJ_DIR$\..\..\main_blinky.c</name>
|
||||||
</file>
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
|
|
@ -1431,25 +1471,25 @@
|
||||||
<group>
|
<group>
|
||||||
<name>include</name>
|
<name>include</name>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\include\event_groups.h</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\include\event_groups.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\include\message_buffer.h</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\include\message_buffer.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\include\queue.h</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\include\queue.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\include\semphr.h</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\include\semphr.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\include\stream_buffer.h</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\include\stream_buffer.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\include\task.h</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\include\task.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\include\timers.h</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\include\timers.h</name>
|
||||||
</file>
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
|
|
@ -1459,37 +1499,37 @@
|
||||||
<group>
|
<group>
|
||||||
<name>ARM_CM3</name>
|
<name>ARM_CM3</name>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3\port.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\portable\IAR\ARM_CM3\port.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3\portasm.s</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\portable\IAR\ARM_CM3\portasm.s</name>
|
||||||
</file>
|
</file>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<name>MemMang</name>
|
<name>MemMang</name>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\portable\MemMang\heap_4.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\portable\MemMang\heap_4.c</name>
|
||||||
</file>
|
</file>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\event_groups.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\event_groups.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\list.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\list.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\queue.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\queue.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\stream_buffer.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\stream_buffer.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\tasks.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\tasks.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\Source\timers.c</name>
|
<name>$PROJ_DIR$\..\..\..\..\Source\timers.c</name>
|
||||||
</file>
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
|
|
@ -1497,89 +1537,92 @@
|
||||||
<group>
|
<group>
|
||||||
<name>Standard Demo Tasks</name>
|
<name>Standard Demo Tasks</name>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\AbortDelay.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\AbortDelay.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\BlockQ.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\BlockQ.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\blocktim.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\blocktim.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\countsem.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\countsem.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\death.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\death.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\dynamic.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\dynamic.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\EventGroupsDemo.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\EventGroupsDemo.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\GenQTest.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\GenQTest.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\integer.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\integer.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\IntQueue.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\IntQueue.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\IntQueueTimer.c</name>
|
<name>$PROJ_DIR$\..\..\IntQueueTimer.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\IntSemTest.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\IntSemTest.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\MessageBufferAMP.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\MessageBufferAMP.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\MessageBufferDemo.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\MessageBufferDemo.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\PollQ.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\PollQ.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\QPeek.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\QPeek.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\QueueOverwrite.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\QueueOverwrite.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\QueueSet.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\QueueSet.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\QueueSetPolling.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\QueueSetPolling.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\recmutex.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\recmutex.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\semtest.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\semtest.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\StaticAllocation.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\StaticAllocation.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\StreamBufferDemo.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\StreamBufferDemo.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\StreamBufferInterrupt.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\StreamBufferInterrupt.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\TaskNotify.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\TaskNotify.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\TaskNotifyArray.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\TaskNotifyArray.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\TimerDemo.c</name>
|
<name>$PROJ_DIR$\..\..\..\Common\Minimal\TimerDemo.c</name>
|
||||||
</file>
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\main_full.c</name>
|
<name>$PROJ_DIR$\..\..\main_full.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\RegTest.S</name>
|
||||||
</file>
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
|
|
@ -1589,9 +1632,9 @@
|
||||||
</file>
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\FreeRTOSConfig.h</name>
|
<name>$PROJ_DIR$\..\..\FreeRTOSConfig.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\main.c</name>
|
<name>$PROJ_DIR$\..\..\main.c</name>
|
||||||
</file>
|
</file>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
||||||
181
FreeRTOS/Demo/CORTEX_MPS2_QEMU_IAR_GCC/build/iar/RegTest.S
Normal file
181
FreeRTOS/Demo/CORTEX_MPS2_QEMU_IAR_GCC/build/iar/RegTest.S
Normal file
|
|
@ -0,0 +1,181 @@
|
||||||
|
/*
|
||||||
|
* FreeRTOS V202212.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.
|
||||||
|
*
|
||||||
|
* https://www.FreeRTOS.org
|
||||||
|
* https://github.com/FreeRTOS
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <FreeRTOSConfig.h>
|
||||||
|
|
||||||
|
|
||||||
|
RSEG CODE:CODE(2)
|
||||||
|
thumb
|
||||||
|
|
||||||
|
EXTERN ulRegTest1LoopCounter
|
||||||
|
EXTERN ulRegTest2LoopCounter
|
||||||
|
|
||||||
|
PUBLIC vRegTest1Implementation
|
||||||
|
PUBLIC vRegTest2Implementation
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
vRegTest1Implementation
|
||||||
|
|
||||||
|
/* Fill the core registers with known values. */
|
||||||
|
mov r0, #100
|
||||||
|
mov r1, #101
|
||||||
|
mov r2, #102
|
||||||
|
mov r3, #103
|
||||||
|
mov r4, #104
|
||||||
|
mov r5, #105
|
||||||
|
mov r6, #106
|
||||||
|
mov r7, #107
|
||||||
|
mov r8, #108
|
||||||
|
mov r9, #109
|
||||||
|
mov r10, #110
|
||||||
|
mov r11, #111
|
||||||
|
mov r12, #112
|
||||||
|
|
||||||
|
reg1_loop:
|
||||||
|
|
||||||
|
cmp r0, #100
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r1, #101
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r2, #102
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r3, #103
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r4, #104
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r5, #105
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r6, #106
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r7, #107
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r8, #108
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r9, #109
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r10, #110
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r11, #111
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r12, #112
|
||||||
|
bne reg1_error_loop
|
||||||
|
|
||||||
|
/* Everything passed, increment the loop counter. */
|
||||||
|
push { r0-r1 }
|
||||||
|
ldr r0, =ulRegTest1LoopCounter
|
||||||
|
ldr r1, [r0]
|
||||||
|
adds r1, r1, #1
|
||||||
|
str r1, [r0]
|
||||||
|
pop { r0-r1 }
|
||||||
|
|
||||||
|
/* Start again. */
|
||||||
|
b reg1_loop
|
||||||
|
|
||||||
|
reg1_error_loop:
|
||||||
|
/* If this line is hit then there was an error in a core register value.
|
||||||
|
The loop ensures the loop counter stops incrementing. */
|
||||||
|
b reg1_error_loop
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
vRegTest2Implementation
|
||||||
|
|
||||||
|
/* Set all the core registers to known values. */
|
||||||
|
mov r0, #-1
|
||||||
|
mov r1, #1
|
||||||
|
mov r2, #2
|
||||||
|
mov r3, #3
|
||||||
|
mov r4, #4
|
||||||
|
mov r5, #5
|
||||||
|
mov r6, #6
|
||||||
|
mov r7, #7
|
||||||
|
mov r8, #8
|
||||||
|
mov r9, #9
|
||||||
|
mov r10, #10
|
||||||
|
mov r11, #11
|
||||||
|
mov r12, #12
|
||||||
|
|
||||||
|
reg2_loop:
|
||||||
|
|
||||||
|
cmp r0, #-1
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r1, #1
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r2, #2
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r3, #3
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r4, #4
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r5, #5
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r6, #6
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r7, #7
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r8, #8
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r9, #9
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r10, #10
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r11, #11
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r12, #12
|
||||||
|
bne reg2_error_loop
|
||||||
|
|
||||||
|
/* Increment the loop counter to indicate this test is still functioning
|
||||||
|
correctly. */
|
||||||
|
push { r0-r1 }
|
||||||
|
ldr r0, =ulRegTest2LoopCounter
|
||||||
|
ldr r1, [r0]
|
||||||
|
adds r1, r1, #1
|
||||||
|
str r1, [r0]
|
||||||
|
|
||||||
|
/* Yield to increase test coverage. */
|
||||||
|
movs r0, #0x01
|
||||||
|
ldr r1, =0xe000ed04 /*NVIC_INT_CTRL */
|
||||||
|
lsl r0, r0, #28 /* Shift to PendSV bit */
|
||||||
|
str r0, [r1]
|
||||||
|
dsb
|
||||||
|
|
||||||
|
pop { r0-r1 }
|
||||||
|
|
||||||
|
/* Start again. */
|
||||||
|
b reg2_loop
|
||||||
|
|
||||||
|
reg2_error_loop:
|
||||||
|
/* If this line is hit then there was an error in a core register value.
|
||||||
|
This loop ensures the loop counter variable stops incrementing. */
|
||||||
|
b reg2_error_loop
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
|
@ -43,7 +43,7 @@
|
||||||
* Use the following commands to start the application running in a way that
|
* Use the following commands to start the application running in a way that
|
||||||
* enables the debugger to connect, omit the "-s -S" to run the project without
|
* enables the debugger to connect, omit the "-s -S" to run the project without
|
||||||
* the debugger:
|
* the debugger:
|
||||||
* qemu-system-arm -machine mps2-an385 -cpu cortex-m3 -kernel [path-to]/RTOSDemo.out -nographic -serial stdio -semihosting -semihosting-config enable=on,target=native -s -S
|
* qemu-system-arm -machine mps2-an385 -cpu cortex-m3 -kernel [path-to]/RTOSDemo.out -monitor none -nographic -serial stdio -s -S
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* FreeRTOS includes. */
|
/* FreeRTOS includes. */
|
||||||
|
|
|
||||||
|
|
@ -166,9 +166,9 @@ static void prvQueueSendTask( void * pvParameters )
|
||||||
for( ; ; )
|
for( ; ; )
|
||||||
{
|
{
|
||||||
/* Place this task in the blocked state until it is time to run again.
|
/* Place this task in the blocked state until it is time to run again.
|
||||||
* The block time is specified in ticks, pdMS_TO_TICKS() was used to
|
* The block time is specified in ticks, pdMS_TO_TICKS() was used to
|
||||||
* convert a time specified in milliseconds into a time specified in ticks.
|
* convert a time specified in milliseconds into a time specified in ticks.
|
||||||
* While in the Blocked state this task will not consume any CPU time. */
|
* While in the Blocked state this task will not consume any CPU time. */
|
||||||
vTaskDelayUntil( &xNextWakeTime, xBlockTime );
|
vTaskDelayUntil( &xNextWakeTime, xBlockTime );
|
||||||
|
|
||||||
/* Send to the queue - causing the queue receive task to unblock and
|
/* Send to the queue - causing the queue receive task to unblock and
|
||||||
|
|
|
||||||
|
|
@ -109,14 +109,40 @@
|
||||||
* constant is different depending on the compiler in use. */
|
* constant is different depending on the compiler in use. */
|
||||||
#define mainMESSAGE_BUFFER_STACK_SIZE ( configMINIMAL_STACK_SIZE + ( configMINIMAL_STACK_SIZE >> 1 ) )
|
#define mainMESSAGE_BUFFER_STACK_SIZE ( configMINIMAL_STACK_SIZE + ( configMINIMAL_STACK_SIZE >> 1 ) )
|
||||||
#define mainCHECK_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE + ( configMINIMAL_STACK_SIZE >> 1 ) )
|
#define mainCHECK_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE + ( configMINIMAL_STACK_SIZE >> 1 ) )
|
||||||
|
|
||||||
|
/* Parameters that are passed into the register check tasks solely for the
|
||||||
|
* purpose of ensuring parameters are passed into tasks correctly. */
|
||||||
|
#define mainREG_TEST_TASK_1_PARAMETER ( ( void * ) 0x12345678 )
|
||||||
|
#define mainREG_TEST_TASK_2_PARAMETER ( ( void * ) 0x87654321 )
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Register check tasks, and the tasks used to write over and check the contents
|
||||||
|
* of the FPU registers, as described at the top of this file. The nature of
|
||||||
|
* these files necessitates that they are written in an assembly file, but the
|
||||||
|
* entry points are kept in the C file for the convenience of checking the task
|
||||||
|
* parameter.
|
||||||
|
*/
|
||||||
|
static void prvRegTestTaskEntry1( void * pvParameters );
|
||||||
|
extern void vRegTest1Implementation( void );
|
||||||
|
static void prvRegTestTaskEntry2( void * pvParameters );
|
||||||
|
extern void vRegTest2Implementation( void );
|
||||||
|
|
||||||
/* The task that checks the operation of all the other standard demo tasks, as
|
/* The task that checks the operation of all the other standard demo tasks, as
|
||||||
* described at the top of this file. */
|
* described at the top of this file. */
|
||||||
static void prvCheckTask( void * pvParameters );
|
static void prvCheckTask( void * pvParameters );
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* The following two variables are used to communicate the status of the
|
||||||
|
* register test tasks to the check task. If the variables keep incrementing,
|
||||||
|
* then the register test tasks have not discovered any errors. If a variable
|
||||||
|
* stops incrementing, then an error has been found. */
|
||||||
|
volatile unsigned long ulRegTest1LoopCounter = 0UL, ulRegTest2LoopCounter = 0UL;
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void main_full( void )
|
void main_full( void )
|
||||||
{
|
{
|
||||||
/* Start the standard demo tasks. */
|
/* Start the standard demo tasks. */
|
||||||
|
|
@ -144,6 +170,15 @@ void main_full( void )
|
||||||
vStartStreamBufferInterruptDemo();
|
vStartStreamBufferInterruptDemo();
|
||||||
vStartInterruptSemaphoreTasks();
|
vStartInterruptSemaphoreTasks();
|
||||||
|
|
||||||
|
/* Create the register check tasks, as described at the top of this file */
|
||||||
|
xTaskCreate( prvRegTestTaskEntry1, /* Function that implements the task. */
|
||||||
|
"Reg1", /* Human readable name for the task - not used by the kernel but helps debugging. */
|
||||||
|
configMINIMAL_STACK_SIZE, /* Size of stack to allocate for the task - in words not bytes. */
|
||||||
|
mainREG_TEST_TASK_1_PARAMETER, /* A parameter passed into the task to check parameter passing is working correctly. */
|
||||||
|
tskIDLE_PRIORITY, /* Priority assigned to the task - must be between 0 (tskIDLE_PRIORITY) and (configMAX_PRIORITIES - 1). */
|
||||||
|
NULL ); /* Can be used to pass a handle to the create task out of the xTaskCreate() function. */
|
||||||
|
xTaskCreate( prvRegTestTaskEntry2, "Reg2", configMINIMAL_STACK_SIZE, mainREG_TEST_TASK_2_PARAMETER, tskIDLE_PRIORITY, NULL );
|
||||||
|
|
||||||
/* The suicide tasks must be created last as they need to know how many
|
/* The suicide tasks must be created last as they need to know how many
|
||||||
* tasks were running prior to their creation in order to ascertain whether
|
* tasks were running prior to their creation in order to ascertain whether
|
||||||
* or not the correct/expected number of tasks are running at any given time. */
|
* or not the correct/expected number of tasks are running at any given time. */
|
||||||
|
|
@ -168,6 +203,8 @@ void main_full( void )
|
||||||
static void prvCheckTask( void * pvParameters )
|
static void prvCheckTask( void * pvParameters )
|
||||||
{
|
{
|
||||||
static const char * pcMessage = "PASS";
|
static const char * pcMessage = "PASS";
|
||||||
|
unsigned long ulLastRegTest1Value = 0, ulLastRegTest2Value = 0;
|
||||||
|
|
||||||
const TickType_t xTaskPeriod = pdMS_TO_TICKS( 5000UL );
|
const TickType_t xTaskPeriod = pdMS_TO_TICKS( 5000UL );
|
||||||
TickType_t xPreviousWakeTime;
|
TickType_t xPreviousWakeTime;
|
||||||
extern uint32_t ulNestCount;
|
extern uint32_t ulNestCount;
|
||||||
|
|
@ -279,6 +316,19 @@ static void prvCheckTask( void * pvParameters )
|
||||||
{
|
{
|
||||||
pcMessage = "xAreInterruptSemaphoreTasksStillRunning() returned false";
|
pcMessage = "xAreInterruptSemaphoreTasksStillRunning() returned false";
|
||||||
}
|
}
|
||||||
|
else if( ulLastRegTest1Value == ulRegTest1LoopCounter )
|
||||||
|
{
|
||||||
|
/* Check that the register test 1 task is still running. */
|
||||||
|
pcMessage = "Error in RegTest 1";
|
||||||
|
}
|
||||||
|
else if( ulLastRegTest2Value == ulRegTest2LoopCounter )
|
||||||
|
{
|
||||||
|
/* Check that the register test 2 task is still running. */
|
||||||
|
pcMessage = "Error in RegTest 2";
|
||||||
|
}
|
||||||
|
|
||||||
|
ulLastRegTest1Value = ulRegTest1LoopCounter;
|
||||||
|
ulLastRegTest2Value = ulRegTest2LoopCounter;
|
||||||
|
|
||||||
/* It is normally not good to call printf() from an embedded system,
|
/* It is normally not good to call printf() from an embedded system,
|
||||||
* although it is ok in this simulated case. */
|
* although it is ok in this simulated case. */
|
||||||
|
|
@ -319,3 +369,40 @@ void vFullDemoTickHookFunction( void )
|
||||||
vInterruptSemaphorePeriodicTest();
|
vInterruptSemaphorePeriodicTest();
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvRegTestTaskEntry1( void * pvParameters )
|
||||||
|
{
|
||||||
|
/* Although the regtest task is written in assembler, its entry point is
|
||||||
|
* written in C for convenience of checking the task parameter is being passed
|
||||||
|
* in correctly. */
|
||||||
|
if( pvParameters == mainREG_TEST_TASK_1_PARAMETER )
|
||||||
|
{
|
||||||
|
/* Start the part of the test that is written in assembler. */
|
||||||
|
vRegTest1Implementation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The following line will only execute if the task parameter is found to
|
||||||
|
* be incorrect. The check task will detect that the regtest loop counter is
|
||||||
|
* not being incremented and flag an error. */
|
||||||
|
vTaskDelete( NULL );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvRegTestTaskEntry2( void * pvParameters )
|
||||||
|
{
|
||||||
|
/* Although the regtest task is written in assembler, its entry point is
|
||||||
|
* written in C for convenience of checking the task parameter is being passed
|
||||||
|
* in correctly. */
|
||||||
|
if( pvParameters == mainREG_TEST_TASK_2_PARAMETER )
|
||||||
|
{
|
||||||
|
/* Start the part of the test that is written in assembler. */
|
||||||
|
vRegTest2Implementation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The following line will only execute if the task parameter is found to
|
||||||
|
* be incorrect. The check task will detect that the regtest loop counter is
|
||||||
|
* not being incremented and flag an error. */
|
||||||
|
vTaskDelete( NULL );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue