]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M0_STM32F0518_IAR/RegTest.s
Add additional critical section to the default tickless implementations.
[freertos] / FreeRTOS / Demo / CORTEX_M0_STM32F0518_IAR / RegTest.s
1 /*\r
2     FreeRTOS V7.5.2 - Copyright (C) 2013 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         RSEG    CODE:CODE(2)\r
66         thumb\r
67 \r
68         EXTERN ulRegTest1LoopCounter\r
69         EXTERN ulRegTest2LoopCounter\r
70 \r
71         PUBLIC vRegTest1Task\r
72         PUBLIC vRegTest2Task\r
73 \r
74 /*-----------------------------------------------------------*/\r
75 vRegTest1Task\r
76 \r
77         /* Fill the core registers with known values.  This is only done once. */\r
78         movs r1, #101\r
79         movs r2, #102\r
80         movs r3, #103\r
81         movs r4, #104\r
82         movs r5, #105\r
83         movs r6, #106\r
84         movs r7, #107\r
85         movs r0, #108\r
86         mov      r8, r0\r
87         movs r0, #109\r
88         mov  r9, r0\r
89         movs r0, #110\r
90         mov      r10, r0\r
91         movs r0, #111\r
92         mov      r11, r0\r
93         movs r0, #112\r
94         mov  r12, r0\r
95         movs r0, #100\r
96 \r
97 reg1_loop\r
98         /* Repeatedly check that each register still contains the value written to\r
99         it when the task started. */\r
100         cmp     r0, #100\r
101         bne     reg1_error_loop\r
102         cmp     r1, #101\r
103         bne     reg1_error_loop\r
104         cmp     r2, #102\r
105         bne     reg1_error_loop\r
106         cmp r3, #103\r
107         bne     reg1_error_loop\r
108         cmp     r4, #104\r
109         bne     reg1_error_loop\r
110         cmp     r5, #105\r
111         bne     reg1_error_loop\r
112         cmp     r6, #106\r
113         bne     reg1_error_loop\r
114         cmp     r7, #107\r
115         bne     reg1_error_loop\r
116         movs r0, #108\r
117         cmp     r8, r0\r
118         bne     reg1_error_loop\r
119         movs r0, #109\r
120         cmp     r9, r0\r
121         bne     reg1_error_loop\r
122         movs r0, #110\r
123         cmp     r10, r0\r
124         bne     reg1_error_loop\r
125         movs r0, #111\r
126         cmp     r11, r0\r
127         bne     reg1_error_loop\r
128         movs r0, #112\r
129         cmp     r12, r0\r
130         bne     reg1_error_loop\r
131 \r
132         /* Everything passed, increment the loop counter. */\r
133         push { r1 }\r
134         ldr     r0, =ulRegTest1LoopCounter\r
135         ldr r1, [r0]\r
136         adds r1, r1, #1\r
137         str r1, [r0]\r
138         pop { r1 }\r
139 \r
140         /* Start again. */\r
141         movs r0, #100\r
142         b reg1_loop\r
143 \r
144 reg1_error_loop\r
145         /* If this line is hit then there was an error in a core register value.\r
146         The loop ensures the loop counter stops incrementing. */\r
147         b reg1_error_loop\r
148         nop\r
149 \r
150 \r
151 \r
152 vRegTest2Task\r
153 \r
154         /* Fill the core registers with known values.  This is only done once. */\r
155         movs r1, #1\r
156         movs r2, #2\r
157         movs r3, #3\r
158         movs r4, #4\r
159         movs r5, #5\r
160         movs r6, #6\r
161         movs r7, #7\r
162         movs r0, #8\r
163         mov     r8, r0\r
164         movs r0, #9\r
165         mov r9, r0\r
166         movs r0, #10\r
167         mov     r10, r0\r
168         movs r0, #11\r
169         mov     r11, r0\r
170         movs r0, #12\r
171         mov r12, r0\r
172         movs r0, #10\r
173 \r
174 reg2_loop\r
175         /* Repeatedly check that each register still contains the value written to\r
176         it when the task started. */\r
177         cmp     r0, #10\r
178         bne     reg2_error_loop\r
179         cmp     r1, #1\r
180         bne     reg2_error_loop\r
181         cmp     r2, #2\r
182         bne     reg2_error_loop\r
183         cmp r3, #3\r
184         bne     reg2_error_loop\r
185         cmp     r4, #4\r
186         bne     reg2_error_loop\r
187         cmp     r5, #5\r
188         bne     reg2_error_loop\r
189         cmp     r6, #6\r
190         bne     reg2_error_loop\r
191         cmp     r7, #7\r
192         bne     reg2_error_loop\r
193         movs r0, #8\r
194         cmp     r8, r0\r
195         bne     reg2_error_loop\r
196         movs r0, #9\r
197         cmp     r9, r0\r
198         bne     reg2_error_loop\r
199         movs r0, #10\r
200         cmp     r10, r0\r
201         bne     reg2_error_loop\r
202         movs r0, #11\r
203         cmp     r11, r0\r
204         bne     reg2_error_loop\r
205         movs r0, #12\r
206         cmp     r12, r0\r
207         bne     reg2_error_loop\r
208 \r
209         /* Everything passed, increment the loop counter. */\r
210         push { r1 }\r
211         ldr     r0, =ulRegTest2LoopCounter\r
212         ldr r1, [r0]\r
213         adds r1, r1, #1\r
214         str r1, [r0]\r
215         pop { r1 }\r
216 \r
217         /* Start again. */\r
218         movs r0, #10\r
219         b reg2_loop\r
220 \r
221 reg2_error_loop\r
222         /* If this line is hit then there was an error in a core register value.\r
223         The loop ensures the loop counter stops incrementing. */\r
224         b reg2_error_loop\r
225         nop\r
226 \r
227         END\r