]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/Keil_Specific/RegTest_Keil.s
Update version number to 8.1.2 after moving the defaulting of configUSE_PORT_OPTIMISE...
[freertos] / FreeRTOS / Demo / CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC / Keil_Specific / RegTest_Keil.s
1 ;/*\r
2 ;    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
3 ;\r
4 ;    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
5 ;\r
6 ;    ***************************************************************************\r
7 ;     *                                                                       *\r
8 ;     *    FreeRTOS provides completely free yet professionally developed,    *\r
9 ;     *    robust, strictly quality controlled, supported, and cross          *\r
10 ;     *    platform software that has become a de facto standard.             *\r
11 ;     *                                                                       *\r
12 ;     *    Help yourself get started quickly and support the FreeRTOS         *\r
13 ;     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
14 ;     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
15 ;     *                                                                       *\r
16 ;     *    Thank you!                                                         *\r
17 ;     *                                                                       *\r
18 ;    ***************************************************************************\r
19 ;\r
20 ;    This file is part of the FreeRTOS distribution.\r
21 ;\r
22 ;    FreeRTOS is free software; you can redistribute it and/or modify it under\r
23 ;    the terms of the GNU General Public License (version 2) as published by the\r
24 ;    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
25 ;\r
26 ;    >>! NOTE: The modification to the GPL is included to allow you to distribute\r
27 ;    >>! a combined work that includes FreeRTOS without being obliged to provide\r
28 ;    >>! the source code for proprietary components outside of the FreeRTOS\r
29 ;    >>! kernel.\r
30 ;\r
31 ;    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
32 ;    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
33 ;    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
34 ;    link: http://www.freertos.org/a00114.html\r
35 ;\r
36 ;    1 tab == 4 spaces!\r
37 ;\r
38 ;    ***************************************************************************\r
39 ;     *                                                                       *\r
40 ;     *    Having a problem?  Start by reading the FAQ "My application does   *\r
41 ;     *    not run, what could be wrong?"                                     *\r
42 ;     *                                                                       *\r
43 ;     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
44 ;     *                                                                       *\r
45 ;    ***************************************************************************\r
46 ;\r
47 ;    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
48 ;    license and Real Time Engineers Ltd. contact details.\r
49 ;\r
50 ;    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
51 ;    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
52 ;    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
53 ;\r
54 ;    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
55 ;    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
56 ;    licenses offer ticketed support, indemnification and middleware.\r
57 ;\r
58 ;    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
59 ;    engineered and independently SIL3 certified version for use in safety and\r
60 ;    mission critical applications that require provable dependability.\r
61 ;\r
62 ;    1 tab == 4 spaces!\r
63 ;*/\r
64 \r
65 ;/* \r
66 ; * "Reg test" tasks - These fill the registers with known values, then check\r
67 ; * that each register maintains its expected value for the lifetime of the\r
68 ; * task.  Each task uses a different set of values.  The reg test tasks execute\r
69 ; * with a very low priority, so get preempted very frequently.  A register\r
70 ; * containing an unexpected value is indicative of an error in the context\r
71 ; * switching mechanism.\r
72 ; */\r
73  \r
74         PRESERVE8\r
75         THUMB\r
76 \r
77 \r
78         IMPORT ulRegTest1LoopCounter\r
79         IMPORT ulRegTest2LoopCounter\r
80 \r
81         EXPORT vRegTest1Task\r
82         EXPORT vRegTest2Task\r
83 \r
84         AREA    |.text|, CODE, READONLY\r
85 \r
86 ;/*-----------------------------------------------------------*/\r
87 vRegTest1Task PROC\r
88 \r
89         ;/* Fill the core registers with known values.  This is only done once. */\r
90         movs r1, #101\r
91         movs r2, #102\r
92         movs r3, #103\r
93         movs r4, #104\r
94         movs r5, #105\r
95         movs r6, #106\r
96         movs r7, #107\r
97         movs r0, #108\r
98         mov      r8, r0\r
99         movs r0, #109\r
100         mov  r9, r0\r
101         movs r0, #110\r
102         mov      r10, r0\r
103         movs r0, #111\r
104         mov      r11, r0\r
105         movs r0, #112\r
106         mov  r12, r0\r
107         movs r0, #100\r
108 \r
109 reg1_loop\r
110         ;/* Repeatedly check that each register still contains the value written to\r
111         ;it when the task started. */\r
112         cmp     r0, #100\r
113         bne     reg1_error_loop\r
114         cmp     r1, #101\r
115         bne     reg1_error_loop\r
116         cmp     r2, #102\r
117         bne     reg1_error_loop\r
118         cmp r3, #103\r
119         bne     reg1_error_loop\r
120         cmp     r4, #104\r
121         bne     reg1_error_loop\r
122         cmp     r5, #105\r
123         bne     reg1_error_loop\r
124         cmp     r6, #106\r
125         bne     reg1_error_loop\r
126         cmp     r7, #107\r
127         bne     reg1_error_loop\r
128         movs r0, #108\r
129         cmp     r8, r0\r
130         bne     reg1_error_loop\r
131         movs r0, #109\r
132         cmp     r9, r0\r
133         bne     reg1_error_loop\r
134         movs r0, #110\r
135         cmp     r10, r0\r
136         bne     reg1_error_loop\r
137         movs r0, #111\r
138         cmp     r11, r0\r
139         bne     reg1_error_loop\r
140         movs r0, #112\r
141         cmp     r12, r0\r
142         bne     reg1_error_loop\r
143 \r
144         ;/* Everything passed, increment the loop counter. */\r
145         push { r1 }\r
146         ldr     r0, =ulRegTest1LoopCounter\r
147         ldr r1, [r0]\r
148         adds r1, r1, #1\r
149         str r1, [r0]\r
150 \r
151         ;/* Yield to increase test coverage. */\r
152         movs r0, #0x01\r
153         ldr r1, =0xe000ed04 ; NVIC_INT_CTRL\r
154         lsls r0 ,r0, #28 ; Shift to PendSV bit\r
155         str r0, [r1]\r
156         dsb\r
157         pop { r1 }\r
158 \r
159         ;/* Start again. */\r
160         movs r0, #100\r
161 \r
162         b reg1_loop\r
163 \r
164 reg1_error_loop\r
165         ;/* If this line is hit then there was an error in a core register value.\r
166         ;The loop ensures the loop counter stops incrementing. */\r
167         b reg1_error_loop\r
168         nop\r
169         ENDP\r
170 \r
171 \r
172 \r
173 vRegTest2Task PROC\r
174 \r
175         ;/* Fill the core registers with known values.  This is only done once. */\r
176         movs r1, #1\r
177         movs r2, #2\r
178         movs r3, #3\r
179         movs r4, #4\r
180         movs r5, #5\r
181         movs r6, #6\r
182         movs r7, #7\r
183         movs r0, #8\r
184         mov     r8, r0\r
185         movs r0, #9\r
186         mov r9, r0\r
187         movs r0, #10\r
188         mov     r10, r0\r
189         movs r0, #11\r
190         mov     r11, r0\r
191         movs r0, #12\r
192         mov r12, r0\r
193         movs r0, #10\r
194 \r
195 reg2_loop\r
196         ;/* Repeatedly check that each register still contains the value written to\r
197         ;it when the task started. */\r
198         cmp     r0, #10\r
199         bne     reg2_error_loop\r
200         cmp     r1, #1\r
201         bne     reg2_error_loop\r
202         cmp     r2, #2\r
203         bne     reg2_error_loop\r
204         cmp r3, #3\r
205         bne     reg2_error_loop\r
206         cmp     r4, #4\r
207         bne     reg2_error_loop\r
208         cmp     r5, #5\r
209         bne     reg2_error_loop\r
210         cmp     r6, #6\r
211         bne     reg2_error_loop\r
212         cmp     r7, #7\r
213         bne     reg2_error_loop\r
214         movs r0, #8\r
215         cmp     r8, r0\r
216         bne     reg2_error_loop\r
217         movs r0, #9\r
218         cmp     r9, r0\r
219         bne     reg2_error_loop\r
220         movs r0, #10\r
221         cmp     r10, r0\r
222         bne     reg2_error_loop\r
223         movs r0, #11\r
224         cmp     r11, r0\r
225         bne     reg2_error_loop\r
226         movs r0, #12\r
227         cmp     r12, r0\r
228         bne     reg2_error_loop\r
229 \r
230         ;/* Everything passed, increment the loop counter. */\r
231         push { r1 }\r
232         ldr     r0, =ulRegTest2LoopCounter\r
233         ldr r1, [r0]\r
234         adds r1, r1, #1\r
235         str r1, [r0]\r
236         pop { r1 }\r
237 \r
238         ;/* Start again. */\r
239         movs r0, #10\r
240         b reg2_loop\r
241 \r
242 reg2_error_loop\r
243         ;/* If this line is hit then there was an error in a core register value.\r
244         ;The loop ensures the loop counter stops incrementing. */\r
245         b reg2_error_loop\r
246         nop\r
247         ENDP\r
248 \r
249         END\r