2 FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.
5 VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
7 This file is part of the FreeRTOS distribution.
9 FreeRTOS is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License (version 2) as published by the
11 Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.
13 ***************************************************************************
14 >>! NOTE: The modification to the GPL is included to allow you to !<<
15 >>! distribute a combined work that includes FreeRTOS without being !<<
16 >>! obliged to provide the source code for proprietary components !<<
17 >>! outside of the FreeRTOS kernel. !<<
18 ***************************************************************************
20 FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
21 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
22 FOR A PARTICULAR PURPOSE. Full license text is available on the following
23 link: http://www.freertos.org/a00114.html
25 ***************************************************************************
27 * FreeRTOS provides completely free yet professionally developed, *
28 * robust, strictly quality controlled, supported, and cross *
29 * platform software that is more than just the market leader, it *
30 * is the industry's de facto standard. *
32 * Help yourself get started quickly while simultaneously helping *
33 * to support the FreeRTOS project by purchasing a FreeRTOS *
34 * tutorial book, reference manual, or both: *
35 * http://www.FreeRTOS.org/Documentation *
37 ***************************************************************************
39 http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
40 the FAQ page "My application does not run, what could be wrong?". Have you
41 defined configASSERT()?
43 http://www.FreeRTOS.org/support - In return for receiving this top quality
44 embedded software for free we request you assist our global community by
45 participating in the support forum.
47 http://www.FreeRTOS.org/training - Investing in training allows your team to
48 be as productive as possible as early as possible. Now you can receive
49 FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
50 Ltd, and the world's leading authority on the world's leading RTOS.
52 http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
53 including FreeRTOS+Trace - an indispensable productivity tool, a DOS
54 compatible FAT file system, and our tiny thread aware UDP/IP stack.
56 http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
57 Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
59 http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
60 Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
61 licenses offer ticketed support, indemnification and commercial middleware.
63 http://www.SafeRTOS.com - High Integrity Systems also provide a safety
64 engineered and independently SIL3 certified version for use in safety and
65 mission critical applications that require provable dependability.
70 /* Scheduler include files. */
74 /* Demo file headers. */
78 * Test tasks that sets registers to known values, then checks to ensure the
79 * values remain as expected. Test 1 and test 2 use different values.
81 static void prvRegisterCheck1( void *pvParameters );
82 static void prvRegisterCheck2( void *pvParameters );
84 /* Set to a non zero value should an error be found. */
85 portBASE_TYPE xRegTestError = pdFALSE;
87 /*-----------------------------------------------------------*/
89 void vStartRegTestTasks( void )
91 xTaskCreate( prvRegisterCheck1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
92 xTaskCreate( prvRegisterCheck2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
94 /*-----------------------------------------------------------*/
96 portBASE_TYPE xAreRegTestTasksStillRunning( void )
98 portBASE_TYPE xReturn;
100 /* If a register was found to contain an unexpected value then the
101 xRegTestError variable would have been set to a non zero value. */
102 if( xRegTestError == pdFALSE )
113 /*-----------------------------------------------------------*/
115 static void prvRegisterCheck1( void *pvParameters )
117 ( void ) pvParameters;
122 asm( "MOV r0, r31" );
124 asm( "MOV r1, r31" );
126 asm( "MOV r2, r31" );
128 asm( "MOV r3, r31" );
130 asm( "MOV r4, r31" );
131 asm( "LDI r31, 10" );
132 asm( "MOV r5, r31" );
133 asm( "LDI r31, 11" );
134 asm( "MOV r6, r31" );
135 asm( "LDI r31, 12" );
136 asm( "MOV r7, r31" );
137 asm( "LDI r31, 13" );
138 asm( "MOV r8, r31" );
139 asm( "LDI r31, 14" );
140 asm( "MOV r9, r31" );
141 asm( "LDI r31, 15" );
142 asm( "MOV r10, r31" );
143 asm( "LDI r31, 16" );
144 asm( "MOV r11, r31" );
145 asm( "LDI r31, 17" );
146 asm( "MOV r12, r31" );
147 asm( "LDI r31, 18" );
148 asm( "MOV r13, r31" );
149 asm( "LDI r31, 19" );
150 asm( "MOV r14, r31" );
151 asm( "LDI r31, 20" );
152 asm( "MOV r15, r31" );
153 asm( "LDI r16, 21" );
154 asm( "LDI r17, 22" );
155 asm( "LDI r18, 23" );
156 asm( "LDI r19, 24" );
157 asm( "LDI r20, 25" );
158 asm( "LDI r21, 26" );
159 asm( "LDI r22, 27" );
160 asm( "LDI r23, 28" );
161 asm( "LDI r24, 29" );
162 asm( "LDI r25, 30" );
163 asm( "LDI r26, 31" );
164 asm( "LDI r27, 32" );
165 asm( "LDI r30, 33" );
168 asm( "CPSE r31, r0" );
169 asm( "STS xRegTestError, r0" );
171 asm( "CPSE r31, r1" );
172 asm( "STS xRegTestError, r0" );
174 asm( "CPSE r31, r2" );
175 asm( "STS xRegTestError, r0" );
177 asm( "CPSE r31, r3" );
178 asm( "STS xRegTestError, r0" );
180 asm( "CPSE r31, r4" );
181 asm( "STS xRegTestError, r0" );
182 asm( "LDI r31, 10" );
183 asm( "CPSE r31, r5" );
184 asm( "STS xRegTestError, r0" );
185 asm( "LDI r31, 11" );
186 asm( "CPSE r31, r6" );
187 asm( "STS xRegTestError, r0" );
188 asm( "LDI r31, 12" );
189 asm( "CPSE r31, r7" );
190 asm( "STS xRegTestError, r0" );
191 asm( "LDI r31, 13" );
192 asm( "CPSE r31, r8" );
193 asm( "STS xRegTestError, r0" );
194 asm( "LDI r31, 14" );
195 asm( "CPSE r31, r9" );
196 asm( "STS xRegTestError, r0" );
197 asm( "LDI r31, 15" );
198 asm( "CPSE r31, r10" );
199 asm( "STS xRegTestError, r0" );
200 asm( "LDI r31, 16" );
201 asm( "CPSE r31, r11" );
202 asm( "STS xRegTestError, r0" );
203 asm( "LDI r31, 17" );
204 asm( "CPSE r31, r12" );
205 asm( "STS xRegTestError, r0" );
206 asm( "LDI r31, 18" );
207 asm( "CPSE r31, r13" );
208 asm( "STS xRegTestError, r0" );
209 asm( "LDI r31, 19" );
210 asm( "CPSE r31, r14" );
211 asm( "STS xRegTestError, r0" );
212 asm( "LDI r31, 20" );
213 asm( "CPSE r31, r15" );
214 asm( "STS xRegTestError, r0" );
215 asm( "LDI r31, 21" );
216 asm( "CPSE r31, r16" );
217 asm( "STS xRegTestError, r0" );
218 asm( "LDI r31, 22" );
219 asm( "CPSE r31, r17" );
220 asm( "STS xRegTestError, r0" );
221 asm( "LDI r31, 23" );
222 asm( "CPSE r31, r18" );
223 asm( "STS xRegTestError, r0" );
224 asm( "LDI r31, 24" );
225 asm( "CPSE r31, r19" );
226 asm( "STS xRegTestError, r0" );
227 asm( "LDI r31, 25" );
228 asm( "CPSE r31, r20" );
229 asm( "STS xRegTestError, r0" );
230 asm( "LDI r31, 26" );
231 asm( "CPSE r31, r21" );
232 asm( "STS xRegTestError, r0" );
233 asm( "LDI r31, 27" );
234 asm( "CPSE r31, r22" );
235 asm( "STS xRegTestError, r0" );
236 asm( "LDI r31, 28" );
237 asm( "CPSE r31, r23" );
238 asm( "STS xRegTestError, r0" );
239 asm( "LDI r31, 29" );
240 asm( "CPSE r31, r24" );
241 asm( "STS xRegTestError, r0" );
242 asm( "LDI r31, 30" );
243 asm( "CPSE r31, r25" );
244 asm( "STS xRegTestError, r0" );
245 asm( "LDI r31, 31" );
246 asm( "CPSE r31, r26" );
247 asm( "STS xRegTestError, r0" );
248 asm( "LDI r31, 32" );
249 asm( "CPSE r31, r27" );
250 asm( "STS xRegTestError, r0" );
251 asm( "LDI r31, 33" );
252 asm( "CPSE r31, r30" );
253 asm( "STS xRegTestError, r0" );
256 /*-----------------------------------------------------------*/
258 static void prvRegisterCheck2( void *pvParameters )
260 ( void ) pvParameters;
265 asm( "MOV r0, r31" );
267 asm( "MOV r1, r31" );
269 asm( "MOV r2, r31" );
271 asm( "MOV r3, r31" );
273 asm( "MOV r4, r31" );
275 asm( "MOV r5, r31" );
277 asm( "MOV r6, r31" );
279 asm( "MOV r7, r31" );
281 asm( "MOV r8, r31" );
282 asm( "LDI r31, 10" );
283 asm( "MOV r9, r31" );
284 asm( "LDI r31, 11" );
285 asm( "MOV r10, r31" );
286 asm( "LDI r31, 12" );
287 asm( "MOV r11, r31" );
288 asm( "LDI r31, 13" );
289 asm( "MOV r12, r31" );
290 asm( "LDI r31, 14" );
291 asm( "MOV r13, r31" );
292 asm( "LDI r31, 15" );
293 asm( "MOV r14, r31" );
294 asm( "LDI r31, 16" );
295 asm( "MOV r15, r31" );
296 asm( "LDI r16, 17" );
297 asm( "LDI r17, 18" );
298 asm( "LDI r18, 19" );
299 asm( "LDI r19, 20" );
300 asm( "LDI r20, 21" );
301 asm( "LDI r21, 22" );
302 asm( "LDI r22, 23" );
303 asm( "LDI r23, 24" );
304 asm( "LDI r24, 25" );
305 asm( "LDI r25, 26" );
306 asm( "LDI r26, 27" );
307 asm( "LDI r27, 28" );
308 asm( "LDI r30, 29" );
311 asm( "CPSE r31, r0" );
312 asm( "STS xRegTestError, r0" );
314 asm( "CPSE r31, r1" );
315 asm( "STS xRegTestError, r0" );
317 asm( "CPSE r31, r2" );
318 asm( "STS xRegTestError, r0" );
320 asm( "CPSE r31, r3" );
321 asm( "STS xRegTestError, r0" );
323 asm( "CPSE r31, r4" );
324 asm( "STS xRegTestError, r0" );
326 asm( "CPSE r31, r5" );
327 asm( "STS xRegTestError, r0" );
329 asm( "CPSE r31, r6" );
330 asm( "STS xRegTestError, r0" );
332 asm( "CPSE r31, r7" );
333 asm( "STS xRegTestError, r0" );
335 asm( "CPSE r31, r8" );
336 asm( "STS xRegTestError, r0" );
337 asm( "LDI r31, 10" );
338 asm( "CPSE r31, r9" );
339 asm( "STS xRegTestError, r0" );
340 asm( "LDI r31, 11" );
341 asm( "CPSE r31, r10" );
342 asm( "STS xRegTestError, r0" );
343 asm( "LDI r31, 12" );
344 asm( "CPSE r31, r11" );
345 asm( "STS xRegTestError, r0" );
346 asm( "LDI r31, 13" );
347 asm( "CPSE r31, r12" );
348 asm( "STS xRegTestError, r0" );
349 asm( "LDI r31, 14" );
350 asm( "CPSE r31, r13" );
351 asm( "STS xRegTestError, r0" );
352 asm( "LDI r31, 15" );
353 asm( "CPSE r31, r14" );
354 asm( "STS xRegTestError, r0" );
355 asm( "LDI r31, 16" );
356 asm( "CPSE r31, r15" );
357 asm( "STS xRegTestError, r0" );
358 asm( "LDI r31, 17" );
359 asm( "CPSE r31, r16" );
360 asm( "STS xRegTestError, r0" );
361 asm( "LDI r31, 18" );
362 asm( "CPSE r31, r17" );
363 asm( "STS xRegTestError, r0" );
364 asm( "LDI r31, 19" );
365 asm( "CPSE r31, r18" );
366 asm( "STS xRegTestError, r0" );
367 asm( "LDI r31, 20" );
368 asm( "CPSE r31, r19" );
369 asm( "STS xRegTestError, r0" );
370 asm( "LDI r31, 21" );
371 asm( "CPSE r31, r20" );
372 asm( "STS xRegTestError, r0" );
373 asm( "LDI r31, 22" );
374 asm( "CPSE r31, r21" );
375 asm( "STS xRegTestError, r0" );
376 asm( "LDI r31, 23" );
377 asm( "CPSE r31, r22" );
378 asm( "STS xRegTestError, r0" );
379 asm( "LDI r31, 24" );
380 asm( "CPSE r31, r23" );
381 asm( "STS xRegTestError, r0" );
382 asm( "LDI r31, 25" );
383 asm( "CPSE r31, r24" );
384 asm( "STS xRegTestError, r0" );
385 asm( "LDI r31, 26" );
386 asm( "CPSE r31, r25" );
387 asm( "STS xRegTestError, r0" );
388 asm( "LDI r31, 27" );
389 asm( "CPSE r31, r26" );
390 asm( "STS xRegTestError, r0" );
391 asm( "LDI r31, 28" );
392 asm( "CPSE r31, r27" );
393 asm( "STS xRegTestError, r0" );
394 asm( "LDI r31, 29" );
395 asm( "CPSE r31, r30" );
396 asm( "STS xRegTestError, r0" );