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