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