2 FreeRTOS V8.1.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
103 /* Fill each FPU register with a known value. */
\r
138 /* Loop, checking each itteration that each register still contains the
\r
141 /* Yield to increase test coverage */
\r
144 /* Check all the VFP registers still contain the values set above.
\r
145 First save registers that are clobbered by the test. */
\r
150 bne reg1_error_loopf
\r
152 bne reg1_error_loopf
\r
155 bne reg1_error_loopf
\r
157 bne reg1_error_loopf
\r
160 bne reg1_error_loopf
\r
162 bne reg1_error_loopf
\r
165 bne reg1_error_loopf
\r
167 bne reg1_error_loopf
\r
170 bne reg1_error_loopf
\r
172 bne reg1_error_loopf
\r
175 bne reg1_error_loopf
\r
177 bne reg1_error_loopf
\r
180 bne reg1_error_loopf
\r
182 bne reg1_error_loopf
\r
185 bne reg1_error_loopf
\r
187 bne reg1_error_loopf
\r
190 bne reg1_error_loopf
\r
192 bne reg1_error_loopf
\r
195 bne reg1_error_loopf
\r
197 bne reg1_error_loopf
\r
200 bne reg1_error_loopf
\r
202 bne reg1_error_loopf
\r
205 bne reg1_error_loopf
\r
207 bne reg1_error_loopf
\r
210 bne reg1_error_loopf
\r
212 bne reg1_error_loopf
\r
215 bne reg1_error_loopf
\r
217 bne reg1_error_loopf
\r
220 bne reg1_error_loopf
\r
222 bne reg1_error_loopf
\r
225 bne reg1_error_loopf
\r
227 bne reg1_error_loopf
\r
231 bne reg1_error_loopf
\r
233 bne reg1_error_loopf
\r
236 bne reg1_error_loopf
\r
238 bne reg1_error_loopf
\r
241 bne reg1_error_loopf
\r
243 bne reg1_error_loopf
\r
246 bne reg1_error_loopf
\r
248 bne reg1_error_loopf
\r
251 bne reg1_error_loopf
\r
253 bne reg1_error_loopf
\r
256 bne reg1_error_loopf
\r
258 bne reg1_error_loopf
\r
261 bne reg1_error_loopf
\r
263 bne reg1_error_loopf
\r
266 bne reg1_error_loopf
\r
268 bne reg1_error_loopf
\r
271 bne reg1_error_loopf
\r
273 bne reg1_error_loopf
\r
276 bne reg1_error_loopf
\r
278 bne reg1_error_loopf
\r
281 bne reg1_error_loopf
\r
283 bne reg1_error_loopf
\r
286 bne reg1_error_loopf
\r
288 bne reg1_error_loopf
\r
291 bne reg1_error_loopf
\r
293 bne reg1_error_loopf
\r
296 bne reg1_error_loopf
\r
298 bne reg1_error_loopf
\r
301 bne reg1_error_loopf
\r
303 bne reg1_error_loopf
\r
306 bne reg1_error_loopf
\r
308 bne reg1_error_loopf
\r
310 /* Restore the registers that were clobbered by the test. */
\r
313 /* VFP register test passed. Jump to the core register test. */
\r
317 /* If this line is hit then a VFP register value was found to be
\r
323 /* Test each general purpose register to check that it still contains the
\r
324 expected known value, jumping to reg1_error_loop if any register contains
\r
325 an unexpected value. */
\r
327 bne reg1_error_loop
\r
329 bne reg1_error_loop
\r
331 bne reg1_error_loop
\r
333 bne reg1_error_loop
\r
335 bne reg1_error_loop
\r
337 bne reg1_error_loop
\r
339 bne reg1_error_loop
\r
341 bne reg1_error_loop
\r
343 bne reg1_error_loop
\r
345 bne reg1_error_loop
\r
347 bne reg1_error_loop
\r
349 bne reg1_error_loop
\r
351 bne reg1_error_loop
\r
353 bne reg1_error_loop
\r
355 /* Everything passed, increment the loop counter. */
\r
357 ldr r0, =ulRegTest1LoopCounter
\r
367 /* If this line is hit then there was an error in a core register value.
\r
368 The loop ensures the loop counter stops incrementing. */
\r
372 /*-----------------------------------------------------------*/
\r
374 .type vRegTest2Implementation, %function
\r
375 vRegTest2Implementation:
\r
377 /* Put a known value in each register. */
\r
378 mov r0, #0xFF000000
\r
379 mov r1, #0x11000000
\r
380 mov r2, #0x22000000
\r
381 mov r3, #0x33000000
\r
382 mov r4, #0x44000000
\r
383 mov r5, #0x55000000
\r
384 mov r6, #0x66000000
\r
385 mov r7, #0x77000000
\r
386 mov r8, #0x88000000
\r
387 mov r9, #0x99000000
\r
388 mov r10, #0xAA000000
\r
389 mov r11, #0xBB000000
\r
390 mov r12, #0xCC000000
\r
391 mov r14, #0xEE000000
\r
393 /* Likewise the floating point registers */
\r
428 /* Loop, checking each itteration that each register still contains the
\r
431 /* Check all the VFP registers still contain the values set above.
\r
432 First save registers that are clobbered by the test. */
\r
436 cmp r0, #0xFF000000
\r
437 bne reg2_error_loopf
\r
438 cmp r1, #0x11000000
\r
439 bne reg2_error_loopf
\r
441 cmp r0, #0x22000000
\r
442 bne reg2_error_loopf
\r
443 cmp r1, #0x33000000
\r
444 bne reg2_error_loopf
\r
446 cmp r0, #0x44000000
\r
447 bne reg2_error_loopf
\r
448 cmp r1, #0x55000000
\r
449 bne reg2_error_loopf
\r
451 cmp r0, #0x66000000
\r
452 bne reg2_error_loopf
\r
453 cmp r1, #0x77000000
\r
454 bne reg2_error_loopf
\r
456 cmp r0, #0x88000000
\r
457 bne reg2_error_loopf
\r
458 cmp r1, #0x99000000
\r
459 bne reg2_error_loopf
\r
461 cmp r0, #0xAA000000
\r
462 bne reg2_error_loopf
\r
463 cmp r1, #0xBB000000
\r
464 bne reg2_error_loopf
\r
466 cmp r0, #0xFF000000
\r
467 bne reg2_error_loopf
\r
468 cmp r1, #0x11000000
\r
469 bne reg2_error_loopf
\r
471 cmp r0, #0x22000000
\r
472 bne reg2_error_loopf
\r
473 cmp r1, #0x33000000
\r
474 bne reg2_error_loopf
\r
476 cmp r0, #0x44000000
\r
477 bne reg2_error_loopf
\r
478 cmp r1, #0x55000000
\r
479 bne reg2_error_loopf
\r
481 cmp r0, #0x66000000
\r
482 bne reg2_error_loopf
\r
483 cmp r1, #0x77000000
\r
484 bne reg2_error_loopf
\r
486 cmp r0, #0x88000000
\r
487 bne reg2_error_loopf
\r
488 cmp r1, #0x99000000
\r
489 bne reg2_error_loopf
\r
491 cmp r0, #0xAA000000
\r
492 bne reg2_error_loopf
\r
493 cmp r1, #0xBB000000
\r
494 bne reg2_error_loopf
\r
496 cmp r0, #0xFF000000
\r
497 bne reg2_error_loopf
\r
498 cmp r1, #0x11000000
\r
499 bne reg2_error_loopf
\r
501 cmp r0, #0x22000000
\r
502 bne reg2_error_loopf
\r
503 cmp r1, #0x33000000
\r
504 bne reg2_error_loopf
\r
506 cmp r0, #0x44000000
\r
507 bne reg2_error_loopf
\r
508 cmp r1, #0x55000000
\r
509 bne reg2_error_loopf
\r
511 cmp r0, #0x66000000
\r
512 bne reg2_error_loopf
\r
513 cmp r1, #0x77000000
\r
514 bne reg2_error_loopf
\r
517 cmp r0, #0xFF000000
\r
518 bne reg2_error_loopf
\r
519 cmp r1, #0x11000000
\r
520 bne reg2_error_loopf
\r
522 cmp r0, #0x22000000
\r
523 bne reg2_error_loopf
\r
524 cmp r1, #0x33000000
\r
525 bne reg2_error_loopf
\r
527 cmp r0, #0x44000000
\r
528 bne reg2_error_loopf
\r
529 cmp r1, #0x55000000
\r
530 bne reg2_error_loopf
\r
532 cmp r0, #0x66000000
\r
533 bne reg2_error_loopf
\r
534 cmp r1, #0x77000000
\r
535 bne reg2_error_loopf
\r
537 cmp r0, #0x88000000
\r
538 bne reg2_error_loopf
\r
539 cmp r1, #0x99000000
\r
540 bne reg2_error_loopf
\r
542 cmp r0, #0xAA000000
\r
543 bne reg2_error_loopf
\r
544 cmp r1, #0xBB000000
\r
545 bne reg2_error_loopf
\r
547 cmp r0, #0xFF000000
\r
548 bne reg2_error_loopf
\r
549 cmp r1, #0x11000000
\r
550 bne reg2_error_loopf
\r
552 cmp r0, #0x22000000
\r
553 bne reg2_error_loopf
\r
554 cmp r1, #0x33000000
\r
555 bne reg2_error_loopf
\r
557 cmp r0, #0x44000000
\r
558 bne reg2_error_loopf
\r
559 cmp r1, #0x55000000
\r
560 bne reg2_error_loopf
\r
562 cmp r0, #0x66000000
\r
563 bne reg2_error_loopf
\r
564 cmp r1, #0x77000000
\r
565 bne reg2_error_loopf
\r
567 cmp r0, #0x88000000
\r
568 bne reg2_error_loopf
\r
569 cmp r1, #0x99000000
\r
570 bne reg2_error_loopf
\r
572 cmp r0, #0xAA000000
\r
573 bne reg2_error_loopf
\r
574 cmp r1, #0xBB000000
\r
575 bne reg2_error_loopf
\r
577 cmp r0, #0xFF000000
\r
578 bne reg2_error_loopf
\r
579 cmp r1, #0x11000000
\r
580 bne reg2_error_loopf
\r
582 cmp r0, #0x22000000
\r
583 bne reg2_error_loopf
\r
584 cmp r1, #0x33000000
\r
585 bne reg2_error_loopf
\r
587 cmp r0, #0x44000000
\r
588 bne reg2_error_loopf
\r
589 cmp r1, #0x55000000
\r
590 bne reg2_error_loopf
\r
592 cmp r0, #0x66000000
\r
593 bne reg2_error_loopf
\r
594 cmp r1, #0x77000000
\r
595 bne reg2_error_loopf
\r
597 /* Restore the registers that were clobbered by the test. */
\r
600 /* VFP register test passed. Jump to the core register test. */
\r
604 /* If this line is hit then a VFP register value was found to be
\r
610 cmp r0, #0xFF000000
\r
611 bne reg2_error_loop
\r
612 cmp r1, #0x11000000
\r
613 bne reg2_error_loop
\r
614 cmp r2, #0x22000000
\r
615 bne reg2_error_loop
\r
616 cmp r3, #0x33000000
\r
617 bne reg2_error_loop
\r
618 cmp r4, #0x44000000
\r
619 bne reg2_error_loop
\r
620 cmp r5, #0x55000000
\r
621 bne reg2_error_loop
\r
622 cmp r6, #0x66000000
\r
623 bne reg2_error_loop
\r
624 cmp r7, #0x77000000
\r
625 bne reg2_error_loop
\r
626 cmp r8, #0x88000000
\r
627 bne reg2_error_loop
\r
628 cmp r9, #0x99000000
\r
629 bne reg2_error_loop
\r
630 cmp r10, #0xAA000000
\r
631 bne reg2_error_loop
\r
632 cmp r11, #0xBB000000
\r
633 bne reg2_error_loop
\r
634 cmp r12, #0xCC000000
\r
635 bne reg2_error_loop
\r
636 cmp r14, #0xEE000000
\r
637 bne reg2_error_loop
\r
639 /* Everything passed, increment the loop counter. */
\r
641 ldr r0, =ulRegTest2LoopCounter
\r
651 /* If this line is hit then there was an error in a core register value.
\r
652 The loop ensures the loop counter stops incrementing. */
\r