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