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