2 FreeRTOS.org V4.7.0 - Copyright (C) 2003-2007 Richard Barry.
\r
4 This file is part of the FreeRTOS.org distribution.
\r
6 FreeRTOS.org is free software; you can redistribute it and/or modify
\r
7 it under the terms of the GNU General Public License as published by
\r
8 the Free Software Foundation; either version 2 of the License, or
\r
9 (at your option) any later version.
\r
11 FreeRTOS.org is distributed in the hope that it will be useful,
\r
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
14 GNU General Public License for more details.
\r
16 You should have received a copy of the GNU General Public License
\r
17 along with FreeRTOS.org; if not, write to the Free Software
\r
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
\r
20 A special exception to the GPL can be applied should you wish to distribute
\r
21 a combined work that includes FreeRTOS.org, without being obliged to provide
\r
22 the source code for any proprietary components. See the licensing section
\r
23 of http://www.FreeRTOS.org for full details of how and when the exception
\r
26 ***************************************************************************
\r
27 See http://www.FreeRTOS.org for documentation, latest information, license
\r
28 and contact details. Please ensure to read the configuration and relevant
\r
29 port sections of the online documentation.
\r
31 Also see http://www.SafeRTOS.com a version that has been certified for use
\r
32 in safety critical systems, plus commercial licensing, development and
\r
34 ***************************************************************************
\r
37 /* Scheduler include files. */
\r
38 #include "FreeRTOS.h"
\r
41 /* Demo file headers. */
\r
42 #include "regtest.h"
\r
45 * Test tasks that sets registers to known values, then checks to ensure the
\r
46 * values remain as expected. Test 1 and test 2 use different values.
\r
48 static void prvRegisterCheck1( void *pvParameters );
\r
49 static void prvRegisterCheck2( void *pvParameters );
\r
51 /* Set to a non zero value should an error be found. */
\r
52 portBASE_TYPE xRegTestError = pdFALSE;
\r
54 /*-----------------------------------------------------------*/
\r
56 void vStartRegTestTasks( void )
\r
58 xTaskCreate( prvRegisterCheck1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
\r
59 xTaskCreate( prvRegisterCheck2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
\r
61 /*-----------------------------------------------------------*/
\r
63 portBASE_TYPE xAreRegTestTasksStillRunning( void )
\r
65 portBASE_TYPE xReturn;
\r
67 /* If a register was found to contain an unexpected value then the
\r
68 xRegTestError variable would have been set to a non zero value. */
\r
69 if( xRegTestError == pdFALSE )
\r
80 /*-----------------------------------------------------------*/
\r
82 static void prvRegisterCheck1( void *pvParameters )
\r
84 ( void ) pvParameters;
\r
88 asm( "LDI r31, 5" );
\r
89 asm( "MOV r0, r31" );
\r
90 asm( "LDI r31, 6" );
\r
91 asm( "MOV r1, r31" );
\r
92 asm( "LDI r31, 7" );
\r
93 asm( "MOV r2, r31" );
\r
94 asm( "LDI r31, 8" );
\r
95 asm( "MOV r3, r31" );
\r
96 asm( "LDI r31, 9" );
\r
97 asm( "MOV r4, r31" );
\r
98 asm( "LDI r31, 10" );
\r
99 asm( "MOV r5, r31" );
\r
100 asm( "LDI r31, 11" );
\r
101 asm( "MOV r6, r31" );
\r
102 asm( "LDI r31, 12" );
\r
103 asm( "MOV r7, r31" );
\r
104 asm( "LDI r31, 13" );
\r
105 asm( "MOV r8, r31" );
\r
106 asm( "LDI r31, 14" );
\r
107 asm( "MOV r9, r31" );
\r
108 asm( "LDI r31, 15" );
\r
109 asm( "MOV r10, r31" );
\r
110 asm( "LDI r31, 16" );
\r
111 asm( "MOV r11, r31" );
\r
112 asm( "LDI r31, 17" );
\r
113 asm( "MOV r12, r31" );
\r
114 asm( "LDI r31, 18" );
\r
115 asm( "MOV r13, r31" );
\r
116 asm( "LDI r31, 19" );
\r
117 asm( "MOV r14, r31" );
\r
118 asm( "LDI r31, 20" );
\r
119 asm( "MOV r15, r31" );
\r
120 asm( "LDI r16, 21" );
\r
121 asm( "LDI r17, 22" );
\r
122 asm( "LDI r18, 23" );
\r
123 asm( "LDI r19, 24" );
\r
124 asm( "LDI r20, 25" );
\r
125 asm( "LDI r21, 26" );
\r
126 asm( "LDI r22, 27" );
\r
127 asm( "LDI r23, 28" );
\r
128 asm( "LDI r24, 29" );
\r
129 asm( "LDI r25, 30" );
\r
130 asm( "LDI r26, 31" );
\r
131 asm( "LDI r27, 32" );
\r
132 asm( "LDI r30, 33" );
\r
134 asm( "LDI r31, 5" );
\r
135 asm( "CPSE r31, r0" );
\r
136 asm( "STS xRegTestError, r0" );
\r
137 asm( "LDI r31, 6" );
\r
138 asm( "CPSE r31, r1" );
\r
139 asm( "STS xRegTestError, r0" );
\r
140 asm( "LDI r31, 7" );
\r
141 asm( "CPSE r31, r2" );
\r
142 asm( "STS xRegTestError, r0" );
\r
143 asm( "LDI r31, 8" );
\r
144 asm( "CPSE r31, r3" );
\r
145 asm( "STS xRegTestError, r0" );
\r
146 asm( "LDI r31, 9" );
\r
147 asm( "CPSE r31, r4" );
\r
148 asm( "STS xRegTestError, r0" );
\r
149 asm( "LDI r31, 10" );
\r
150 asm( "CPSE r31, r5" );
\r
151 asm( "STS xRegTestError, r0" );
\r
152 asm( "LDI r31, 11" );
\r
153 asm( "CPSE r31, r6" );
\r
154 asm( "STS xRegTestError, r0" );
\r
155 asm( "LDI r31, 12" );
\r
156 asm( "CPSE r31, r7" );
\r
157 asm( "STS xRegTestError, r0" );
\r
158 asm( "LDI r31, 13" );
\r
159 asm( "CPSE r31, r8" );
\r
160 asm( "STS xRegTestError, r0" );
\r
161 asm( "LDI r31, 14" );
\r
162 asm( "CPSE r31, r9" );
\r
163 asm( "STS xRegTestError, r0" );
\r
164 asm( "LDI r31, 15" );
\r
165 asm( "CPSE r31, r10" );
\r
166 asm( "STS xRegTestError, r0" );
\r
167 asm( "LDI r31, 16" );
\r
168 asm( "CPSE r31, r11" );
\r
169 asm( "STS xRegTestError, r0" );
\r
170 asm( "LDI r31, 17" );
\r
171 asm( "CPSE r31, r12" );
\r
172 asm( "STS xRegTestError, r0" );
\r
173 asm( "LDI r31, 18" );
\r
174 asm( "CPSE r31, r13" );
\r
175 asm( "STS xRegTestError, r0" );
\r
176 asm( "LDI r31, 19" );
\r
177 asm( "CPSE r31, r14" );
\r
178 asm( "STS xRegTestError, r0" );
\r
179 asm( "LDI r31, 20" );
\r
180 asm( "CPSE r31, r15" );
\r
181 asm( "STS xRegTestError, r0" );
\r
182 asm( "LDI r31, 21" );
\r
183 asm( "CPSE r31, r16" );
\r
184 asm( "STS xRegTestError, r0" );
\r
185 asm( "LDI r31, 22" );
\r
186 asm( "CPSE r31, r17" );
\r
187 asm( "STS xRegTestError, r0" );
\r
188 asm( "LDI r31, 23" );
\r
189 asm( "CPSE r31, r18" );
\r
190 asm( "STS xRegTestError, r0" );
\r
191 asm( "LDI r31, 24" );
\r
192 asm( "CPSE r31, r19" );
\r
193 asm( "STS xRegTestError, r0" );
\r
194 asm( "LDI r31, 25" );
\r
195 asm( "CPSE r31, r20" );
\r
196 asm( "STS xRegTestError, r0" );
\r
197 asm( "LDI r31, 26" );
\r
198 asm( "CPSE r31, r21" );
\r
199 asm( "STS xRegTestError, r0" );
\r
200 asm( "LDI r31, 27" );
\r
201 asm( "CPSE r31, r22" );
\r
202 asm( "STS xRegTestError, r0" );
\r
203 asm( "LDI r31, 28" );
\r
204 asm( "CPSE r31, r23" );
\r
205 asm( "STS xRegTestError, r0" );
\r
206 asm( "LDI r31, 29" );
\r
207 asm( "CPSE r31, r24" );
\r
208 asm( "STS xRegTestError, r0" );
\r
209 asm( "LDI r31, 30" );
\r
210 asm( "CPSE r31, r25" );
\r
211 asm( "STS xRegTestError, r0" );
\r
212 asm( "LDI r31, 31" );
\r
213 asm( "CPSE r31, r26" );
\r
214 asm( "STS xRegTestError, r0" );
\r
215 asm( "LDI r31, 32" );
\r
216 asm( "CPSE r31, r27" );
\r
217 asm( "STS xRegTestError, r0" );
\r
218 asm( "LDI r31, 33" );
\r
219 asm( "CPSE r31, r30" );
\r
220 asm( "STS xRegTestError, r0" );
\r
223 /*-----------------------------------------------------------*/
\r
225 static void prvRegisterCheck2( void *pvParameters )
\r
227 ( void ) pvParameters;
\r
231 asm( "LDI r31, 1" );
\r
232 asm( "MOV r0, r31" );
\r
233 asm( "LDI r31, 2" );
\r
234 asm( "MOV r1, r31" );
\r
235 asm( "LDI r31, 3" );
\r
236 asm( "MOV r2, r31" );
\r
237 asm( "LDI r31, 4" );
\r
238 asm( "MOV r3, r31" );
\r
239 asm( "LDI r31, 5" );
\r
240 asm( "MOV r4, r31" );
\r
241 asm( "LDI r31, 6" );
\r
242 asm( "MOV r5, r31" );
\r
243 asm( "LDI r31, 7" );
\r
244 asm( "MOV r6, r31" );
\r
245 asm( "LDI r31, 8" );
\r
246 asm( "MOV r7, r31" );
\r
247 asm( "LDI r31, 9" );
\r
248 asm( "MOV r8, r31" );
\r
249 asm( "LDI r31, 10" );
\r
250 asm( "MOV r9, r31" );
\r
251 asm( "LDI r31, 11" );
\r
252 asm( "MOV r10, r31" );
\r
253 asm( "LDI r31, 12" );
\r
254 asm( "MOV r11, r31" );
\r
255 asm( "LDI r31, 13" );
\r
256 asm( "MOV r12, r31" );
\r
257 asm( "LDI r31, 14" );
\r
258 asm( "MOV r13, r31" );
\r
259 asm( "LDI r31, 15" );
\r
260 asm( "MOV r14, r31" );
\r
261 asm( "LDI r31, 16" );
\r
262 asm( "MOV r15, r31" );
\r
263 asm( "LDI r16, 17" );
\r
264 asm( "LDI r17, 18" );
\r
265 asm( "LDI r18, 19" );
\r
266 asm( "LDI r19, 20" );
\r
267 asm( "LDI r20, 21" );
\r
268 asm( "LDI r21, 22" );
\r
269 asm( "LDI r22, 23" );
\r
270 asm( "LDI r23, 24" );
\r
271 asm( "LDI r24, 25" );
\r
272 asm( "LDI r25, 26" );
\r
273 asm( "LDI r26, 27" );
\r
274 asm( "LDI r27, 28" );
\r
275 asm( "LDI r30, 29" );
\r
277 asm( "LDI r31, 1" );
\r
278 asm( "CPSE r31, r0" );
\r
279 asm( "STS xRegTestError, r0" );
\r
280 asm( "LDI r31, 2" );
\r
281 asm( "CPSE r31, r1" );
\r
282 asm( "STS xRegTestError, r0" );
\r
283 asm( "LDI r31, 3" );
\r
284 asm( "CPSE r31, r2" );
\r
285 asm( "STS xRegTestError, r0" );
\r
286 asm( "LDI r31, 4" );
\r
287 asm( "CPSE r31, r3" );
\r
288 asm( "STS xRegTestError, r0" );
\r
289 asm( "LDI r31, 5" );
\r
290 asm( "CPSE r31, r4" );
\r
291 asm( "STS xRegTestError, r0" );
\r
292 asm( "LDI r31, 6" );
\r
293 asm( "CPSE r31, r5" );
\r
294 asm( "STS xRegTestError, r0" );
\r
295 asm( "LDI r31, 7" );
\r
296 asm( "CPSE r31, r6" );
\r
297 asm( "STS xRegTestError, r0" );
\r
298 asm( "LDI r31, 8" );
\r
299 asm( "CPSE r31, r7" );
\r
300 asm( "STS xRegTestError, r0" );
\r
301 asm( "LDI r31, 9" );
\r
302 asm( "CPSE r31, r8" );
\r
303 asm( "STS xRegTestError, r0" );
\r
304 asm( "LDI r31, 10" );
\r
305 asm( "CPSE r31, r9" );
\r
306 asm( "STS xRegTestError, r0" );
\r
307 asm( "LDI r31, 11" );
\r
308 asm( "CPSE r31, r10" );
\r
309 asm( "STS xRegTestError, r0" );
\r
310 asm( "LDI r31, 12" );
\r
311 asm( "CPSE r31, r11" );
\r
312 asm( "STS xRegTestError, r0" );
\r
313 asm( "LDI r31, 13" );
\r
314 asm( "CPSE r31, r12" );
\r
315 asm( "STS xRegTestError, r0" );
\r
316 asm( "LDI r31, 14" );
\r
317 asm( "CPSE r31, r13" );
\r
318 asm( "STS xRegTestError, r0" );
\r
319 asm( "LDI r31, 15" );
\r
320 asm( "CPSE r31, r14" );
\r
321 asm( "STS xRegTestError, r0" );
\r
322 asm( "LDI r31, 16" );
\r
323 asm( "CPSE r31, r15" );
\r
324 asm( "STS xRegTestError, r0" );
\r
325 asm( "LDI r31, 17" );
\r
326 asm( "CPSE r31, r16" );
\r
327 asm( "STS xRegTestError, r0" );
\r
328 asm( "LDI r31, 18" );
\r
329 asm( "CPSE r31, r17" );
\r
330 asm( "STS xRegTestError, r0" );
\r
331 asm( "LDI r31, 19" );
\r
332 asm( "CPSE r31, r18" );
\r
333 asm( "STS xRegTestError, r0" );
\r
334 asm( "LDI r31, 20" );
\r
335 asm( "CPSE r31, r19" );
\r
336 asm( "STS xRegTestError, r0" );
\r
337 asm( "LDI r31, 21" );
\r
338 asm( "CPSE r31, r20" );
\r
339 asm( "STS xRegTestError, r0" );
\r
340 asm( "LDI r31, 22" );
\r
341 asm( "CPSE r31, r21" );
\r
342 asm( "STS xRegTestError, r0" );
\r
343 asm( "LDI r31, 23" );
\r
344 asm( "CPSE r31, r22" );
\r
345 asm( "STS xRegTestError, r0" );
\r
346 asm( "LDI r31, 24" );
\r
347 asm( "CPSE r31, r23" );
\r
348 asm( "STS xRegTestError, r0" );
\r
349 asm( "LDI r31, 25" );
\r
350 asm( "CPSE r31, r24" );
\r
351 asm( "STS xRegTestError, r0" );
\r
352 asm( "LDI r31, 26" );
\r
353 asm( "CPSE r31, r25" );
\r
354 asm( "STS xRegTestError, r0" );
\r
355 asm( "LDI r31, 27" );
\r
356 asm( "CPSE r31, r26" );
\r
357 asm( "STS xRegTestError, r0" );
\r
358 asm( "LDI r31, 28" );
\r
359 asm( "CPSE r31, r27" );
\r
360 asm( "STS xRegTestError, r0" );
\r
361 asm( "LDI r31, 29" );
\r
362 asm( "CPSE r31, r30" );
\r
363 asm( "STS xRegTestError, r0" );
\r