]> git.sur5r.net Git - freertos/blob - Demo/AVR_ATMega323_IAR/regtest.c
582da7177e63a4f5b33cd763b1e92735731af9a3
[freertos] / Demo / AVR_ATMega323_IAR / regtest.c
1 /*\r
2         FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry.\r
3 \r
4         This file is part of the FreeRTOS.org distribution.\r
5 \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
10 \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
15 \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
19 \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
24         can be applied.\r
25 \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
30 \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
34 */\r
35 \r
36 /* Scheduler include files. */\r
37 #include "FreeRTOS.h"\r
38 #include "task.h"\r
39 \r
40 /* Demo file headers. */\r
41 #include "regtest.h"\r
42 \r
43 /*\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
46  */\r
47 static void prvRegisterCheck1( void *pvParameters );\r
48 static void prvRegisterCheck2( void *pvParameters );\r
49 \r
50 /* Set to a non zero value should an error be found. */\r
51 portBASE_TYPE xRegTestError = pdFALSE;\r
52 \r
53 /*-----------------------------------------------------------*/\r
54 \r
55 void vStartRegTestTasks( void )\r
56 {\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
59 }\r
60 /*-----------------------------------------------------------*/\r
61 \r
62 portBASE_TYPE xAreRegTestTasksStillRunning( void )\r
63 {\r
64 portBASE_TYPE xReturn;\r
65 \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
69         {\r
70                 xReturn = pdTRUE;\r
71         }\r
72         else\r
73         {\r
74                 xReturn = pdFALSE;\r
75         }\r
76         \r
77         return xReturn;\r
78 }\r
79 /*-----------------------------------------------------------*/\r
80 \r
81 static void prvRegisterCheck1( void *pvParameters )\r
82 {\r
83         ( void ) pvParameters;\r
84 \r
85         for( ;; )\r
86         {\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
132 \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
220         }\r
221 }\r
222 /*-----------------------------------------------------------*/\r
223 \r
224 static void prvRegisterCheck2( void *pvParameters )\r
225 {\r
226         ( void ) pvParameters;\r
227 \r
228         for( ;; )\r
229         {\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
275 \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
363         }\r
364 }\r
365 \r