2 FreeRTOS V7.4.1 - Copyright (C) 2013 Real Time Engineers Ltd.
\r
4 FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
\r
5 http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
\r
7 ***************************************************************************
\r
9 * FreeRTOS tutorial books are available in pdf and paperback. *
\r
10 * Complete, revised, and edited pdf reference manuals are also *
\r
13 * Purchasing FreeRTOS documentation will not only help you, by *
\r
14 * ensuring you get running as quickly as possible and with an *
\r
15 * in-depth knowledge of how to use FreeRTOS, it will also help *
\r
16 * the FreeRTOS project to continue with its mission of providing *
\r
17 * professional grade, cross platform, de facto standard solutions *
\r
18 * for microcontrollers - completely free of charge! *
\r
20 * >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
\r
22 * Thank you for using FreeRTOS, and thank you for your support! *
\r
24 ***************************************************************************
\r
27 This file is part of the FreeRTOS distribution.
\r
29 FreeRTOS is free software; you can redistribute it and/or modify it under
\r
30 the terms of the GNU General Public License (version 2) as published by the
\r
31 Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
\r
33 >>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
\r
34 distribute a combined work that includes FreeRTOS without being obliged to
\r
35 provide the source code for proprietary components outside of the FreeRTOS
\r
38 FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
\r
39 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
\r
40 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
\r
41 details. You should have received a copy of the GNU General Public License
\r
42 and the FreeRTOS license exception along with FreeRTOS; if not it can be
\r
43 viewed here: http://www.freertos.org/a00114.html and also obtained by
\r
44 writing to Real Time Engineers Ltd., contact details for whom are available
\r
45 on the FreeRTOS WEB site.
\r
49 ***************************************************************************
\r
51 * Having a problem? Start by reading the FAQ "My application does *
\r
52 * not run, what could be wrong?" *
\r
54 * http://www.FreeRTOS.org/FAQHelp.html *
\r
56 ***************************************************************************
\r
59 http://www.FreeRTOS.org - Documentation, books, training, latest versions,
\r
60 license and Real Time Engineers Ltd. contact details.
\r
62 http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
\r
63 including FreeRTOS+Trace - an indispensable productivity tool, and our new
\r
64 fully thread aware and reentrant UDP/IP stack.
\r
66 http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
\r
67 Integrity Systems, who sell the code with commercial support,
\r
68 indemnification and middleware, under the OpenRTOS brand.
\r
70 http://www.SafeRTOS.com - High Integrity Systems also provide a safety
\r
71 engineered and independently SIL3 certified version for use in safety and
\r
72 mission critical applications that require provable dependability.
\r
75 /* Scheduler include files. */
\r
76 #include "FreeRTOS.h"
\r
79 /* Demo file headers. */
\r
80 #include "regtest.h"
\r
83 * Test tasks that sets registers to known values, then checks to ensure the
\r
84 * values remain as expected. Test 1 and test 2 use different values.
\r
86 static void prvRegisterCheck1( void *pvParameters );
\r
87 static void prvRegisterCheck2( void *pvParameters );
\r
89 /* Set to a non zero value should an error be found. */
\r
90 portBASE_TYPE xRegTestError = pdFALSE;
\r
92 /*-----------------------------------------------------------*/
\r
94 void vStartRegTestTasks( void )
\r
96 xTaskCreate( prvRegisterCheck1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
\r
97 xTaskCreate( prvRegisterCheck2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
\r
99 /*-----------------------------------------------------------*/
\r
101 portBASE_TYPE xAreRegTestTasksStillRunning( void )
\r
103 portBASE_TYPE xReturn;
\r
105 /* If a register was found to contain an unexpected value then the
\r
106 xRegTestError variable would have been set to a non zero value. */
\r
107 if( xRegTestError == pdFALSE )
\r
118 /*-----------------------------------------------------------*/
\r
120 static void prvRegisterCheck1( void *pvParameters )
\r
122 ( void ) pvParameters;
\r
126 asm( "LDI r31, 5" );
\r
127 asm( "MOV r0, r31" );
\r
128 asm( "LDI r31, 6" );
\r
129 asm( "MOV r1, r31" );
\r
130 asm( "LDI r31, 7" );
\r
131 asm( "MOV r2, r31" );
\r
132 asm( "LDI r31, 8" );
\r
133 asm( "MOV r3, r31" );
\r
134 asm( "LDI r31, 9" );
\r
135 asm( "MOV r4, r31" );
\r
136 asm( "LDI r31, 10" );
\r
137 asm( "MOV r5, r31" );
\r
138 asm( "LDI r31, 11" );
\r
139 asm( "MOV r6, r31" );
\r
140 asm( "LDI r31, 12" );
\r
141 asm( "MOV r7, r31" );
\r
142 asm( "LDI r31, 13" );
\r
143 asm( "MOV r8, r31" );
\r
144 asm( "LDI r31, 14" );
\r
145 asm( "MOV r9, r31" );
\r
146 asm( "LDI r31, 15" );
\r
147 asm( "MOV r10, r31" );
\r
148 asm( "LDI r31, 16" );
\r
149 asm( "MOV r11, r31" );
\r
150 asm( "LDI r31, 17" );
\r
151 asm( "MOV r12, r31" );
\r
152 asm( "LDI r31, 18" );
\r
153 asm( "MOV r13, r31" );
\r
154 asm( "LDI r31, 19" );
\r
155 asm( "MOV r14, r31" );
\r
156 asm( "LDI r31, 20" );
\r
157 asm( "MOV r15, r31" );
\r
158 asm( "LDI r16, 21" );
\r
159 asm( "LDI r17, 22" );
\r
160 asm( "LDI r18, 23" );
\r
161 asm( "LDI r19, 24" );
\r
162 asm( "LDI r20, 25" );
\r
163 asm( "LDI r21, 26" );
\r
164 asm( "LDI r22, 27" );
\r
165 asm( "LDI r23, 28" );
\r
166 asm( "LDI r24, 29" );
\r
167 asm( "LDI r25, 30" );
\r
168 asm( "LDI r26, 31" );
\r
169 asm( "LDI r27, 32" );
\r
170 asm( "LDI r30, 33" );
\r
172 asm( "LDI r31, 5" );
\r
173 asm( "CPSE r31, r0" );
\r
174 asm( "STS xRegTestError, r0" );
\r
175 asm( "LDI r31, 6" );
\r
176 asm( "CPSE r31, r1" );
\r
177 asm( "STS xRegTestError, r0" );
\r
178 asm( "LDI r31, 7" );
\r
179 asm( "CPSE r31, r2" );
\r
180 asm( "STS xRegTestError, r0" );
\r
181 asm( "LDI r31, 8" );
\r
182 asm( "CPSE r31, r3" );
\r
183 asm( "STS xRegTestError, r0" );
\r
184 asm( "LDI r31, 9" );
\r
185 asm( "CPSE r31, r4" );
\r
186 asm( "STS xRegTestError, r0" );
\r
187 asm( "LDI r31, 10" );
\r
188 asm( "CPSE r31, r5" );
\r
189 asm( "STS xRegTestError, r0" );
\r
190 asm( "LDI r31, 11" );
\r
191 asm( "CPSE r31, r6" );
\r
192 asm( "STS xRegTestError, r0" );
\r
193 asm( "LDI r31, 12" );
\r
194 asm( "CPSE r31, r7" );
\r
195 asm( "STS xRegTestError, r0" );
\r
196 asm( "LDI r31, 13" );
\r
197 asm( "CPSE r31, r8" );
\r
198 asm( "STS xRegTestError, r0" );
\r
199 asm( "LDI r31, 14" );
\r
200 asm( "CPSE r31, r9" );
\r
201 asm( "STS xRegTestError, r0" );
\r
202 asm( "LDI r31, 15" );
\r
203 asm( "CPSE r31, r10" );
\r
204 asm( "STS xRegTestError, r0" );
\r
205 asm( "LDI r31, 16" );
\r
206 asm( "CPSE r31, r11" );
\r
207 asm( "STS xRegTestError, r0" );
\r
208 asm( "LDI r31, 17" );
\r
209 asm( "CPSE r31, r12" );
\r
210 asm( "STS xRegTestError, r0" );
\r
211 asm( "LDI r31, 18" );
\r
212 asm( "CPSE r31, r13" );
\r
213 asm( "STS xRegTestError, r0" );
\r
214 asm( "LDI r31, 19" );
\r
215 asm( "CPSE r31, r14" );
\r
216 asm( "STS xRegTestError, r0" );
\r
217 asm( "LDI r31, 20" );
\r
218 asm( "CPSE r31, r15" );
\r
219 asm( "STS xRegTestError, r0" );
\r
220 asm( "LDI r31, 21" );
\r
221 asm( "CPSE r31, r16" );
\r
222 asm( "STS xRegTestError, r0" );
\r
223 asm( "LDI r31, 22" );
\r
224 asm( "CPSE r31, r17" );
\r
225 asm( "STS xRegTestError, r0" );
\r
226 asm( "LDI r31, 23" );
\r
227 asm( "CPSE r31, r18" );
\r
228 asm( "STS xRegTestError, r0" );
\r
229 asm( "LDI r31, 24" );
\r
230 asm( "CPSE r31, r19" );
\r
231 asm( "STS xRegTestError, r0" );
\r
232 asm( "LDI r31, 25" );
\r
233 asm( "CPSE r31, r20" );
\r
234 asm( "STS xRegTestError, r0" );
\r
235 asm( "LDI r31, 26" );
\r
236 asm( "CPSE r31, r21" );
\r
237 asm( "STS xRegTestError, r0" );
\r
238 asm( "LDI r31, 27" );
\r
239 asm( "CPSE r31, r22" );
\r
240 asm( "STS xRegTestError, r0" );
\r
241 asm( "LDI r31, 28" );
\r
242 asm( "CPSE r31, r23" );
\r
243 asm( "STS xRegTestError, r0" );
\r
244 asm( "LDI r31, 29" );
\r
245 asm( "CPSE r31, r24" );
\r
246 asm( "STS xRegTestError, r0" );
\r
247 asm( "LDI r31, 30" );
\r
248 asm( "CPSE r31, r25" );
\r
249 asm( "STS xRegTestError, r0" );
\r
250 asm( "LDI r31, 31" );
\r
251 asm( "CPSE r31, r26" );
\r
252 asm( "STS xRegTestError, r0" );
\r
253 asm( "LDI r31, 32" );
\r
254 asm( "CPSE r31, r27" );
\r
255 asm( "STS xRegTestError, r0" );
\r
256 asm( "LDI r31, 33" );
\r
257 asm( "CPSE r31, r30" );
\r
258 asm( "STS xRegTestError, r0" );
\r
261 /*-----------------------------------------------------------*/
\r
263 static void prvRegisterCheck2( void *pvParameters )
\r
265 ( void ) pvParameters;
\r
269 asm( "LDI r31, 1" );
\r
270 asm( "MOV r0, r31" );
\r
271 asm( "LDI r31, 2" );
\r
272 asm( "MOV r1, r31" );
\r
273 asm( "LDI r31, 3" );
\r
274 asm( "MOV r2, r31" );
\r
275 asm( "LDI r31, 4" );
\r
276 asm( "MOV r3, r31" );
\r
277 asm( "LDI r31, 5" );
\r
278 asm( "MOV r4, r31" );
\r
279 asm( "LDI r31, 6" );
\r
280 asm( "MOV r5, r31" );
\r
281 asm( "LDI r31, 7" );
\r
282 asm( "MOV r6, r31" );
\r
283 asm( "LDI r31, 8" );
\r
284 asm( "MOV r7, r31" );
\r
285 asm( "LDI r31, 9" );
\r
286 asm( "MOV r8, r31" );
\r
287 asm( "LDI r31, 10" );
\r
288 asm( "MOV r9, r31" );
\r
289 asm( "LDI r31, 11" );
\r
290 asm( "MOV r10, r31" );
\r
291 asm( "LDI r31, 12" );
\r
292 asm( "MOV r11, r31" );
\r
293 asm( "LDI r31, 13" );
\r
294 asm( "MOV r12, r31" );
\r
295 asm( "LDI r31, 14" );
\r
296 asm( "MOV r13, r31" );
\r
297 asm( "LDI r31, 15" );
\r
298 asm( "MOV r14, r31" );
\r
299 asm( "LDI r31, 16" );
\r
300 asm( "MOV r15, r31" );
\r
301 asm( "LDI r16, 17" );
\r
302 asm( "LDI r17, 18" );
\r
303 asm( "LDI r18, 19" );
\r
304 asm( "LDI r19, 20" );
\r
305 asm( "LDI r20, 21" );
\r
306 asm( "LDI r21, 22" );
\r
307 asm( "LDI r22, 23" );
\r
308 asm( "LDI r23, 24" );
\r
309 asm( "LDI r24, 25" );
\r
310 asm( "LDI r25, 26" );
\r
311 asm( "LDI r26, 27" );
\r
312 asm( "LDI r27, 28" );
\r
313 asm( "LDI r30, 29" );
\r
315 asm( "LDI r31, 1" );
\r
316 asm( "CPSE r31, r0" );
\r
317 asm( "STS xRegTestError, r0" );
\r
318 asm( "LDI r31, 2" );
\r
319 asm( "CPSE r31, r1" );
\r
320 asm( "STS xRegTestError, r0" );
\r
321 asm( "LDI r31, 3" );
\r
322 asm( "CPSE r31, r2" );
\r
323 asm( "STS xRegTestError, r0" );
\r
324 asm( "LDI r31, 4" );
\r
325 asm( "CPSE r31, r3" );
\r
326 asm( "STS xRegTestError, r0" );
\r
327 asm( "LDI r31, 5" );
\r
328 asm( "CPSE r31, r4" );
\r
329 asm( "STS xRegTestError, r0" );
\r
330 asm( "LDI r31, 6" );
\r
331 asm( "CPSE r31, r5" );
\r
332 asm( "STS xRegTestError, r0" );
\r
333 asm( "LDI r31, 7" );
\r
334 asm( "CPSE r31, r6" );
\r
335 asm( "STS xRegTestError, r0" );
\r
336 asm( "LDI r31, 8" );
\r
337 asm( "CPSE r31, r7" );
\r
338 asm( "STS xRegTestError, r0" );
\r
339 asm( "LDI r31, 9" );
\r
340 asm( "CPSE r31, r8" );
\r
341 asm( "STS xRegTestError, r0" );
\r
342 asm( "LDI r31, 10" );
\r
343 asm( "CPSE r31, r9" );
\r
344 asm( "STS xRegTestError, r0" );
\r
345 asm( "LDI r31, 11" );
\r
346 asm( "CPSE r31, r10" );
\r
347 asm( "STS xRegTestError, r0" );
\r
348 asm( "LDI r31, 12" );
\r
349 asm( "CPSE r31, r11" );
\r
350 asm( "STS xRegTestError, r0" );
\r
351 asm( "LDI r31, 13" );
\r
352 asm( "CPSE r31, r12" );
\r
353 asm( "STS xRegTestError, r0" );
\r
354 asm( "LDI r31, 14" );
\r
355 asm( "CPSE r31, r13" );
\r
356 asm( "STS xRegTestError, r0" );
\r
357 asm( "LDI r31, 15" );
\r
358 asm( "CPSE r31, r14" );
\r
359 asm( "STS xRegTestError, r0" );
\r
360 asm( "LDI r31, 16" );
\r
361 asm( "CPSE r31, r15" );
\r
362 asm( "STS xRegTestError, r0" );
\r
363 asm( "LDI r31, 17" );
\r
364 asm( "CPSE r31, r16" );
\r
365 asm( "STS xRegTestError, r0" );
\r
366 asm( "LDI r31, 18" );
\r
367 asm( "CPSE r31, r17" );
\r
368 asm( "STS xRegTestError, r0" );
\r
369 asm( "LDI r31, 19" );
\r
370 asm( "CPSE r31, r18" );
\r
371 asm( "STS xRegTestError, r0" );
\r
372 asm( "LDI r31, 20" );
\r
373 asm( "CPSE r31, r19" );
\r
374 asm( "STS xRegTestError, r0" );
\r
375 asm( "LDI r31, 21" );
\r
376 asm( "CPSE r31, r20" );
\r
377 asm( "STS xRegTestError, r0" );
\r
378 asm( "LDI r31, 22" );
\r
379 asm( "CPSE r31, r21" );
\r
380 asm( "STS xRegTestError, r0" );
\r
381 asm( "LDI r31, 23" );
\r
382 asm( "CPSE r31, r22" );
\r
383 asm( "STS xRegTestError, r0" );
\r
384 asm( "LDI r31, 24" );
\r
385 asm( "CPSE r31, r23" );
\r
386 asm( "STS xRegTestError, r0" );
\r
387 asm( "LDI r31, 25" );
\r
388 asm( "CPSE r31, r24" );
\r
389 asm( "STS xRegTestError, r0" );
\r
390 asm( "LDI r31, 26" );
\r
391 asm( "CPSE r31, r25" );
\r
392 asm( "STS xRegTestError, r0" );
\r
393 asm( "LDI r31, 27" );
\r
394 asm( "CPSE r31, r26" );
\r
395 asm( "STS xRegTestError, r0" );
\r
396 asm( "LDI r31, 28" );
\r
397 asm( "CPSE r31, r27" );
\r
398 asm( "STS xRegTestError, r0" );
\r
399 asm( "LDI r31, 29" );
\r
400 asm( "CPSE r31, r30" );
\r
401 asm( "STS xRegTestError, r0" );
\r