]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/AVR_ATMega323_IAR/regtest.c
Update version number.
[freertos] / FreeRTOS / Demo / AVR_ATMega323_IAR / regtest.c
1 /*\r
2     FreeRTOS V7.5.1 - Copyright (C) 2013 Real Time Engineers Ltd.\r
3 \r
4     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
5 \r
6     ***************************************************************************\r
7      *                                                                       *\r
8      *    FreeRTOS provides completely free yet professionally developed,    *\r
9      *    robust, strictly quality controlled, supported, and cross          *\r
10      *    platform software that has become a de facto standard.             *\r
11      *                                                                       *\r
12      *    Help yourself get started quickly and support the FreeRTOS         *\r
13      *    project by purchasing a FreeRTOS tutorial book, reference          *\r
14      *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
15      *                                                                       *\r
16      *    Thank you!                                                         *\r
17      *                                                                       *\r
18     ***************************************************************************\r
19 \r
20     This file is part of the FreeRTOS distribution.\r
21 \r
22     FreeRTOS is free software; you can redistribute it and/or modify it under\r
23     the terms of the GNU General Public License (version 2) as published by the\r
24     Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
25 \r
26     >>! NOTE: The modification to the GPL is included to allow you to distribute\r
27     >>! a combined work that includes FreeRTOS without being obliged to provide\r
28     >>! the source code for proprietary components outside of the FreeRTOS\r
29     >>! kernel.\r
30 \r
31     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
32     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
33     FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
34     link: http://www.freertos.org/a00114.html\r
35 \r
36     1 tab == 4 spaces!\r
37 \r
38     ***************************************************************************\r
39      *                                                                       *\r
40      *    Having a problem?  Start by reading the FAQ "My application does   *\r
41      *    not run, what could be wrong?"                                     *\r
42      *                                                                       *\r
43      *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
44      *                                                                       *\r
45     ***************************************************************************\r
46 \r
47     http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
48     license and Real Time Engineers Ltd. contact details.\r
49 \r
50     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
51     including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
52     compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
53 \r
54     http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
55     Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
56     licenses offer ticketed support, indemnification and middleware.\r
57 \r
58     http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
59     engineered and independently SIL3 certified version for use in safety and\r
60     mission critical applications that require provable dependability.\r
61 \r
62     1 tab == 4 spaces!\r
63 */\r
64 \r
65 /* Scheduler include files. */\r
66 #include "FreeRTOS.h"\r
67 #include "task.h"\r
68 \r
69 /* Demo file headers. */\r
70 #include "regtest.h"\r
71 \r
72 /*\r
73  * Test tasks that sets registers to known values, then checks to ensure the\r
74  * values remain as expected.  Test 1 and test 2 use different values.\r
75  */\r
76 static void prvRegisterCheck1( void *pvParameters );\r
77 static void prvRegisterCheck2( void *pvParameters );\r
78 \r
79 /* Set to a non zero value should an error be found. */\r
80 portBASE_TYPE xRegTestError = pdFALSE;\r
81 \r
82 /*-----------------------------------------------------------*/\r
83 \r
84 void vStartRegTestTasks( void )\r
85 {\r
86         xTaskCreate( prvRegisterCheck1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
87         xTaskCreate( prvRegisterCheck2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );               \r
88 }\r
89 /*-----------------------------------------------------------*/\r
90 \r
91 portBASE_TYPE xAreRegTestTasksStillRunning( void )\r
92 {\r
93 portBASE_TYPE xReturn;\r
94 \r
95         /* If a register was found to contain an unexpected value then the\r
96         xRegTestError variable would have been set to a non zero value. */\r
97         if( xRegTestError == pdFALSE )\r
98         {\r
99                 xReturn = pdTRUE;\r
100         }\r
101         else\r
102         {\r
103                 xReturn = pdFALSE;\r
104         }\r
105         \r
106         return xReturn;\r
107 }\r
108 /*-----------------------------------------------------------*/\r
109 \r
110 static void prvRegisterCheck1( void *pvParameters )\r
111 {\r
112         ( void ) pvParameters;\r
113 \r
114         for( ;; )\r
115         {\r
116                 asm(    "LDI    r31,    5"              );              \r
117                 asm(    "MOV    r0,             r31"    );\r
118                 asm(    "LDI    r31,    6"              );\r
119                 asm(    "MOV    r1,             r31"    );\r
120                 asm(    "LDI    r31,    7"              );\r
121                 asm(    "MOV    r2,             r31"    );\r
122                 asm(    "LDI    r31,    8"              );\r
123                 asm(    "MOV    r3,             r31"    );\r
124                 asm(    "LDI    r31,    9"              );\r
125                 asm(    "MOV    r4,             r31"    );\r
126                 asm(    "LDI    r31,    10"             );\r
127                 asm(    "MOV    r5,             r31"    );\r
128                 asm(    "LDI    r31,    11"             );\r
129                 asm(    "MOV    r6,             r31"    );\r
130                 asm(    "LDI    r31,    12"             );\r
131                 asm(    "MOV    r7,             r31"    );\r
132                 asm(    "LDI    r31,    13"             );\r
133                 asm(    "MOV    r8,             r31"    );\r
134                 asm(    "LDI    r31,    14"             );\r
135                 asm(    "MOV    r9,             r31"    );\r
136                 asm(    "LDI    r31,    15"             );\r
137                 asm(    "MOV    r10,    r31"    );\r
138                 asm(    "LDI    r31,    16"             );\r
139                 asm(    "MOV    r11,    r31"    );\r
140                 asm(    "LDI    r31,    17"             );\r
141                 asm(    "MOV    r12,    r31"    );\r
142                 asm(    "LDI    r31,    18"             );\r
143                 asm(    "MOV    r13,    r31"    );\r
144                 asm(    "LDI    r31,    19"             );\r
145                 asm(    "MOV    r14,    r31"    );\r
146                 asm(    "LDI    r31,    20"             );\r
147                 asm(    "MOV    r15,    r31"    );\r
148                 asm(    "LDI    r16,    21"             );\r
149                 asm(    "LDI    r17,    22"             );\r
150                 asm(    "LDI    r18,    23"             );\r
151                 asm(    "LDI    r19,    24"             );\r
152                 asm(    "LDI    r20,    25"             );\r
153                 asm(    "LDI    r21,    26"             );\r
154                 asm(    "LDI    r22,    27"             );\r
155                 asm(    "LDI    r23,    28"             );\r
156                 asm(    "LDI    r24,    29"             );\r
157                 asm(    "LDI    r25,    30"             );\r
158                 asm(    "LDI    r26,    31"             );\r
159                 asm(    "LDI    r27,    32"             );\r
160                 asm(    "LDI    r30,    33"             );\r
161 \r
162                 asm(    "LDI    r31,    5"                      );\r
163                 asm(    "CPSE   r31,    r0"                     );\r
164                 asm(    "STS    xRegTestError, r0"      );\r
165                 asm(    "LDI    r31,    6"                      );\r
166                 asm(    "CPSE   r31,    r1"                     );\r
167                 asm(    "STS    xRegTestError, r0"      );\r
168                 asm(    "LDI    r31,    7"                      );\r
169                 asm(    "CPSE   r31,    r2"                     );\r
170                 asm(    "STS    xRegTestError, r0"      );\r
171                 asm(    "LDI    r31,    8"                      );\r
172                 asm(    "CPSE   r31,    r3"                     );\r
173                 asm(    "STS    xRegTestError, r0"      );\r
174                 asm(    "LDI    r31,    9"                      );\r
175                 asm(    "CPSE   r31,    r4"                     );\r
176                 asm(    "STS    xRegTestError, r0"      );\r
177                 asm(    "LDI    r31,    10"                     );\r
178                 asm(    "CPSE   r31,    r5"                     );\r
179                 asm(    "STS    xRegTestError, r0"      );\r
180                 asm(    "LDI    r31,    11"                     );\r
181                 asm(    "CPSE   r31,    r6"                     );\r
182                 asm(    "STS    xRegTestError, r0"      );\r
183                 asm(    "LDI    r31,    12"                     );\r
184                 asm(    "CPSE   r31,    r7"                     );\r
185                 asm(    "STS    xRegTestError, r0"      );\r
186                 asm(    "LDI    r31,    13"                     );\r
187                 asm(    "CPSE   r31,    r8"                     );\r
188                 asm(    "STS    xRegTestError, r0"      );\r
189                 asm(    "LDI    r31,    14"                     );\r
190                 asm(    "CPSE   r31,    r9"                     );\r
191                 asm(    "STS    xRegTestError, r0"      );\r
192                 asm(    "LDI    r31,    15"                     );\r
193                 asm(    "CPSE   r31,    r10"            );\r
194                 asm(    "STS    xRegTestError, r0"      );\r
195                 asm(    "LDI    r31,    16"                     );\r
196                 asm(    "CPSE   r31,    r11"            );\r
197                 asm(    "STS    xRegTestError, r0"      );\r
198                 asm(    "LDI    r31,    17"                     );\r
199                 asm(    "CPSE   r31,    r12"            );\r
200                 asm(    "STS    xRegTestError, r0"      );\r
201                 asm(    "LDI    r31,    18"                     );\r
202                 asm(    "CPSE   r31,    r13"            );\r
203                 asm(    "STS    xRegTestError, r0"      );\r
204                 asm(    "LDI    r31,    19"                     );\r
205                 asm(    "CPSE   r31,    r14"            );\r
206                 asm(    "STS    xRegTestError, r0"      );\r
207                 asm(    "LDI    r31,    20"                     );\r
208                 asm(    "CPSE   r31,    r15"            );\r
209                 asm(    "STS    xRegTestError, r0"      );\r
210                 asm(    "LDI    r31,    21"                     );\r
211                 asm(    "CPSE   r31,    r16"            );\r
212                 asm(    "STS    xRegTestError, r0"      );\r
213                 asm(    "LDI    r31,    22"                     );\r
214                 asm(    "CPSE   r31,    r17"            );\r
215                 asm(    "STS    xRegTestError, r0"      );\r
216                 asm(    "LDI    r31,    23"                     );\r
217                 asm(    "CPSE   r31,    r18"            );\r
218                 asm(    "STS    xRegTestError, r0"      );\r
219                 asm(    "LDI    r31,    24"                     );\r
220                 asm(    "CPSE   r31,    r19"            );\r
221                 asm(    "STS    xRegTestError, r0"      );\r
222                 asm(    "LDI    r31,    25"                     );\r
223                 asm(    "CPSE   r31,    r20"            );\r
224                 asm(    "STS    xRegTestError, r0"      );\r
225                 asm(    "LDI    r31,    26"                     );\r
226                 asm(    "CPSE   r31,    r21"            );\r
227                 asm(    "STS    xRegTestError, r0"      );\r
228                 asm(    "LDI    r31,    27"                     );\r
229                 asm(    "CPSE   r31,    r22"            );\r
230                 asm(    "STS    xRegTestError, r0"      );\r
231                 asm(    "LDI    r31,    28"                     );\r
232                 asm(    "CPSE   r31,    r23"            );\r
233                 asm(    "STS    xRegTestError, r0"      );\r
234                 asm(    "LDI    r31,    29"                     );\r
235                 asm(    "CPSE   r31,    r24"            );\r
236                 asm(    "STS    xRegTestError, r0"      );\r
237                 asm(    "LDI    r31,    30"                     );\r
238                 asm(    "CPSE   r31,    r25"            );\r
239                 asm(    "STS    xRegTestError, r0"      );\r
240                 asm(    "LDI    r31,    31"                     );\r
241                 asm(    "CPSE   r31,    r26"            );\r
242                 asm(    "STS    xRegTestError, r0"      );\r
243                 asm(    "LDI    r31,    32"                     );\r
244                 asm(    "CPSE   r31,    r27"            );\r
245                 asm(    "STS    xRegTestError, r0"      );\r
246                 asm(    "LDI    r31,    33"                     );\r
247                 asm(    "CPSE   r31,    r30"            );\r
248                 asm(    "STS    xRegTestError, r0"      );\r
249         }\r
250 }\r
251 /*-----------------------------------------------------------*/\r
252 \r
253 static void prvRegisterCheck2( void *pvParameters )\r
254 {\r
255         ( void ) pvParameters;\r
256 \r
257         for( ;; )\r
258         {\r
259                 asm(    "LDI    r31,    1"              );              \r
260                 asm(    "MOV    r0,             r31"    );\r
261                 asm(    "LDI    r31,    2"              );\r
262                 asm(    "MOV    r1,             r31"    );\r
263                 asm(    "LDI    r31,    3"              );\r
264                 asm(    "MOV    r2,             r31"    );\r
265                 asm(    "LDI    r31,    4"              );\r
266                 asm(    "MOV    r3,             r31"    );\r
267                 asm(    "LDI    r31,    5"              );\r
268                 asm(    "MOV    r4,             r31"    );\r
269                 asm(    "LDI    r31,    6"              );\r
270                 asm(    "MOV    r5,             r31"    );\r
271                 asm(    "LDI    r31,    7"              );\r
272                 asm(    "MOV    r6,             r31"    );\r
273                 asm(    "LDI    r31,    8"              );\r
274                 asm(    "MOV    r7,             r31"    );\r
275                 asm(    "LDI    r31,    9"              );\r
276                 asm(    "MOV    r8,             r31"    );\r
277                 asm(    "LDI    r31,    10"             );\r
278                 asm(    "MOV    r9,             r31"    );\r
279                 asm(    "LDI    r31,    11"             );\r
280                 asm(    "MOV    r10,    r31"    );\r
281                 asm(    "LDI    r31,    12"             );\r
282                 asm(    "MOV    r11,    r31"    );\r
283                 asm(    "LDI    r31,    13"             );\r
284                 asm(    "MOV    r12,    r31"    );\r
285                 asm(    "LDI    r31,    14"             );\r
286                 asm(    "MOV    r13,    r31"    );\r
287                 asm(    "LDI    r31,    15"             );\r
288                 asm(    "MOV    r14,    r31"    );\r
289                 asm(    "LDI    r31,    16"             );\r
290                 asm(    "MOV    r15,    r31"    );\r
291                 asm(    "LDI    r16,    17"             );\r
292                 asm(    "LDI    r17,    18"             );\r
293                 asm(    "LDI    r18,    19"             );\r
294                 asm(    "LDI    r19,    20"             );\r
295                 asm(    "LDI    r20,    21"             );\r
296                 asm(    "LDI    r21,    22"             );\r
297                 asm(    "LDI    r22,    23"             );\r
298                 asm(    "LDI    r23,    24"             );\r
299                 asm(    "LDI    r24,    25"             );\r
300                 asm(    "LDI    r25,    26"             );\r
301                 asm(    "LDI    r26,    27"             );\r
302                 asm(    "LDI    r27,    28"             );\r
303                 asm(    "LDI    r30,    29"             );\r
304 \r
305                 asm(    "LDI    r31,    1"                      );\r
306                 asm(    "CPSE   r31,    r0"                     );\r
307                 asm(    "STS    xRegTestError, r0"      );\r
308                 asm(    "LDI    r31,    2"                      );\r
309                 asm(    "CPSE   r31,    r1"                     );\r
310                 asm(    "STS    xRegTestError, r0"      );\r
311                 asm(    "LDI    r31,    3"                      );\r
312                 asm(    "CPSE   r31,    r2"                     );\r
313                 asm(    "STS    xRegTestError, r0"      );\r
314                 asm(    "LDI    r31,    4"                      );\r
315                 asm(    "CPSE   r31,    r3"                     );\r
316                 asm(    "STS    xRegTestError, r0"      );\r
317                 asm(    "LDI    r31,    5"                      );\r
318                 asm(    "CPSE   r31,    r4"                     );\r
319                 asm(    "STS    xRegTestError, r0"      );\r
320                 asm(    "LDI    r31,    6"                      );\r
321                 asm(    "CPSE   r31,    r5"                     );\r
322                 asm(    "STS    xRegTestError, r0"      );\r
323                 asm(    "LDI    r31,    7"                      );\r
324                 asm(    "CPSE   r31,    r6"                     );\r
325                 asm(    "STS    xRegTestError, r0"      );\r
326                 asm(    "LDI    r31,    8"                      );\r
327                 asm(    "CPSE   r31,    r7"                     );\r
328                 asm(    "STS    xRegTestError, r0"      );\r
329                 asm(    "LDI    r31,    9"                      );\r
330                 asm(    "CPSE   r31,    r8"                     );\r
331                 asm(    "STS    xRegTestError, r0"      );\r
332                 asm(    "LDI    r31,    10"                     );\r
333                 asm(    "CPSE   r31,    r9"                     );\r
334                 asm(    "STS    xRegTestError, r0"      );\r
335                 asm(    "LDI    r31,    11"                     );\r
336                 asm(    "CPSE   r31,    r10"            );\r
337                 asm(    "STS    xRegTestError, r0"      );\r
338                 asm(    "LDI    r31,    12"                     );\r
339                 asm(    "CPSE   r31,    r11"            );\r
340                 asm(    "STS    xRegTestError, r0"      );\r
341                 asm(    "LDI    r31,    13"                     );\r
342                 asm(    "CPSE   r31,    r12"            );\r
343                 asm(    "STS    xRegTestError, r0"      );\r
344                 asm(    "LDI    r31,    14"                     );\r
345                 asm(    "CPSE   r31,    r13"            );\r
346                 asm(    "STS    xRegTestError, r0"      );\r
347                 asm(    "LDI    r31,    15"                     );\r
348                 asm(    "CPSE   r31,    r14"            );\r
349                 asm(    "STS    xRegTestError, r0"      );\r
350                 asm(    "LDI    r31,    16"                     );\r
351                 asm(    "CPSE   r31,    r15"            );\r
352                 asm(    "STS    xRegTestError, r0"      );\r
353                 asm(    "LDI    r31,    17"                     );\r
354                 asm(    "CPSE   r31,    r16"            );\r
355                 asm(    "STS    xRegTestError, r0"      );\r
356                 asm(    "LDI    r31,    18"                     );\r
357                 asm(    "CPSE   r31,    r17"            );\r
358                 asm(    "STS    xRegTestError, r0"      );\r
359                 asm(    "LDI    r31,    19"                     );\r
360                 asm(    "CPSE   r31,    r18"            );\r
361                 asm(    "STS    xRegTestError, r0"      );\r
362                 asm(    "LDI    r31,    20"                     );\r
363                 asm(    "CPSE   r31,    r19"            );\r
364                 asm(    "STS    xRegTestError, r0"      );\r
365                 asm(    "LDI    r31,    21"                     );\r
366                 asm(    "CPSE   r31,    r20"            );\r
367                 asm(    "STS    xRegTestError, r0"      );\r
368                 asm(    "LDI    r31,    22"                     );\r
369                 asm(    "CPSE   r31,    r21"            );\r
370                 asm(    "STS    xRegTestError, r0"      );\r
371                 asm(    "LDI    r31,    23"                     );\r
372                 asm(    "CPSE   r31,    r22"            );\r
373                 asm(    "STS    xRegTestError, r0"      );\r
374                 asm(    "LDI    r31,    24"                     );\r
375                 asm(    "CPSE   r31,    r23"            );\r
376                 asm(    "STS    xRegTestError, r0"      );\r
377                 asm(    "LDI    r31,    25"                     );\r
378                 asm(    "CPSE   r31,    r24"            );\r
379                 asm(    "STS    xRegTestError, r0"      );\r
380                 asm(    "LDI    r31,    26"                     );\r
381                 asm(    "CPSE   r31,    r25"            );\r
382                 asm(    "STS    xRegTestError, r0"      );\r
383                 asm(    "LDI    r31,    27"                     );\r
384                 asm(    "CPSE   r31,    r26"            );\r
385                 asm(    "STS    xRegTestError, r0"      );\r
386                 asm(    "LDI    r31,    28"                     );\r
387                 asm(    "CPSE   r31,    r27"            );\r
388                 asm(    "STS    xRegTestError, r0"      );\r
389                 asm(    "LDI    r31,    29"                     );\r
390                 asm(    "CPSE   r31,    r30"            );\r
391                 asm(    "STS    xRegTestError, r0"      );\r
392         }\r
393 }\r
394 \r