2 FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd.
\r
4 VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
\r
6 ***************************************************************************
\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
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
18 ***************************************************************************
\r
20 This file is part of the FreeRTOS distribution.
\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
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
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
38 ***************************************************************************
\r
40 * Having a problem? Start by reading the FAQ "My application does *
\r
41 * not run, what could be wrong?" *
\r
43 * http://www.FreeRTOS.org/FAQHelp.html *
\r
45 ***************************************************************************
\r
47 http://www.FreeRTOS.org - Documentation, books, training, latest versions,
\r
48 license and Real Time Engineers Ltd. contact details.
\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
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
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
65 /* Scheduler include files. */
\r
66 #include "FreeRTOS.h"
\r
69 /* Demo file headers. */
\r
70 #include "regtest.h"
\r
73 * Test tasks that sets registers to known values, then checks to ensure the
\r
74 * values remain as expected. Test 1 and test 2 use different values.
\r
76 static void prvRegisterCheck1( void *pvParameters );
\r
77 static void prvRegisterCheck2( void *pvParameters );
\r
79 /* Set to a non zero value should an error be found. */
\r
80 portBASE_TYPE xRegTestError = pdFALSE;
\r
82 /*-----------------------------------------------------------*/
\r
84 void vStartRegTestTasks( void )
\r
86 xTaskCreate( prvRegisterCheck1, ( signed char * ) "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
\r
87 xTaskCreate( prvRegisterCheck2, ( signed char * ) "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
\r
89 /*-----------------------------------------------------------*/
\r
91 portBASE_TYPE xAreRegTestTasksStillRunning( void )
\r
93 portBASE_TYPE xReturn;
\r
95 /* If a register was found to contain an unexpected value then the
\r
96 xRegTestError variable would have been set to a non zero value. */
\r
97 if( xRegTestError == pdFALSE )
\r
108 /*-----------------------------------------------------------*/
\r
110 static void prvRegisterCheck1( void *pvParameters )
\r
112 ( void ) pvParameters;
\r
116 asm( "LDI r31, 5" );
\r
117 asm( "MOV r0, r31" );
\r
118 asm( "LDI r31, 6" );
\r
119 asm( "MOV r1, r31" );
\r
120 asm( "LDI r31, 7" );
\r
121 asm( "MOV r2, r31" );
\r
122 asm( "LDI r31, 8" );
\r
123 asm( "MOV r3, r31" );
\r
124 asm( "LDI r31, 9" );
\r
125 asm( "MOV r4, r31" );
\r
126 asm( "LDI r31, 10" );
\r
127 asm( "MOV r5, r31" );
\r
128 asm( "LDI r31, 11" );
\r
129 asm( "MOV r6, r31" );
\r
130 asm( "LDI r31, 12" );
\r
131 asm( "MOV r7, r31" );
\r
132 asm( "LDI r31, 13" );
\r
133 asm( "MOV r8, r31" );
\r
134 asm( "LDI r31, 14" );
\r
135 asm( "MOV r9, r31" );
\r
136 asm( "LDI r31, 15" );
\r
137 asm( "MOV r10, r31" );
\r
138 asm( "LDI r31, 16" );
\r
139 asm( "MOV r11, r31" );
\r
140 asm( "LDI r31, 17" );
\r
141 asm( "MOV r12, r31" );
\r
142 asm( "LDI r31, 18" );
\r
143 asm( "MOV r13, r31" );
\r
144 asm( "LDI r31, 19" );
\r
145 asm( "MOV r14, r31" );
\r
146 asm( "LDI r31, 20" );
\r
147 asm( "MOV r15, r31" );
\r
148 asm( "LDI r16, 21" );
\r
149 asm( "LDI r17, 22" );
\r
150 asm( "LDI r18, 23" );
\r
151 asm( "LDI r19, 24" );
\r
152 asm( "LDI r20, 25" );
\r
153 asm( "LDI r21, 26" );
\r
154 asm( "LDI r22, 27" );
\r
155 asm( "LDI r23, 28" );
\r
156 asm( "LDI r24, 29" );
\r
157 asm( "LDI r25, 30" );
\r
158 asm( "LDI r26, 31" );
\r
159 asm( "LDI r27, 32" );
\r
160 asm( "LDI r30, 33" );
\r
162 asm( "LDI r31, 5" );
\r
163 asm( "CPSE r31, r0" );
\r
164 asm( "STS xRegTestError, r0" );
\r
165 asm( "LDI r31, 6" );
\r
166 asm( "CPSE r31, r1" );
\r
167 asm( "STS xRegTestError, r0" );
\r
168 asm( "LDI r31, 7" );
\r
169 asm( "CPSE r31, r2" );
\r
170 asm( "STS xRegTestError, r0" );
\r
171 asm( "LDI r31, 8" );
\r
172 asm( "CPSE r31, r3" );
\r
173 asm( "STS xRegTestError, r0" );
\r
174 asm( "LDI r31, 9" );
\r
175 asm( "CPSE r31, r4" );
\r
176 asm( "STS xRegTestError, r0" );
\r
177 asm( "LDI r31, 10" );
\r
178 asm( "CPSE r31, r5" );
\r
179 asm( "STS xRegTestError, r0" );
\r
180 asm( "LDI r31, 11" );
\r
181 asm( "CPSE r31, r6" );
\r
182 asm( "STS xRegTestError, r0" );
\r
183 asm( "LDI r31, 12" );
\r
184 asm( "CPSE r31, r7" );
\r
185 asm( "STS xRegTestError, r0" );
\r
186 asm( "LDI r31, 13" );
\r
187 asm( "CPSE r31, r8" );
\r
188 asm( "STS xRegTestError, r0" );
\r
189 asm( "LDI r31, 14" );
\r
190 asm( "CPSE r31, r9" );
\r
191 asm( "STS xRegTestError, r0" );
\r
192 asm( "LDI r31, 15" );
\r
193 asm( "CPSE r31, r10" );
\r
194 asm( "STS xRegTestError, r0" );
\r
195 asm( "LDI r31, 16" );
\r
196 asm( "CPSE r31, r11" );
\r
197 asm( "STS xRegTestError, r0" );
\r
198 asm( "LDI r31, 17" );
\r
199 asm( "CPSE r31, r12" );
\r
200 asm( "STS xRegTestError, r0" );
\r
201 asm( "LDI r31, 18" );
\r
202 asm( "CPSE r31, r13" );
\r
203 asm( "STS xRegTestError, r0" );
\r
204 asm( "LDI r31, 19" );
\r
205 asm( "CPSE r31, r14" );
\r
206 asm( "STS xRegTestError, r0" );
\r
207 asm( "LDI r31, 20" );
\r
208 asm( "CPSE r31, r15" );
\r
209 asm( "STS xRegTestError, r0" );
\r
210 asm( "LDI r31, 21" );
\r
211 asm( "CPSE r31, r16" );
\r
212 asm( "STS xRegTestError, r0" );
\r
213 asm( "LDI r31, 22" );
\r
214 asm( "CPSE r31, r17" );
\r
215 asm( "STS xRegTestError, r0" );
\r
216 asm( "LDI r31, 23" );
\r
217 asm( "CPSE r31, r18" );
\r
218 asm( "STS xRegTestError, r0" );
\r
219 asm( "LDI r31, 24" );
\r
220 asm( "CPSE r31, r19" );
\r
221 asm( "STS xRegTestError, r0" );
\r
222 asm( "LDI r31, 25" );
\r
223 asm( "CPSE r31, r20" );
\r
224 asm( "STS xRegTestError, r0" );
\r
225 asm( "LDI r31, 26" );
\r
226 asm( "CPSE r31, r21" );
\r
227 asm( "STS xRegTestError, r0" );
\r
228 asm( "LDI r31, 27" );
\r
229 asm( "CPSE r31, r22" );
\r
230 asm( "STS xRegTestError, r0" );
\r
231 asm( "LDI r31, 28" );
\r
232 asm( "CPSE r31, r23" );
\r
233 asm( "STS xRegTestError, r0" );
\r
234 asm( "LDI r31, 29" );
\r
235 asm( "CPSE r31, r24" );
\r
236 asm( "STS xRegTestError, r0" );
\r
237 asm( "LDI r31, 30" );
\r
238 asm( "CPSE r31, r25" );
\r
239 asm( "STS xRegTestError, r0" );
\r
240 asm( "LDI r31, 31" );
\r
241 asm( "CPSE r31, r26" );
\r
242 asm( "STS xRegTestError, r0" );
\r
243 asm( "LDI r31, 32" );
\r
244 asm( "CPSE r31, r27" );
\r
245 asm( "STS xRegTestError, r0" );
\r
246 asm( "LDI r31, 33" );
\r
247 asm( "CPSE r31, r30" );
\r
248 asm( "STS xRegTestError, r0" );
\r
251 /*-----------------------------------------------------------*/
\r
253 static void prvRegisterCheck2( void *pvParameters )
\r
255 ( void ) pvParameters;
\r
259 asm( "LDI r31, 1" );
\r
260 asm( "MOV r0, r31" );
\r
261 asm( "LDI r31, 2" );
\r
262 asm( "MOV r1, r31" );
\r
263 asm( "LDI r31, 3" );
\r
264 asm( "MOV r2, r31" );
\r
265 asm( "LDI r31, 4" );
\r
266 asm( "MOV r3, r31" );
\r
267 asm( "LDI r31, 5" );
\r
268 asm( "MOV r4, r31" );
\r
269 asm( "LDI r31, 6" );
\r
270 asm( "MOV r5, r31" );
\r
271 asm( "LDI r31, 7" );
\r
272 asm( "MOV r6, r31" );
\r
273 asm( "LDI r31, 8" );
\r
274 asm( "MOV r7, r31" );
\r
275 asm( "LDI r31, 9" );
\r
276 asm( "MOV r8, r31" );
\r
277 asm( "LDI r31, 10" );
\r
278 asm( "MOV r9, r31" );
\r
279 asm( "LDI r31, 11" );
\r
280 asm( "MOV r10, r31" );
\r
281 asm( "LDI r31, 12" );
\r
282 asm( "MOV r11, r31" );
\r
283 asm( "LDI r31, 13" );
\r
284 asm( "MOV r12, r31" );
\r
285 asm( "LDI r31, 14" );
\r
286 asm( "MOV r13, r31" );
\r
287 asm( "LDI r31, 15" );
\r
288 asm( "MOV r14, r31" );
\r
289 asm( "LDI r31, 16" );
\r
290 asm( "MOV r15, r31" );
\r
291 asm( "LDI r16, 17" );
\r
292 asm( "LDI r17, 18" );
\r
293 asm( "LDI r18, 19" );
\r
294 asm( "LDI r19, 20" );
\r
295 asm( "LDI r20, 21" );
\r
296 asm( "LDI r21, 22" );
\r
297 asm( "LDI r22, 23" );
\r
298 asm( "LDI r23, 24" );
\r
299 asm( "LDI r24, 25" );
\r
300 asm( "LDI r25, 26" );
\r
301 asm( "LDI r26, 27" );
\r
302 asm( "LDI r27, 28" );
\r
303 asm( "LDI r30, 29" );
\r
305 asm( "LDI r31, 1" );
\r
306 asm( "CPSE r31, r0" );
\r
307 asm( "STS xRegTestError, r0" );
\r
308 asm( "LDI r31, 2" );
\r
309 asm( "CPSE r31, r1" );
\r
310 asm( "STS xRegTestError, r0" );
\r
311 asm( "LDI r31, 3" );
\r
312 asm( "CPSE r31, r2" );
\r
313 asm( "STS xRegTestError, r0" );
\r
314 asm( "LDI r31, 4" );
\r
315 asm( "CPSE r31, r3" );
\r
316 asm( "STS xRegTestError, r0" );
\r
317 asm( "LDI r31, 5" );
\r
318 asm( "CPSE r31, r4" );
\r
319 asm( "STS xRegTestError, r0" );
\r
320 asm( "LDI r31, 6" );
\r
321 asm( "CPSE r31, r5" );
\r
322 asm( "STS xRegTestError, r0" );
\r
323 asm( "LDI r31, 7" );
\r
324 asm( "CPSE r31, r6" );
\r
325 asm( "STS xRegTestError, r0" );
\r
326 asm( "LDI r31, 8" );
\r
327 asm( "CPSE r31, r7" );
\r
328 asm( "STS xRegTestError, r0" );
\r
329 asm( "LDI r31, 9" );
\r
330 asm( "CPSE r31, r8" );
\r
331 asm( "STS xRegTestError, r0" );
\r
332 asm( "LDI r31, 10" );
\r
333 asm( "CPSE r31, r9" );
\r
334 asm( "STS xRegTestError, r0" );
\r
335 asm( "LDI r31, 11" );
\r
336 asm( "CPSE r31, r10" );
\r
337 asm( "STS xRegTestError, r0" );
\r
338 asm( "LDI r31, 12" );
\r
339 asm( "CPSE r31, r11" );
\r
340 asm( "STS xRegTestError, r0" );
\r
341 asm( "LDI r31, 13" );
\r
342 asm( "CPSE r31, r12" );
\r
343 asm( "STS xRegTestError, r0" );
\r
344 asm( "LDI r31, 14" );
\r
345 asm( "CPSE r31, r13" );
\r
346 asm( "STS xRegTestError, r0" );
\r
347 asm( "LDI r31, 15" );
\r
348 asm( "CPSE r31, r14" );
\r
349 asm( "STS xRegTestError, r0" );
\r
350 asm( "LDI r31, 16" );
\r
351 asm( "CPSE r31, r15" );
\r
352 asm( "STS xRegTestError, r0" );
\r
353 asm( "LDI r31, 17" );
\r
354 asm( "CPSE r31, r16" );
\r
355 asm( "STS xRegTestError, r0" );
\r
356 asm( "LDI r31, 18" );
\r
357 asm( "CPSE r31, r17" );
\r
358 asm( "STS xRegTestError, r0" );
\r
359 asm( "LDI r31, 19" );
\r
360 asm( "CPSE r31, r18" );
\r
361 asm( "STS xRegTestError, r0" );
\r
362 asm( "LDI r31, 20" );
\r
363 asm( "CPSE r31, r19" );
\r
364 asm( "STS xRegTestError, r0" );
\r
365 asm( "LDI r31, 21" );
\r
366 asm( "CPSE r31, r20" );
\r
367 asm( "STS xRegTestError, r0" );
\r
368 asm( "LDI r31, 22" );
\r
369 asm( "CPSE r31, r21" );
\r
370 asm( "STS xRegTestError, r0" );
\r
371 asm( "LDI r31, 23" );
\r
372 asm( "CPSE r31, r22" );
\r
373 asm( "STS xRegTestError, r0" );
\r
374 asm( "LDI r31, 24" );
\r
375 asm( "CPSE r31, r23" );
\r
376 asm( "STS xRegTestError, r0" );
\r
377 asm( "LDI r31, 25" );
\r
378 asm( "CPSE r31, r24" );
\r
379 asm( "STS xRegTestError, r0" );
\r
380 asm( "LDI r31, 26" );
\r
381 asm( "CPSE r31, r25" );
\r
382 asm( "STS xRegTestError, r0" );
\r
383 asm( "LDI r31, 27" );
\r
384 asm( "CPSE r31, r26" );
\r
385 asm( "STS xRegTestError, r0" );
\r
386 asm( "LDI r31, 28" );
\r
387 asm( "CPSE r31, r27" );
\r
388 asm( "STS xRegTestError, r0" );
\r
389 asm( "LDI r31, 29" );
\r
390 asm( "CPSE r31, r30" );
\r
391 asm( "STS xRegTestError, r0" );
\r