2 FreeRTOS V8.2.2 - Copyright (C) 2014 Real Time Engineers Ltd.
\r
4 FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
\r
5 http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
\r
7 ***************************************************************************
\r
9 * FreeRTOS tutorial books are available in pdf and paperback. *
\r
10 * Complete, revised, and edited pdf reference manuals are also *
\r
13 * Purchasing FreeRTOS documentation will not only help you, by *
\r
14 * ensuring you get running as quickly as possible and with an *
\r
15 * in-depth knowledge of how to use FreeRTOS, it will also help *
\r
16 * the FreeRTOS project to continue with its mission of providing *
\r
17 * professional grade, cross platform, de facto standard solutions *
\r
18 * for microcontrollers - completely free of charge! *
\r
20 * >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
\r
22 * Thank you for using FreeRTOS, and thank you for your support! *
\r
24 ***************************************************************************
\r
27 This file is part of the FreeRTOS distribution.
\r
29 FreeRTOS is free software; you can redistribute it and/or modify it under
\r
30 the terms of the GNU General Public License (version 2) as published by the
\r
31 Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
\r
33 >>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
\r
34 distribute a combined work that includes FreeRTOS without being obliged to
\r
35 provide the source code for proprietary components outside of the FreeRTOS
\r
38 FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
\r
39 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
\r
40 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
\r
41 details. You should have received a copy of the GNU General Public License
\r
42 and the FreeRTOS license exception along with FreeRTOS; if not itcan be
\r
43 viewed here: http://www.freertos.org/a00114.html and also obtained by
\r
44 writing to Real Time Engineers Ltd., contact details for whom are available
\r
45 on the FreeRTOS WEB site.
\r
49 ***************************************************************************
\r
51 * Having a problem? Start by reading the FAQ "My application does *
\r
52 * not run, what could be wrong?" *
\r
54 * http://www.FreeRTOS.org/FAQHelp.html *
\r
56 ***************************************************************************
\r
59 http://www.FreeRTOS.org - Documentation, books, training, latest versions,
\r
60 license and Real Time Engineers Ltd. contact details.
\r
62 http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
\r
63 including FreeRTOS+Trace - an indispensable productivity tool, and our new
\r
64 fully thread aware and reentrant UDP/IP stack.
\r
66 http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
\r
67 Integrity Systems, who sell the code with commercial support,
\r
68 indemnification and middleware, under the OpenRTOS brand.
\r
70 http://www.SafeRTOS.com - High Integrity Systems also provide a safety
\r
71 engineered and independently SIL3 certified version for use in safety and
\r
72 mission critical applications that require provable dependability.
\r
75 .global vRegTest1Implementation
\r
76 .global vRegTest2Implementation
\r
77 .extern ulRegTest1LoopCounter
\r
78 .extern ulRegTest2LoopCounter
\r
83 /* This function is explained in the comments at the top of main-full.c. */
\r
84 .type vRegTest1Implementation, %function
\r
85 vRegTest1Implementation:
\r
87 /* Fill each general purpose register with a known value. */
\r
104 /* Fill each FPU register with a known value. */
\r
122 /* Loop, checking each itteration that each register still contains the
\r
125 /* Yield to increase test coverage */
\r
128 /* Check all the VFP registers still contain the values set above.
\r
129 First save registers that are clobbered by the test. */
\r
134 bne reg1_error_loopf
\r
136 bne reg1_error_loopf
\r
139 bne reg1_error_loopf
\r
141 bne reg1_error_loopf
\r
144 bne reg1_error_loopf
\r
146 bne reg1_error_loopf
\r
149 bne reg1_error_loopf
\r
151 bne reg1_error_loopf
\r
154 bne reg1_error_loopf
\r
156 bne reg1_error_loopf
\r
159 bne reg1_error_loopf
\r
161 bne reg1_error_loopf
\r
164 bne reg1_error_loopf
\r
166 bne reg1_error_loopf
\r
169 bne reg1_error_loopf
\r
171 bne reg1_error_loopf
\r
174 bne reg1_error_loopf
\r
176 bne reg1_error_loopf
\r
179 bne reg1_error_loopf
\r
181 bne reg1_error_loopf
\r
184 bne reg1_error_loopf
\r
186 bne reg1_error_loopf
\r
189 bne reg1_error_loopf
\r
191 bne reg1_error_loopf
\r
194 bne reg1_error_loopf
\r
196 bne reg1_error_loopf
\r
199 bne reg1_error_loopf
\r
201 bne reg1_error_loopf
\r
204 bne reg1_error_loopf
\r
206 bne reg1_error_loopf
\r
209 bne reg1_error_loopf
\r
211 bne reg1_error_loopf
\r
214 /* Restore the registers that were clobbered by the test. */
\r
217 /* VFP register test passed. Jump to the core register test. */
\r
221 /* If this line is hit then a VFP register value was found to be
\r
227 /* Test each general purpose register to check that it still contains the
\r
228 expected known value, jumping to reg1_error_loop if any register contains
\r
229 an unexpected value. */
\r
231 bne reg1_error_loop
\r
233 bne reg1_error_loop
\r
235 bne reg1_error_loop
\r
237 bne reg1_error_loop
\r
239 bne reg1_error_loop
\r
241 bne reg1_error_loop
\r
243 bne reg1_error_loop
\r
245 bne reg1_error_loop
\r
247 bne reg1_error_loop
\r
249 bne reg1_error_loop
\r
251 bne reg1_error_loop
\r
253 bne reg1_error_loop
\r
255 bne reg1_error_loop
\r
257 bne reg1_error_loop
\r
259 /* Everything passed, increment the loop counter. */
\r
261 ldr r0, =ulRegTest1LoopCounter
\r
271 /* If this line is hit then there was an error in a core register value.
\r
272 The loop ensures the loop counter stops incrementing. */
\r
276 /*-----------------------------------------------------------*/
\r
278 .type vRegTest2Implementation, %function
\r
279 vRegTest2Implementation:
\r
281 /* Put a known value in each register. */
\r
282 mov r0, #0xFF000000
\r
283 mov r1, #0x11000000
\r
284 mov r2, #0x22000000
\r
285 mov r3, #0x33000000
\r
286 mov r4, #0x44000000
\r
287 mov r5, #0x55000000
\r
288 mov r6, #0x66000000
\r
289 mov r7, #0x77000000
\r
290 mov r8, #0x88000000
\r
291 mov r9, #0x99000000
\r
292 mov r10, #0xAA000000
\r
293 mov r11, #0xBB000000
\r
294 mov r12, #0xCC000000
\r
295 mov r14, #0xEE000000
\r
297 /* Likewise the floating point registers */
\r
315 /* Loop, checking each itteration that each register still contains the
\r
318 /* Check all the VFP registers still contain the values set above.
\r
319 First save registers that are clobbered by the test. */
\r
323 cmp r0, #0xFF000000
\r
324 bne reg2_error_loopf
\r
325 cmp r1, #0x11000000
\r
326 bne reg2_error_loopf
\r
328 cmp r0, #0x22000000
\r
329 bne reg2_error_loopf
\r
330 cmp r1, #0x33000000
\r
331 bne reg2_error_loopf
\r
333 cmp r0, #0x44000000
\r
334 bne reg2_error_loopf
\r
335 cmp r1, #0x55000000
\r
336 bne reg2_error_loopf
\r
338 cmp r0, #0x66000000
\r
339 bne reg2_error_loopf
\r
340 cmp r1, #0x77000000
\r
341 bne reg2_error_loopf
\r
343 cmp r0, #0x88000000
\r
344 bne reg2_error_loopf
\r
345 cmp r1, #0x99000000
\r
346 bne reg2_error_loopf
\r
348 cmp r0, #0xAA000000
\r
349 bne reg2_error_loopf
\r
350 cmp r1, #0xBB000000
\r
351 bne reg2_error_loopf
\r
353 cmp r0, #0xFF000000
\r
354 bne reg2_error_loopf
\r
355 cmp r1, #0x11000000
\r
356 bne reg2_error_loopf
\r
358 cmp r0, #0x22000000
\r
359 bne reg2_error_loopf
\r
360 cmp r1, #0x33000000
\r
361 bne reg2_error_loopf
\r
363 cmp r0, #0x44000000
\r
364 bne reg2_error_loopf
\r
365 cmp r1, #0x55000000
\r
366 bne reg2_error_loopf
\r
368 cmp r0, #0x66000000
\r
369 bne reg2_error_loopf
\r
370 cmp r1, #0x77000000
\r
371 bne reg2_error_loopf
\r
373 cmp r0, #0x88000000
\r
374 bne reg2_error_loopf
\r
375 cmp r1, #0x99000000
\r
376 bne reg2_error_loopf
\r
378 cmp r0, #0xAA000000
\r
379 bne reg2_error_loopf
\r
380 cmp r1, #0xBB000000
\r
381 bne reg2_error_loopf
\r
383 cmp r0, #0xFF000000
\r
384 bne reg2_error_loopf
\r
385 cmp r1, #0x11000000
\r
386 bne reg2_error_loopf
\r
388 cmp r0, #0x22000000
\r
389 bne reg2_error_loopf
\r
390 cmp r1, #0x33000000
\r
391 bne reg2_error_loopf
\r
393 cmp r0, #0x44000000
\r
394 bne reg2_error_loopf
\r
395 cmp r1, #0x55000000
\r
396 bne reg2_error_loopf
\r
398 cmp r0, #0x66000000
\r
399 bne reg2_error_loopf
\r
400 cmp r1, #0x77000000
\r
401 bne reg2_error_loopf
\r
403 /* Restore the registers that were clobbered by the test. */
\r
406 /* VFP register test passed. Jump to the core register test. */
\r
410 /* If this line is hit then a VFP register value was found to be
\r
416 cmp r0, #0xFF000000
\r
417 bne reg2_error_loop
\r
418 cmp r1, #0x11000000
\r
419 bne reg2_error_loop
\r
420 cmp r2, #0x22000000
\r
421 bne reg2_error_loop
\r
422 cmp r3, #0x33000000
\r
423 bne reg2_error_loop
\r
424 cmp r4, #0x44000000
\r
425 bne reg2_error_loop
\r
426 cmp r5, #0x55000000
\r
427 bne reg2_error_loop
\r
428 cmp r6, #0x66000000
\r
429 bne reg2_error_loop
\r
430 cmp r7, #0x77000000
\r
431 bne reg2_error_loop
\r
432 cmp r8, #0x88000000
\r
433 bne reg2_error_loop
\r
434 cmp r9, #0x99000000
\r
435 bne reg2_error_loop
\r
436 cmp r10, #0xAA000000
\r
437 bne reg2_error_loop
\r
438 cmp r11, #0xBB000000
\r
439 bne reg2_error_loop
\r
440 cmp r12, #0xCC000000
\r
441 bne reg2_error_loop
\r
442 cmp r14, #0xEE000000
\r
443 bne reg2_error_loop
\r
445 /* Everything passed, increment the loop counter. */
\r
447 ldr r0, =ulRegTest2LoopCounter
\r
457 /* If this line is hit then there was an error in a core register value.
\r
458 The loop ensures the loop counter stops incrementing. */
\r