2 FreeRTOS V8.2.0rc1 - Copyright (C) 2014 Real Time Engineers Ltd.
\r
5 VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
\r
7 This file is part of the FreeRTOS distribution.
\r
9 FreeRTOS is free software; you can redistribute it and/or modify it under
\r
10 the terms of the GNU General Public License (version 2) as published by the
\r
11 Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
\r
13 >>! NOTE: The modification to the GPL is included to allow you to !<<
\r
14 >>! distribute a combined work that includes FreeRTOS without being !<<
\r
15 >>! obliged to provide the source code for proprietary components !<<
\r
16 >>! outside of the FreeRTOS kernel. !<<
\r
18 FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
\r
19 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
\r
20 FOR A PARTICULAR PURPOSE. Full license text is available on the following
\r
21 link: http://www.freertos.org/a00114.html
\r
25 ***************************************************************************
\r
27 * Having a problem? Start by reading the FAQ "My application does *
\r
28 * not run, what could be wrong?". Have you defined configASSERT()? *
\r
30 * http://www.FreeRTOS.org/FAQHelp.html *
\r
32 ***************************************************************************
\r
34 ***************************************************************************
\r
36 * FreeRTOS provides completely free yet professionally developed, *
\r
37 * robust, strictly quality controlled, supported, and cross *
\r
38 * platform software that is more than just the market leader, it *
\r
39 * is the industry's de facto standard. *
\r
41 * Help yourself get started quickly while simultaneously helping *
\r
42 * to support the FreeRTOS project by purchasing a FreeRTOS *
\r
43 * tutorial book, reference manual, or both: *
\r
44 * http://www.FreeRTOS.org/Documentation *
\r
46 ***************************************************************************
\r
48 ***************************************************************************
\r
50 * Investing in training allows your team to be as productive as *
\r
51 * possible as early as possible, lowering your overall development *
\r
52 * cost, and enabling you to bring a more robust product to market *
\r
53 * earlier than would otherwise be possible. Richard Barry is both *
\r
54 * the architect and key author of FreeRTOS, and so also the world's *
\r
55 * leading authority on what is the world's most popular real time *
\r
56 * kernel for deeply embedded MCU designs. Obtaining your training *
\r
57 * from Richard ensures your team will gain directly from his in-depth *
\r
58 * product knowledge and years of usage experience. Contact Real Time *
\r
59 * Engineers Ltd to enquire about the FreeRTOS Masterclass, presented *
\r
60 * by Richard Barry: http://www.FreeRTOS.org/contact
\r
62 ***************************************************************************
\r
64 ***************************************************************************
\r
66 * You are receiving this top quality software for free. Please play *
\r
67 * fair and reciprocate by reporting any suspected issues and *
\r
68 * participating in the community forum: *
\r
69 * http://www.FreeRTOS.org/support *
\r
73 ***************************************************************************
\r
75 http://www.FreeRTOS.org - Documentation, books, training, latest versions,
\r
76 license and Real Time Engineers Ltd. contact details.
\r
78 http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
\r
79 including FreeRTOS+Trace - an indispensable productivity tool, a DOS
\r
80 compatible FAT file system, and our tiny thread aware UDP/IP stack.
\r
82 http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
\r
83 Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
\r
85 http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
\r
86 Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
\r
87 licenses offer ticketed support, indemnification and commercial middleware.
\r
89 http://www.SafeRTOS.com - High Integrity Systems also provide a safety
\r
90 engineered and independently SIL3 certified version for use in safety and
\r
91 mission critical applications that require provable dependability.
\r
96 /* Scheduler include files. */
\r
97 #include "FreeRTOS.h"
\r
100 /* Demo file headers. */
\r
101 #include "regtest.h"
\r
104 * Test tasks that sets registers to known values, then checks to ensure the
\r
105 * values remain as expected. Test 1 and test 2 use different values.
\r
107 static void prvRegisterCheck1( void *pvParameters );
\r
108 static void prvRegisterCheck2( void *pvParameters );
\r
110 /* Set to a non zero value should an error be found. */
\r
111 portBASE_TYPE xRegTestError = pdFALSE;
\r
113 /*-----------------------------------------------------------*/
\r
115 void vStartRegTestTasks( void )
\r
117 xTaskCreate( prvRegisterCheck1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
\r
118 xTaskCreate( prvRegisterCheck2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
\r
120 /*-----------------------------------------------------------*/
\r
122 portBASE_TYPE xAreRegTestTasksStillRunning( void )
\r
124 portBASE_TYPE xReturn;
\r
126 /* If a register was found to contain an unexpected value then the
\r
127 xRegTestError variable would have been set to a non zero value. */
\r
128 if( xRegTestError == pdFALSE )
\r
139 /*-----------------------------------------------------------*/
\r
141 static void prvRegisterCheck1( void *pvParameters )
\r
143 ( void ) pvParameters;
\r
147 asm( "LDI r31, 5" );
\r
148 asm( "MOV r0, r31" );
\r
149 asm( "LDI r31, 6" );
\r
150 asm( "MOV r1, r31" );
\r
151 asm( "LDI r31, 7" );
\r
152 asm( "MOV r2, r31" );
\r
153 asm( "LDI r31, 8" );
\r
154 asm( "MOV r3, r31" );
\r
155 asm( "LDI r31, 9" );
\r
156 asm( "MOV r4, r31" );
\r
157 asm( "LDI r31, 10" );
\r
158 asm( "MOV r5, r31" );
\r
159 asm( "LDI r31, 11" );
\r
160 asm( "MOV r6, r31" );
\r
161 asm( "LDI r31, 12" );
\r
162 asm( "MOV r7, r31" );
\r
163 asm( "LDI r31, 13" );
\r
164 asm( "MOV r8, r31" );
\r
165 asm( "LDI r31, 14" );
\r
166 asm( "MOV r9, r31" );
\r
167 asm( "LDI r31, 15" );
\r
168 asm( "MOV r10, r31" );
\r
169 asm( "LDI r31, 16" );
\r
170 asm( "MOV r11, r31" );
\r
171 asm( "LDI r31, 17" );
\r
172 asm( "MOV r12, r31" );
\r
173 asm( "LDI r31, 18" );
\r
174 asm( "MOV r13, r31" );
\r
175 asm( "LDI r31, 19" );
\r
176 asm( "MOV r14, r31" );
\r
177 asm( "LDI r31, 20" );
\r
178 asm( "MOV r15, r31" );
\r
179 asm( "LDI r16, 21" );
\r
180 asm( "LDI r17, 22" );
\r
181 asm( "LDI r18, 23" );
\r
182 asm( "LDI r19, 24" );
\r
183 asm( "LDI r20, 25" );
\r
184 asm( "LDI r21, 26" );
\r
185 asm( "LDI r22, 27" );
\r
186 asm( "LDI r23, 28" );
\r
187 asm( "LDI r24, 29" );
\r
188 asm( "LDI r25, 30" );
\r
189 asm( "LDI r26, 31" );
\r
190 asm( "LDI r27, 32" );
\r
191 asm( "LDI r30, 33" );
\r
193 asm( "LDI r31, 5" );
\r
194 asm( "CPSE r31, r0" );
\r
195 asm( "STS xRegTestError, r0" );
\r
196 asm( "LDI r31, 6" );
\r
197 asm( "CPSE r31, r1" );
\r
198 asm( "STS xRegTestError, r0" );
\r
199 asm( "LDI r31, 7" );
\r
200 asm( "CPSE r31, r2" );
\r
201 asm( "STS xRegTestError, r0" );
\r
202 asm( "LDI r31, 8" );
\r
203 asm( "CPSE r31, r3" );
\r
204 asm( "STS xRegTestError, r0" );
\r
205 asm( "LDI r31, 9" );
\r
206 asm( "CPSE r31, r4" );
\r
207 asm( "STS xRegTestError, r0" );
\r
208 asm( "LDI r31, 10" );
\r
209 asm( "CPSE r31, r5" );
\r
210 asm( "STS xRegTestError, r0" );
\r
211 asm( "LDI r31, 11" );
\r
212 asm( "CPSE r31, r6" );
\r
213 asm( "STS xRegTestError, r0" );
\r
214 asm( "LDI r31, 12" );
\r
215 asm( "CPSE r31, r7" );
\r
216 asm( "STS xRegTestError, r0" );
\r
217 asm( "LDI r31, 13" );
\r
218 asm( "CPSE r31, r8" );
\r
219 asm( "STS xRegTestError, r0" );
\r
220 asm( "LDI r31, 14" );
\r
221 asm( "CPSE r31, r9" );
\r
222 asm( "STS xRegTestError, r0" );
\r
223 asm( "LDI r31, 15" );
\r
224 asm( "CPSE r31, r10" );
\r
225 asm( "STS xRegTestError, r0" );
\r
226 asm( "LDI r31, 16" );
\r
227 asm( "CPSE r31, r11" );
\r
228 asm( "STS xRegTestError, r0" );
\r
229 asm( "LDI r31, 17" );
\r
230 asm( "CPSE r31, r12" );
\r
231 asm( "STS xRegTestError, r0" );
\r
232 asm( "LDI r31, 18" );
\r
233 asm( "CPSE r31, r13" );
\r
234 asm( "STS xRegTestError, r0" );
\r
235 asm( "LDI r31, 19" );
\r
236 asm( "CPSE r31, r14" );
\r
237 asm( "STS xRegTestError, r0" );
\r
238 asm( "LDI r31, 20" );
\r
239 asm( "CPSE r31, r15" );
\r
240 asm( "STS xRegTestError, r0" );
\r
241 asm( "LDI r31, 21" );
\r
242 asm( "CPSE r31, r16" );
\r
243 asm( "STS xRegTestError, r0" );
\r
244 asm( "LDI r31, 22" );
\r
245 asm( "CPSE r31, r17" );
\r
246 asm( "STS xRegTestError, r0" );
\r
247 asm( "LDI r31, 23" );
\r
248 asm( "CPSE r31, r18" );
\r
249 asm( "STS xRegTestError, r0" );
\r
250 asm( "LDI r31, 24" );
\r
251 asm( "CPSE r31, r19" );
\r
252 asm( "STS xRegTestError, r0" );
\r
253 asm( "LDI r31, 25" );
\r
254 asm( "CPSE r31, r20" );
\r
255 asm( "STS xRegTestError, r0" );
\r
256 asm( "LDI r31, 26" );
\r
257 asm( "CPSE r31, r21" );
\r
258 asm( "STS xRegTestError, r0" );
\r
259 asm( "LDI r31, 27" );
\r
260 asm( "CPSE r31, r22" );
\r
261 asm( "STS xRegTestError, r0" );
\r
262 asm( "LDI r31, 28" );
\r
263 asm( "CPSE r31, r23" );
\r
264 asm( "STS xRegTestError, r0" );
\r
265 asm( "LDI r31, 29" );
\r
266 asm( "CPSE r31, r24" );
\r
267 asm( "STS xRegTestError, r0" );
\r
268 asm( "LDI r31, 30" );
\r
269 asm( "CPSE r31, r25" );
\r
270 asm( "STS xRegTestError, r0" );
\r
271 asm( "LDI r31, 31" );
\r
272 asm( "CPSE r31, r26" );
\r
273 asm( "STS xRegTestError, r0" );
\r
274 asm( "LDI r31, 32" );
\r
275 asm( "CPSE r31, r27" );
\r
276 asm( "STS xRegTestError, r0" );
\r
277 asm( "LDI r31, 33" );
\r
278 asm( "CPSE r31, r30" );
\r
279 asm( "STS xRegTestError, r0" );
\r
282 /*-----------------------------------------------------------*/
\r
284 static void prvRegisterCheck2( void *pvParameters )
\r
286 ( void ) pvParameters;
\r
290 asm( "LDI r31, 1" );
\r
291 asm( "MOV r0, r31" );
\r
292 asm( "LDI r31, 2" );
\r
293 asm( "MOV r1, r31" );
\r
294 asm( "LDI r31, 3" );
\r
295 asm( "MOV r2, r31" );
\r
296 asm( "LDI r31, 4" );
\r
297 asm( "MOV r3, r31" );
\r
298 asm( "LDI r31, 5" );
\r
299 asm( "MOV r4, r31" );
\r
300 asm( "LDI r31, 6" );
\r
301 asm( "MOV r5, r31" );
\r
302 asm( "LDI r31, 7" );
\r
303 asm( "MOV r6, r31" );
\r
304 asm( "LDI r31, 8" );
\r
305 asm( "MOV r7, r31" );
\r
306 asm( "LDI r31, 9" );
\r
307 asm( "MOV r8, r31" );
\r
308 asm( "LDI r31, 10" );
\r
309 asm( "MOV r9, r31" );
\r
310 asm( "LDI r31, 11" );
\r
311 asm( "MOV r10, r31" );
\r
312 asm( "LDI r31, 12" );
\r
313 asm( "MOV r11, r31" );
\r
314 asm( "LDI r31, 13" );
\r
315 asm( "MOV r12, r31" );
\r
316 asm( "LDI r31, 14" );
\r
317 asm( "MOV r13, r31" );
\r
318 asm( "LDI r31, 15" );
\r
319 asm( "MOV r14, r31" );
\r
320 asm( "LDI r31, 16" );
\r
321 asm( "MOV r15, r31" );
\r
322 asm( "LDI r16, 17" );
\r
323 asm( "LDI r17, 18" );
\r
324 asm( "LDI r18, 19" );
\r
325 asm( "LDI r19, 20" );
\r
326 asm( "LDI r20, 21" );
\r
327 asm( "LDI r21, 22" );
\r
328 asm( "LDI r22, 23" );
\r
329 asm( "LDI r23, 24" );
\r
330 asm( "LDI r24, 25" );
\r
331 asm( "LDI r25, 26" );
\r
332 asm( "LDI r26, 27" );
\r
333 asm( "LDI r27, 28" );
\r
334 asm( "LDI r30, 29" );
\r
336 asm( "LDI r31, 1" );
\r
337 asm( "CPSE r31, r0" );
\r
338 asm( "STS xRegTestError, r0" );
\r
339 asm( "LDI r31, 2" );
\r
340 asm( "CPSE r31, r1" );
\r
341 asm( "STS xRegTestError, r0" );
\r
342 asm( "LDI r31, 3" );
\r
343 asm( "CPSE r31, r2" );
\r
344 asm( "STS xRegTestError, r0" );
\r
345 asm( "LDI r31, 4" );
\r
346 asm( "CPSE r31, r3" );
\r
347 asm( "STS xRegTestError, r0" );
\r
348 asm( "LDI r31, 5" );
\r
349 asm( "CPSE r31, r4" );
\r
350 asm( "STS xRegTestError, r0" );
\r
351 asm( "LDI r31, 6" );
\r
352 asm( "CPSE r31, r5" );
\r
353 asm( "STS xRegTestError, r0" );
\r
354 asm( "LDI r31, 7" );
\r
355 asm( "CPSE r31, r6" );
\r
356 asm( "STS xRegTestError, r0" );
\r
357 asm( "LDI r31, 8" );
\r
358 asm( "CPSE r31, r7" );
\r
359 asm( "STS xRegTestError, r0" );
\r
360 asm( "LDI r31, 9" );
\r
361 asm( "CPSE r31, r8" );
\r
362 asm( "STS xRegTestError, r0" );
\r
363 asm( "LDI r31, 10" );
\r
364 asm( "CPSE r31, r9" );
\r
365 asm( "STS xRegTestError, r0" );
\r
366 asm( "LDI r31, 11" );
\r
367 asm( "CPSE r31, r10" );
\r
368 asm( "STS xRegTestError, r0" );
\r
369 asm( "LDI r31, 12" );
\r
370 asm( "CPSE r31, r11" );
\r
371 asm( "STS xRegTestError, r0" );
\r
372 asm( "LDI r31, 13" );
\r
373 asm( "CPSE r31, r12" );
\r
374 asm( "STS xRegTestError, r0" );
\r
375 asm( "LDI r31, 14" );
\r
376 asm( "CPSE r31, r13" );
\r
377 asm( "STS xRegTestError, r0" );
\r
378 asm( "LDI r31, 15" );
\r
379 asm( "CPSE r31, r14" );
\r
380 asm( "STS xRegTestError, r0" );
\r
381 asm( "LDI r31, 16" );
\r
382 asm( "CPSE r31, r15" );
\r
383 asm( "STS xRegTestError, r0" );
\r
384 asm( "LDI r31, 17" );
\r
385 asm( "CPSE r31, r16" );
\r
386 asm( "STS xRegTestError, r0" );
\r
387 asm( "LDI r31, 18" );
\r
388 asm( "CPSE r31, r17" );
\r
389 asm( "STS xRegTestError, r0" );
\r
390 asm( "LDI r31, 19" );
\r
391 asm( "CPSE r31, r18" );
\r
392 asm( "STS xRegTestError, r0" );
\r
393 asm( "LDI r31, 20" );
\r
394 asm( "CPSE r31, r19" );
\r
395 asm( "STS xRegTestError, r0" );
\r
396 asm( "LDI r31, 21" );
\r
397 asm( "CPSE r31, r20" );
\r
398 asm( "STS xRegTestError, r0" );
\r
399 asm( "LDI r31, 22" );
\r
400 asm( "CPSE r31, r21" );
\r
401 asm( "STS xRegTestError, r0" );
\r
402 asm( "LDI r31, 23" );
\r
403 asm( "CPSE r31, r22" );
\r
404 asm( "STS xRegTestError, r0" );
\r
405 asm( "LDI r31, 24" );
\r
406 asm( "CPSE r31, r23" );
\r
407 asm( "STS xRegTestError, r0" );
\r
408 asm( "LDI r31, 25" );
\r
409 asm( "CPSE r31, r24" );
\r
410 asm( "STS xRegTestError, r0" );
\r
411 asm( "LDI r31, 26" );
\r
412 asm( "CPSE r31, r25" );
\r
413 asm( "STS xRegTestError, r0" );
\r
414 asm( "LDI r31, 27" );
\r
415 asm( "CPSE r31, r26" );
\r
416 asm( "STS xRegTestError, r0" );
\r
417 asm( "LDI r31, 28" );
\r
418 asm( "CPSE r31, r27" );
\r
419 asm( "STS xRegTestError, r0" );
\r
420 asm( "LDI r31, 29" );
\r
421 asm( "CPSE r31, r30" );
\r
422 asm( "STS xRegTestError, r0" );
\r