2 * FreeRTOS Kernel V10.1.1
3 * Copyright (C) 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
5 * Permission is hereby granted, free of charge, to any person obtaining a copy of
6 * this software and associated documentation files (the "Software"), to deal in
7 * the Software without restriction, including without limitation the rights to
8 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 * the Software, and to permit persons to whom the Software is furnished to do so,
10 * subject to the following conditions:
12 * The above copyright notice and this permission notice shall be included in all
13 * copies or substantial portions of the Software.
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 * http://www.FreeRTOS.org
23 * http://aws.amazon.com/freertos
28 /* Scheduler include files. */
32 /* Demo file headers. */
36 * Test tasks that sets registers to known values, then checks to ensure the
37 * values remain as expected. Test 1 and test 2 use different values.
39 static void prvRegisterCheck1( void *pvParameters );
40 static void prvRegisterCheck2( void *pvParameters );
42 /* Set to a non zero value should an error be found. */
43 portBASE_TYPE xRegTestError = pdFALSE;
45 /*-----------------------------------------------------------*/
47 void vStartRegTestTasks( void )
49 xTaskCreate( prvRegisterCheck1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
50 xTaskCreate( prvRegisterCheck2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
52 /*-----------------------------------------------------------*/
54 portBASE_TYPE xAreRegTestTasksStillRunning( void )
56 portBASE_TYPE xReturn;
58 /* If a register was found to contain an unexpected value then the
59 xRegTestError variable would have been set to a non zero value. */
60 if( xRegTestError == pdFALSE )
71 /*-----------------------------------------------------------*/
73 static void prvRegisterCheck1( void *pvParameters )
75 ( void ) pvParameters;
100 asm( "MOV r10, r31" );
101 asm( "LDI r31, 16" );
102 asm( "MOV r11, r31" );
103 asm( "LDI r31, 17" );
104 asm( "MOV r12, r31" );
105 asm( "LDI r31, 18" );
106 asm( "MOV r13, r31" );
107 asm( "LDI r31, 19" );
108 asm( "MOV r14, r31" );
109 asm( "LDI r31, 20" );
110 asm( "MOV r15, r31" );
111 asm( "LDI r16, 21" );
112 asm( "LDI r17, 22" );
113 asm( "LDI r18, 23" );
114 asm( "LDI r19, 24" );
115 asm( "LDI r20, 25" );
116 asm( "LDI r21, 26" );
117 asm( "LDI r22, 27" );
118 asm( "LDI r23, 28" );
119 asm( "LDI r24, 29" );
120 asm( "LDI r25, 30" );
121 asm( "LDI r26, 31" );
122 asm( "LDI r27, 32" );
123 asm( "LDI r30, 33" );
126 asm( "CPSE r31, r0" );
127 asm( "STS xRegTestError, r0" );
129 asm( "CPSE r31, r1" );
130 asm( "STS xRegTestError, r0" );
132 asm( "CPSE r31, r2" );
133 asm( "STS xRegTestError, r0" );
135 asm( "CPSE r31, r3" );
136 asm( "STS xRegTestError, r0" );
138 asm( "CPSE r31, r4" );
139 asm( "STS xRegTestError, r0" );
140 asm( "LDI r31, 10" );
141 asm( "CPSE r31, r5" );
142 asm( "STS xRegTestError, r0" );
143 asm( "LDI r31, 11" );
144 asm( "CPSE r31, r6" );
145 asm( "STS xRegTestError, r0" );
146 asm( "LDI r31, 12" );
147 asm( "CPSE r31, r7" );
148 asm( "STS xRegTestError, r0" );
149 asm( "LDI r31, 13" );
150 asm( "CPSE r31, r8" );
151 asm( "STS xRegTestError, r0" );
152 asm( "LDI r31, 14" );
153 asm( "CPSE r31, r9" );
154 asm( "STS xRegTestError, r0" );
155 asm( "LDI r31, 15" );
156 asm( "CPSE r31, r10" );
157 asm( "STS xRegTestError, r0" );
158 asm( "LDI r31, 16" );
159 asm( "CPSE r31, r11" );
160 asm( "STS xRegTestError, r0" );
161 asm( "LDI r31, 17" );
162 asm( "CPSE r31, r12" );
163 asm( "STS xRegTestError, r0" );
164 asm( "LDI r31, 18" );
165 asm( "CPSE r31, r13" );
166 asm( "STS xRegTestError, r0" );
167 asm( "LDI r31, 19" );
168 asm( "CPSE r31, r14" );
169 asm( "STS xRegTestError, r0" );
170 asm( "LDI r31, 20" );
171 asm( "CPSE r31, r15" );
172 asm( "STS xRegTestError, r0" );
173 asm( "LDI r31, 21" );
174 asm( "CPSE r31, r16" );
175 asm( "STS xRegTestError, r0" );
176 asm( "LDI r31, 22" );
177 asm( "CPSE r31, r17" );
178 asm( "STS xRegTestError, r0" );
179 asm( "LDI r31, 23" );
180 asm( "CPSE r31, r18" );
181 asm( "STS xRegTestError, r0" );
182 asm( "LDI r31, 24" );
183 asm( "CPSE r31, r19" );
184 asm( "STS xRegTestError, r0" );
185 asm( "LDI r31, 25" );
186 asm( "CPSE r31, r20" );
187 asm( "STS xRegTestError, r0" );
188 asm( "LDI r31, 26" );
189 asm( "CPSE r31, r21" );
190 asm( "STS xRegTestError, r0" );
191 asm( "LDI r31, 27" );
192 asm( "CPSE r31, r22" );
193 asm( "STS xRegTestError, r0" );
194 asm( "LDI r31, 28" );
195 asm( "CPSE r31, r23" );
196 asm( "STS xRegTestError, r0" );
197 asm( "LDI r31, 29" );
198 asm( "CPSE r31, r24" );
199 asm( "STS xRegTestError, r0" );
200 asm( "LDI r31, 30" );
201 asm( "CPSE r31, r25" );
202 asm( "STS xRegTestError, r0" );
203 asm( "LDI r31, 31" );
204 asm( "CPSE r31, r26" );
205 asm( "STS xRegTestError, r0" );
206 asm( "LDI r31, 32" );
207 asm( "CPSE r31, r27" );
208 asm( "STS xRegTestError, r0" );
209 asm( "LDI r31, 33" );
210 asm( "CPSE r31, r30" );
211 asm( "STS xRegTestError, r0" );
214 /*-----------------------------------------------------------*/
216 static void prvRegisterCheck2( void *pvParameters )
218 ( void ) pvParameters;
223 asm( "MOV r0, r31" );
225 asm( "MOV r1, r31" );
227 asm( "MOV r2, r31" );
229 asm( "MOV r3, r31" );
231 asm( "MOV r4, r31" );
233 asm( "MOV r5, r31" );
235 asm( "MOV r6, r31" );
237 asm( "MOV r7, r31" );
239 asm( "MOV r8, r31" );
240 asm( "LDI r31, 10" );
241 asm( "MOV r9, r31" );
242 asm( "LDI r31, 11" );
243 asm( "MOV r10, r31" );
244 asm( "LDI r31, 12" );
245 asm( "MOV r11, r31" );
246 asm( "LDI r31, 13" );
247 asm( "MOV r12, r31" );
248 asm( "LDI r31, 14" );
249 asm( "MOV r13, r31" );
250 asm( "LDI r31, 15" );
251 asm( "MOV r14, r31" );
252 asm( "LDI r31, 16" );
253 asm( "MOV r15, r31" );
254 asm( "LDI r16, 17" );
255 asm( "LDI r17, 18" );
256 asm( "LDI r18, 19" );
257 asm( "LDI r19, 20" );
258 asm( "LDI r20, 21" );
259 asm( "LDI r21, 22" );
260 asm( "LDI r22, 23" );
261 asm( "LDI r23, 24" );
262 asm( "LDI r24, 25" );
263 asm( "LDI r25, 26" );
264 asm( "LDI r26, 27" );
265 asm( "LDI r27, 28" );
266 asm( "LDI r30, 29" );
269 asm( "CPSE r31, r0" );
270 asm( "STS xRegTestError, r0" );
272 asm( "CPSE r31, r1" );
273 asm( "STS xRegTestError, r0" );
275 asm( "CPSE r31, r2" );
276 asm( "STS xRegTestError, r0" );
278 asm( "CPSE r31, r3" );
279 asm( "STS xRegTestError, r0" );
281 asm( "CPSE r31, r4" );
282 asm( "STS xRegTestError, r0" );
284 asm( "CPSE r31, r5" );
285 asm( "STS xRegTestError, r0" );
287 asm( "CPSE r31, r6" );
288 asm( "STS xRegTestError, r0" );
290 asm( "CPSE r31, r7" );
291 asm( "STS xRegTestError, r0" );
293 asm( "CPSE r31, r8" );
294 asm( "STS xRegTestError, r0" );
295 asm( "LDI r31, 10" );
296 asm( "CPSE r31, r9" );
297 asm( "STS xRegTestError, r0" );
298 asm( "LDI r31, 11" );
299 asm( "CPSE r31, r10" );
300 asm( "STS xRegTestError, r0" );
301 asm( "LDI r31, 12" );
302 asm( "CPSE r31, r11" );
303 asm( "STS xRegTestError, r0" );
304 asm( "LDI r31, 13" );
305 asm( "CPSE r31, r12" );
306 asm( "STS xRegTestError, r0" );
307 asm( "LDI r31, 14" );
308 asm( "CPSE r31, r13" );
309 asm( "STS xRegTestError, r0" );
310 asm( "LDI r31, 15" );
311 asm( "CPSE r31, r14" );
312 asm( "STS xRegTestError, r0" );
313 asm( "LDI r31, 16" );
314 asm( "CPSE r31, r15" );
315 asm( "STS xRegTestError, r0" );
316 asm( "LDI r31, 17" );
317 asm( "CPSE r31, r16" );
318 asm( "STS xRegTestError, r0" );
319 asm( "LDI r31, 18" );
320 asm( "CPSE r31, r17" );
321 asm( "STS xRegTestError, r0" );
322 asm( "LDI r31, 19" );
323 asm( "CPSE r31, r18" );
324 asm( "STS xRegTestError, r0" );
325 asm( "LDI r31, 20" );
326 asm( "CPSE r31, r19" );
327 asm( "STS xRegTestError, r0" );
328 asm( "LDI r31, 21" );
329 asm( "CPSE r31, r20" );
330 asm( "STS xRegTestError, r0" );
331 asm( "LDI r31, 22" );
332 asm( "CPSE r31, r21" );
333 asm( "STS xRegTestError, r0" );
334 asm( "LDI r31, 23" );
335 asm( "CPSE r31, r22" );
336 asm( "STS xRegTestError, r0" );
337 asm( "LDI r31, 24" );
338 asm( "CPSE r31, r23" );
339 asm( "STS xRegTestError, r0" );
340 asm( "LDI r31, 25" );
341 asm( "CPSE r31, r24" );
342 asm( "STS xRegTestError, r0" );
343 asm( "LDI r31, 26" );
344 asm( "CPSE r31, r25" );
345 asm( "STS xRegTestError, r0" );
346 asm( "LDI r31, 27" );
347 asm( "CPSE r31, r26" );
348 asm( "STS xRegTestError, r0" );
349 asm( "LDI r31, 28" );
350 asm( "CPSE r31, r27" );
351 asm( "STS xRegTestError, r0" );
352 asm( "LDI r31, 29" );
353 asm( "CPSE r31, r30" );
354 asm( "STS xRegTestError, r0" );