2 FreeRTOS.org V4.5.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 for an IEC 61508 compliant version along
\r
32 with commercial development and support options.
\r
33 ***************************************************************************
\r
36 /* Scheduler include files. */
\r
37 #include "FreeRTOS.h"
\r
40 /* Demo file headers. */
\r
41 #include "regtest.h"
\r
44 * Test tasks that sets registers to known values, then checks to ensure the
\r
45 * values remain as expected. Test 1 and test 2 use different values.
\r
47 static void prvRegisterCheck1( void *pvParameters );
\r
48 static void prvRegisterCheck2( void *pvParameters );
\r
50 /* Set to a non zero value should an error be found. */
\r
51 portBASE_TYPE xRegTestError = pdFALSE;
\r
53 /*-----------------------------------------------------------*/
\r
55 void vStartRegTestTasks( void )
\r
57 xTaskCreate( prvRegisterCheck1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
\r
58 xTaskCreate( prvRegisterCheck2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
\r
60 /*-----------------------------------------------------------*/
\r
62 portBASE_TYPE xAreRegTestTasksStillRunning( void )
\r
64 portBASE_TYPE xReturn;
\r
66 /* If a register was found to contain an unexpected value then the
\r
67 xRegTestError variable would have been set to a non zero value. */
\r
68 if( xRegTestError == pdFALSE )
\r
79 /*-----------------------------------------------------------*/
\r
81 static void prvRegisterCheck1( void *pvParameters )
\r
83 ( void ) pvParameters;
\r
87 asm( "LDI r31, 5" );
\r
88 asm( "MOV r0, r31" );
\r
89 asm( "LDI r31, 6" );
\r
90 asm( "MOV r1, r31" );
\r
91 asm( "LDI r31, 7" );
\r
92 asm( "MOV r2, r31" );
\r
93 asm( "LDI r31, 8" );
\r
94 asm( "MOV r3, r31" );
\r
95 asm( "LDI r31, 9" );
\r
96 asm( "MOV r4, r31" );
\r
97 asm( "LDI r31, 10" );
\r
98 asm( "MOV r5, r31" );
\r
99 asm( "LDI r31, 11" );
\r
100 asm( "MOV r6, r31" );
\r
101 asm( "LDI r31, 12" );
\r
102 asm( "MOV r7, r31" );
\r
103 asm( "LDI r31, 13" );
\r
104 asm( "MOV r8, r31" );
\r
105 asm( "LDI r31, 14" );
\r
106 asm( "MOV r9, r31" );
\r
107 asm( "LDI r31, 15" );
\r
108 asm( "MOV r10, r31" );
\r
109 asm( "LDI r31, 16" );
\r
110 asm( "MOV r11, r31" );
\r
111 asm( "LDI r31, 17" );
\r
112 asm( "MOV r12, r31" );
\r
113 asm( "LDI r31, 18" );
\r
114 asm( "MOV r13, r31" );
\r
115 asm( "LDI r31, 19" );
\r
116 asm( "MOV r14, r31" );
\r
117 asm( "LDI r31, 20" );
\r
118 asm( "MOV r15, r31" );
\r
119 asm( "LDI r16, 21" );
\r
120 asm( "LDI r17, 22" );
\r
121 asm( "LDI r18, 23" );
\r
122 asm( "LDI r19, 24" );
\r
123 asm( "LDI r20, 25" );
\r
124 asm( "LDI r21, 26" );
\r
125 asm( "LDI r22, 27" );
\r
126 asm( "LDI r23, 28" );
\r
127 asm( "LDI r24, 29" );
\r
128 asm( "LDI r25, 30" );
\r
129 asm( "LDI r26, 31" );
\r
130 asm( "LDI r27, 32" );
\r
131 asm( "LDI r30, 33" );
\r
133 asm( "LDI r31, 5" );
\r
134 asm( "CPSE r31, r0" );
\r
135 asm( "STS xRegTestError, r0" );
\r
136 asm( "LDI r31, 6" );
\r
137 asm( "CPSE r31, r1" );
\r
138 asm( "STS xRegTestError, r0" );
\r
139 asm( "LDI r31, 7" );
\r
140 asm( "CPSE r31, r2" );
\r
141 asm( "STS xRegTestError, r0" );
\r
142 asm( "LDI r31, 8" );
\r
143 asm( "CPSE r31, r3" );
\r
144 asm( "STS xRegTestError, r0" );
\r
145 asm( "LDI r31, 9" );
\r
146 asm( "CPSE r31, r4" );
\r
147 asm( "STS xRegTestError, r0" );
\r
148 asm( "LDI r31, 10" );
\r
149 asm( "CPSE r31, r5" );
\r
150 asm( "STS xRegTestError, r0" );
\r
151 asm( "LDI r31, 11" );
\r
152 asm( "CPSE r31, r6" );
\r
153 asm( "STS xRegTestError, r0" );
\r
154 asm( "LDI r31, 12" );
\r
155 asm( "CPSE r31, r7" );
\r
156 asm( "STS xRegTestError, r0" );
\r
157 asm( "LDI r31, 13" );
\r
158 asm( "CPSE r31, r8" );
\r
159 asm( "STS xRegTestError, r0" );
\r
160 asm( "LDI r31, 14" );
\r
161 asm( "CPSE r31, r9" );
\r
162 asm( "STS xRegTestError, r0" );
\r
163 asm( "LDI r31, 15" );
\r
164 asm( "CPSE r31, r10" );
\r
165 asm( "STS xRegTestError, r0" );
\r
166 asm( "LDI r31, 16" );
\r
167 asm( "CPSE r31, r11" );
\r
168 asm( "STS xRegTestError, r0" );
\r
169 asm( "LDI r31, 17" );
\r
170 asm( "CPSE r31, r12" );
\r
171 asm( "STS xRegTestError, r0" );
\r
172 asm( "LDI r31, 18" );
\r
173 asm( "CPSE r31, r13" );
\r
174 asm( "STS xRegTestError, r0" );
\r
175 asm( "LDI r31, 19" );
\r
176 asm( "CPSE r31, r14" );
\r
177 asm( "STS xRegTestError, r0" );
\r
178 asm( "LDI r31, 20" );
\r
179 asm( "CPSE r31, r15" );
\r
180 asm( "STS xRegTestError, r0" );
\r
181 asm( "LDI r31, 21" );
\r
182 asm( "CPSE r31, r16" );
\r
183 asm( "STS xRegTestError, r0" );
\r
184 asm( "LDI r31, 22" );
\r
185 asm( "CPSE r31, r17" );
\r
186 asm( "STS xRegTestError, r0" );
\r
187 asm( "LDI r31, 23" );
\r
188 asm( "CPSE r31, r18" );
\r
189 asm( "STS xRegTestError, r0" );
\r
190 asm( "LDI r31, 24" );
\r
191 asm( "CPSE r31, r19" );
\r
192 asm( "STS xRegTestError, r0" );
\r
193 asm( "LDI r31, 25" );
\r
194 asm( "CPSE r31, r20" );
\r
195 asm( "STS xRegTestError, r0" );
\r
196 asm( "LDI r31, 26" );
\r
197 asm( "CPSE r31, r21" );
\r
198 asm( "STS xRegTestError, r0" );
\r
199 asm( "LDI r31, 27" );
\r
200 asm( "CPSE r31, r22" );
\r
201 asm( "STS xRegTestError, r0" );
\r
202 asm( "LDI r31, 28" );
\r
203 asm( "CPSE r31, r23" );
\r
204 asm( "STS xRegTestError, r0" );
\r
205 asm( "LDI r31, 29" );
\r
206 asm( "CPSE r31, r24" );
\r
207 asm( "STS xRegTestError, r0" );
\r
208 asm( "LDI r31, 30" );
\r
209 asm( "CPSE r31, r25" );
\r
210 asm( "STS xRegTestError, r0" );
\r
211 asm( "LDI r31, 31" );
\r
212 asm( "CPSE r31, r26" );
\r
213 asm( "STS xRegTestError, r0" );
\r
214 asm( "LDI r31, 32" );
\r
215 asm( "CPSE r31, r27" );
\r
216 asm( "STS xRegTestError, r0" );
\r
217 asm( "LDI r31, 33" );
\r
218 asm( "CPSE r31, r30" );
\r
219 asm( "STS xRegTestError, r0" );
\r
222 /*-----------------------------------------------------------*/
\r
224 static void prvRegisterCheck2( void *pvParameters )
\r
226 ( void ) pvParameters;
\r
230 asm( "LDI r31, 1" );
\r
231 asm( "MOV r0, r31" );
\r
232 asm( "LDI r31, 2" );
\r
233 asm( "MOV r1, r31" );
\r
234 asm( "LDI r31, 3" );
\r
235 asm( "MOV r2, r31" );
\r
236 asm( "LDI r31, 4" );
\r
237 asm( "MOV r3, r31" );
\r
238 asm( "LDI r31, 5" );
\r
239 asm( "MOV r4, r31" );
\r
240 asm( "LDI r31, 6" );
\r
241 asm( "MOV r5, r31" );
\r
242 asm( "LDI r31, 7" );
\r
243 asm( "MOV r6, r31" );
\r
244 asm( "LDI r31, 8" );
\r
245 asm( "MOV r7, r31" );
\r
246 asm( "LDI r31, 9" );
\r
247 asm( "MOV r8, r31" );
\r
248 asm( "LDI r31, 10" );
\r
249 asm( "MOV r9, r31" );
\r
250 asm( "LDI r31, 11" );
\r
251 asm( "MOV r10, r31" );
\r
252 asm( "LDI r31, 12" );
\r
253 asm( "MOV r11, r31" );
\r
254 asm( "LDI r31, 13" );
\r
255 asm( "MOV r12, r31" );
\r
256 asm( "LDI r31, 14" );
\r
257 asm( "MOV r13, r31" );
\r
258 asm( "LDI r31, 15" );
\r
259 asm( "MOV r14, r31" );
\r
260 asm( "LDI r31, 16" );
\r
261 asm( "MOV r15, r31" );
\r
262 asm( "LDI r16, 17" );
\r
263 asm( "LDI r17, 18" );
\r
264 asm( "LDI r18, 19" );
\r
265 asm( "LDI r19, 20" );
\r
266 asm( "LDI r20, 21" );
\r
267 asm( "LDI r21, 22" );
\r
268 asm( "LDI r22, 23" );
\r
269 asm( "LDI r23, 24" );
\r
270 asm( "LDI r24, 25" );
\r
271 asm( "LDI r25, 26" );
\r
272 asm( "LDI r26, 27" );
\r
273 asm( "LDI r27, 28" );
\r
274 asm( "LDI r30, 29" );
\r
276 asm( "LDI r31, 1" );
\r
277 asm( "CPSE r31, r0" );
\r
278 asm( "STS xRegTestError, r0" );
\r
279 asm( "LDI r31, 2" );
\r
280 asm( "CPSE r31, r1" );
\r
281 asm( "STS xRegTestError, r0" );
\r
282 asm( "LDI r31, 3" );
\r
283 asm( "CPSE r31, r2" );
\r
284 asm( "STS xRegTestError, r0" );
\r
285 asm( "LDI r31, 4" );
\r
286 asm( "CPSE r31, r3" );
\r
287 asm( "STS xRegTestError, r0" );
\r
288 asm( "LDI r31, 5" );
\r
289 asm( "CPSE r31, r4" );
\r
290 asm( "STS xRegTestError, r0" );
\r
291 asm( "LDI r31, 6" );
\r
292 asm( "CPSE r31, r5" );
\r
293 asm( "STS xRegTestError, r0" );
\r
294 asm( "LDI r31, 7" );
\r
295 asm( "CPSE r31, r6" );
\r
296 asm( "STS xRegTestError, r0" );
\r
297 asm( "LDI r31, 8" );
\r
298 asm( "CPSE r31, r7" );
\r
299 asm( "STS xRegTestError, r0" );
\r
300 asm( "LDI r31, 9" );
\r
301 asm( "CPSE r31, r8" );
\r
302 asm( "STS xRegTestError, r0" );
\r
303 asm( "LDI r31, 10" );
\r
304 asm( "CPSE r31, r9" );
\r
305 asm( "STS xRegTestError, r0" );
\r
306 asm( "LDI r31, 11" );
\r
307 asm( "CPSE r31, r10" );
\r
308 asm( "STS xRegTestError, r0" );
\r
309 asm( "LDI r31, 12" );
\r
310 asm( "CPSE r31, r11" );
\r
311 asm( "STS xRegTestError, r0" );
\r
312 asm( "LDI r31, 13" );
\r
313 asm( "CPSE r31, r12" );
\r
314 asm( "STS xRegTestError, r0" );
\r
315 asm( "LDI r31, 14" );
\r
316 asm( "CPSE r31, r13" );
\r
317 asm( "STS xRegTestError, r0" );
\r
318 asm( "LDI r31, 15" );
\r
319 asm( "CPSE r31, r14" );
\r
320 asm( "STS xRegTestError, r0" );
\r
321 asm( "LDI r31, 16" );
\r
322 asm( "CPSE r31, r15" );
\r
323 asm( "STS xRegTestError, r0" );
\r
324 asm( "LDI r31, 17" );
\r
325 asm( "CPSE r31, r16" );
\r
326 asm( "STS xRegTestError, r0" );
\r
327 asm( "LDI r31, 18" );
\r
328 asm( "CPSE r31, r17" );
\r
329 asm( "STS xRegTestError, r0" );
\r
330 asm( "LDI r31, 19" );
\r
331 asm( "CPSE r31, r18" );
\r
332 asm( "STS xRegTestError, r0" );
\r
333 asm( "LDI r31, 20" );
\r
334 asm( "CPSE r31, r19" );
\r
335 asm( "STS xRegTestError, r0" );
\r
336 asm( "LDI r31, 21" );
\r
337 asm( "CPSE r31, r20" );
\r
338 asm( "STS xRegTestError, r0" );
\r
339 asm( "LDI r31, 22" );
\r
340 asm( "CPSE r31, r21" );
\r
341 asm( "STS xRegTestError, r0" );
\r
342 asm( "LDI r31, 23" );
\r
343 asm( "CPSE r31, r22" );
\r
344 asm( "STS xRegTestError, r0" );
\r
345 asm( "LDI r31, 24" );
\r
346 asm( "CPSE r31, r23" );
\r
347 asm( "STS xRegTestError, r0" );
\r
348 asm( "LDI r31, 25" );
\r
349 asm( "CPSE r31, r24" );
\r
350 asm( "STS xRegTestError, r0" );
\r
351 asm( "LDI r31, 26" );
\r
352 asm( "CPSE r31, r25" );
\r
353 asm( "STS xRegTestError, r0" );
\r
354 asm( "LDI r31, 27" );
\r
355 asm( "CPSE r31, r26" );
\r
356 asm( "STS xRegTestError, r0" );
\r
357 asm( "LDI r31, 28" );
\r
358 asm( "CPSE r31, r27" );
\r
359 asm( "STS xRegTestError, r0" );
\r
360 asm( "LDI r31, 29" );
\r
361 asm( "CPSE r31, r30" );
\r
362 asm( "STS xRegTestError, r0" );
\r