3 * Copyright (C) 2020 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. */
35 /* Test tasks that sets registers to known values, then checks to ensure the
36 values remain as expected. Test 1 and test 2 use different values. */
37 static void prvRegisterCheck1( void *pvParameters );
38 static void prvRegisterCheck2( void *pvParameters );
40 /* Set to a non zero value should an error be found. */
41 portBASE_TYPE xRegTestError = pdFALSE;
43 /*-----------------------------------------------------------*/
45 void vStartRegTestTasks( void )
47 xTaskCreate( prvRegisterCheck1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
48 xTaskCreate( prvRegisterCheck2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
50 /*-----------------------------------------------------------*/
52 portBASE_TYPE xAreRegTestTasksStillRunning( void )
54 portBASE_TYPE xReturn;
56 /* If a register was found to contain an unexpected value then the
57 xRegTestError variable would have been set to a non zero value. */
58 if( xRegTestError == pdFALSE )
69 /*-----------------------------------------------------------*/
71 static void prvRegisterCheck1( void *pvParameters )
73 ( void ) pvParameters;
98 asm( "MOV r10, r31" );
100 asm( "MOV r11, r31" );
101 asm( "LDI r31, 17" );
102 asm( "MOV r12, r31" );
103 asm( "LDI r31, 18" );
104 asm( "MOV r13, r31" );
105 asm( "LDI r31, 19" );
106 asm( "MOV r14, r31" );
107 asm( "LDI r31, 20" );
108 asm( "MOV r15, r31" );
109 asm( "LDI r16, 21" );
110 asm( "LDI r17, 22" );
111 asm( "LDI r18, 23" );
112 asm( "LDI r19, 24" );
113 asm( "LDI r20, 25" );
114 asm( "LDI r21, 26" );
115 asm( "LDI r22, 27" );
116 asm( "LDI r23, 28" );
117 asm( "LDI r24, 29" );
118 asm( "LDI r25, 30" );
119 asm( "LDI r26, 31" );
120 asm( "LDI r27, 32" );
121 asm( "LDI r28, 33" );
122 asm( "LDI r29, 34" );
123 asm( "LDI r30, 35" );
127 asm( "CPI r31, 20" );
128 asm( "BREQ no_err_1" );
129 asm( "STS xRegTestError, r0" );
132 asm( "CPSE r31, r0" );
133 asm( "STS xRegTestError, r0" );
135 asm( "CPSE r31, r1" );
136 asm( "STS xRegTestError, r0" );
138 asm( "CPSE r31, r2" );
139 asm( "STS xRegTestError, r0" );
141 asm( "CPSE r31, r3" );
142 asm( "STS xRegTestError, r0" );
144 asm( "CPSE r31, r4" );
145 asm( "STS xRegTestError, r0" );
146 asm( "LDI r31, 10" );
147 asm( "CPSE r31, r5" );
148 asm( "STS xRegTestError, r0" );
149 asm( "LDI r31, 11" );
150 asm( "CPSE r31, r6" );
151 asm( "STS xRegTestError, r0" );
152 asm( "LDI r31, 12" );
153 asm( "CPSE r31, r7" );
154 asm( "STS xRegTestError, r0" );
155 asm( "LDI r31, 13" );
156 asm( "CPSE r31, r8" );
157 asm( "STS xRegTestError, r0" );
158 asm( "LDI r31, 14" );
159 asm( "CPSE r31, r9" );
160 asm( "STS xRegTestError, r0" );
161 asm( "LDI r31, 15" );
162 asm( "CPSE r31, r10" );
163 asm( "STS xRegTestError, r0" );
164 asm( "LDI r31, 16" );
165 asm( "CPSE r31, r11" );
166 asm( "STS xRegTestError, r0" );
167 asm( "LDI r31, 17" );
168 asm( "CPSE r31, r12" );
169 asm( "STS xRegTestError, r0" );
170 asm( "LDI r31, 18" );
171 asm( "CPSE r31, r13" );
172 asm( "STS xRegTestError, r0" );
173 asm( "LDI r31, 19" );
174 asm( "CPSE r31, r14" );
175 asm( "STS xRegTestError, r0" );
176 asm( "LDI r31, 20" );
177 asm( "CPSE r31, r15" );
178 asm( "STS xRegTestError, r0" );
179 asm( "LDI r31, 21" );
180 asm( "CPSE r31, r16" );
181 asm( "STS xRegTestError, r0" );
182 asm( "LDI r31, 22" );
183 asm( "CPSE r31, r17" );
184 asm( "STS xRegTestError, r0" );
185 asm( "LDI r31, 23" );
186 asm( "CPSE r31, r18" );
187 asm( "STS xRegTestError, r0" );
188 asm( "LDI r31, 24" );
189 asm( "CPSE r31, r19" );
190 asm( "STS xRegTestError, r0" );
191 asm( "LDI r31, 25" );
192 asm( "CPSE r31, r20" );
193 asm( "STS xRegTestError, r0" );
194 asm( "LDI r31, 26" );
195 asm( "CPSE r31, r21" );
196 asm( "STS xRegTestError, r0" );
197 asm( "LDI r31, 27" );
198 asm( "CPSE r31, r22" );
199 asm( "STS xRegTestError, r0" );
200 asm( "LDI r31, 28" );
201 asm( "CPSE r31, r23" );
202 asm( "STS xRegTestError, r0" );
203 asm( "LDI r31, 29" );
204 asm( "CPSE r31, r24" );
205 asm( "STS xRegTestError, r0" );
206 asm( "LDI r31, 30" );
207 asm( "CPSE r31, r25" );
208 asm( "STS xRegTestError, r0" );
209 asm( "LDI r31, 31" );
210 asm( "CPSE r31, r26" );
211 asm( "STS xRegTestError, r0" );
212 asm( "LDI r31, 32" );
213 asm( "CPSE r31, r27" );
214 asm( "STS xRegTestError, r0" );
215 asm( "LDI r31, 33" );
216 asm( "CPSE r31, r28" );
217 asm( "STS xRegTestError, r0" );
218 asm( "LDI r31, 34" );
219 asm( "CPSE r31, r29" );
220 asm( "STS xRegTestError, r0" );
221 asm( "LDI r31, 35" );
222 asm( "CPSE r31, r30" );
223 asm( "STS xRegTestError, r0" );
226 /*-----------------------------------------------------------*/
228 static void prvRegisterCheck2( void *pvParameters )
230 ( void ) pvParameters;
235 asm( "MOV r0, r31" );
237 asm( "MOV r1, r31" );
239 asm( "MOV r2, r31" );
241 asm( "MOV r3, r31" );
243 asm( "MOV r4, r31" );
245 asm( "MOV r5, r31" );
247 asm( "MOV r6, r31" );
249 asm( "MOV r7, r31" );
251 asm( "MOV r8, r31" );
252 asm( "LDI r31, 10" );
253 asm( "MOV r9, r31" );
254 asm( "LDI r31, 11" );
255 asm( "MOV r10, r31" );
256 asm( "LDI r31, 12" );
257 asm( "MOV r11, r31" );
258 asm( "LDI r31, 13" );
259 asm( "MOV r12, r31" );
260 asm( "LDI r31, 14" );
261 asm( "MOV r13, r31" );
262 asm( "LDI r31, 15" );
263 asm( "MOV r14, r31" );
264 asm( "LDI r31, 16" );
265 asm( "MOV r15, r31" );
266 asm( "LDI r16, 17" );
267 asm( "LDI r17, 18" );
268 asm( "LDI r18, 19" );
269 asm( "LDI r19, 20" );
270 asm( "LDI r20, 21" );
271 asm( "LDI r21, 22" );
272 asm( "LDI r22, 23" );
273 asm( "LDI r23, 24" );
274 asm( "LDI r24, 25" );
275 asm( "LDI r25, 26" );
276 asm( "LDI r26, 27" );
277 asm( "LDI r27, 28" );
278 asm( "LDI r28, 29" );
279 asm( "LDI r29, 30" );
280 asm( "LDI r30, 31" );
284 asm( "CPI r31, 16" );
285 asm( "BREQ no_err_2" );
286 asm( "STS xRegTestError, r0" );
289 asm( "CPSE r31, r0" );
290 asm( "STS xRegTestError, r0" );
292 asm( "CPSE r31, r1" );
293 asm( "STS xRegTestError, r0" );
295 asm( "CPSE r31, r2" );
296 asm( "STS xRegTestError, r0" );
298 asm( "CPSE r31, r3" );
299 asm( "STS xRegTestError, r0" );
301 asm( "CPSE r31, r4" );
302 asm( "STS xRegTestError, r0" );
304 asm( "CPSE r31, r5" );
305 asm( "STS xRegTestError, r0" );
307 asm( "CPSE r31, r6" );
308 asm( "STS xRegTestError, r0" );
310 asm( "CPSE r31, r7" );
311 asm( "STS xRegTestError, r0" );
313 asm( "CPSE r31, r8" );
314 asm( "STS xRegTestError, r0" );
315 asm( "LDI r31, 10" );
316 asm( "CPSE r31, r9" );
317 asm( "STS xRegTestError, r0" );
318 asm( "LDI r31, 11" );
319 asm( "CPSE r31, r10" );
320 asm( "STS xRegTestError, r0" );
321 asm( "LDI r31, 12" );
322 asm( "CPSE r31, r11" );
323 asm( "STS xRegTestError, r0" );
324 asm( "LDI r31, 13" );
325 asm( "CPSE r31, r12" );
326 asm( "STS xRegTestError, r0" );
327 asm( "LDI r31, 14" );
328 asm( "CPSE r31, r13" );
329 asm( "STS xRegTestError, r0" );
330 asm( "LDI r31, 15" );
331 asm( "CPSE r31, r14" );
332 asm( "STS xRegTestError, r0" );
333 asm( "LDI r31, 16" );
334 asm( "CPSE r31, r15" );
335 asm( "STS xRegTestError, r0" );
336 asm( "LDI r31, 17" );
337 asm( "CPSE r31, r16" );
338 asm( "STS xRegTestError, r0" );
339 asm( "LDI r31, 18" );
340 asm( "CPSE r31, r17" );
341 asm( "STS xRegTestError, r0" );
342 asm( "LDI r31, 19" );
343 asm( "CPSE r31, r18" );
344 asm( "STS xRegTestError, r0" );
345 asm( "LDI r31, 20" );
346 asm( "CPSE r31, r19" );
347 asm( "STS xRegTestError, r0" );
348 asm( "LDI r31, 21" );
349 asm( "CPSE r31, r20" );
350 asm( "STS xRegTestError, r0" );
351 asm( "LDI r31, 22" );
352 asm( "CPSE r31, r21" );
353 asm( "STS xRegTestError, r0" );
354 asm( "LDI r31, 23" );
355 asm( "CPSE r31, r22" );
356 asm( "STS xRegTestError, r0" );
357 asm( "LDI r31, 24" );
358 asm( "CPSE r31, r23" );
359 asm( "STS xRegTestError, r0" );
360 asm( "LDI r31, 25" );
361 asm( "CPSE r31, r24" );
362 asm( "STS xRegTestError, r0" );
363 asm( "LDI r31, 26" );
364 asm( "CPSE r31, r25" );
365 asm( "STS xRegTestError, r0" );
366 asm( "LDI r31, 27" );
367 asm( "CPSE r31, r26" );
368 asm( "STS xRegTestError, r0" );
369 asm( "LDI r31, 28" );
370 asm( "CPSE r31, r27" );
371 asm( "STS xRegTestError, r0" );
372 asm( "LDI r31, 29" );
373 asm( "CPSE r31, r28" );
374 asm( "STS xRegTestError, r0" );
375 asm( "LDI r31, 30" );
376 asm( "CPSE r31, r29" );
377 asm( "STS xRegTestError, r0" );
378 asm( "LDI r31, 31" );
379 asm( "CPSE r31, r30" );
380 asm( "STS xRegTestError, r0" );