]> begriffs open source - cmsis-freertos/blob - Demo/AVR_ATMega4809_Atmel_Studio/RTOSDemo/regtest.c
Update README.md - branch main is now the base branch
[cmsis-freertos] / Demo / AVR_ATMega4809_Atmel_Studio / RTOSDemo / regtest.c
1 /*
2  * FreeRTOS V202111.00
3  * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of
6  * this software and associated documentation files (the "Software"), to deal in
7  * the Software without restriction, including without limitation the rights to
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9  * the Software, and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in all
13  * copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * http://www.FreeRTOS.org
23  * http://aws.amazon.com/freertos
24  *
25  * 1 tab == 4 spaces!
26  */
27
28 /* Scheduler include files. */
29 #include "FreeRTOS.h"
30 #include "task.h"
31
32 /* Demo file headers. */
33 #include "regtest.h"
34
35 /* Test tasks that sets registers to known values, then checks to ensure the
36 values remain as expected.  Test 1 and test 2 use different values. */
37 static void prvRegisterCheck1( void *pvParameters );
38 static void prvRegisterCheck2( void *pvParameters );
39
40 /* Set to a non zero value should an error be found. */
41 portBASE_TYPE xRegTestError = pdFALSE;
42
43 /*-----------------------------------------------------------*/
44
45 void vStartRegTestTasks( void )
46 {
47     xTaskCreate( prvRegisterCheck1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
48     xTaskCreate( prvRegisterCheck2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
49 }
50 /*-----------------------------------------------------------*/
51
52 portBASE_TYPE xAreRegTestTasksStillRunning( void )
53 {
54 portBASE_TYPE xReturn;
55
56     /* If a register was found to contain an unexpected value then the
57     xRegTestError variable would have been set to a non zero value. */
58     if( xRegTestError == pdFALSE )
59     {
60         xReturn = pdTRUE;
61     }
62     else
63     {
64         xReturn = pdFALSE;
65     }
66     
67     return xReturn;
68 }
69 /*-----------------------------------------------------------*/
70
71 static void prvRegisterCheck1( void *pvParameters )
72 {
73     ( void ) pvParameters;
74
75     for( ;; )
76     {
77         asm(    "LDI    r31,    5"      );
78         asm(    "MOV    r0,     r31"    );
79         asm(    "LDI    r31,    6"      );
80         asm(    "MOV    r1,     r31"    );
81         asm(    "LDI    r31,    7"      );
82         asm(    "MOV    r2,     r31"    );
83         asm(    "LDI    r31,    8"      );
84         asm(    "MOV    r3,     r31"    );
85         asm(    "LDI    r31,    9"      );
86         asm(    "MOV    r4,     r31"    );
87         asm(    "LDI    r31,    10"     );
88         asm(    "MOV    r5,     r31"    );
89         asm(    "LDI    r31,    11"     );
90         asm(    "MOV    r6,     r31"    );
91         asm(    "LDI    r31,    12"     );
92         asm(    "MOV    r7,     r31"    );
93         asm(    "LDI    r31,    13"     );
94         asm(    "MOV    r8,     r31"    );
95         asm(    "LDI    r31,    14"     );
96         asm(    "MOV    r9,     r31"    );
97         asm(    "LDI    r31,    15"     );
98         asm(    "MOV    r10,    r31"    );
99         asm(    "LDI    r31,    16"     );
100         asm(    "MOV    r11,    r31"    );
101         asm(    "LDI    r31,    17"     );
102         asm(    "MOV    r12,    r31"    );
103         asm(    "LDI    r31,    18"     );
104         asm(    "MOV    r13,    r31"    );
105         asm(    "LDI    r31,    19"     );
106         asm(    "MOV    r14,    r31"    );
107         asm(    "LDI    r31,    20"     );
108         asm(    "MOV    r15,    r31"    );
109         asm(    "LDI    r16,    21"     );
110         asm(    "LDI    r17,    22"     );
111         asm(    "LDI    r18,    23"     );
112         asm(    "LDI    r19,    24"     );
113         asm(    "LDI    r20,    25"     );
114         asm(    "LDI    r21,    26"     );
115         asm(    "LDI    r22,    27"     );
116         asm(    "LDI    r23,    28"     );
117         asm(    "LDI    r24,    29"     );
118         asm(    "LDI    r25,    30"     );
119         asm(    "LDI    r26,    31"     );
120         asm(    "LDI    r27,    32"     );
121         asm(    "LDI    r28,    33"     );
122         asm(    "LDI    r29,    34"     );
123         asm(    "LDI    r30,    35"     );
124
125         taskYIELD();
126
127         asm(    "CPI    r31,    20"         );
128         asm(    "BREQ   no_err_1"           );
129         asm(    "STS    xRegTestError, r0"  );
130         asm(    "no_err_1:"                 );
131         asm(    "LDI    r31,    5"          );
132         asm(    "CPSE   r31,    r0"         );
133         asm(    "STS    xRegTestError, r0"  );
134         asm(    "LDI    r31,    6"          );
135         asm(    "CPSE   r31,    r1"         );
136         asm(    "STS    xRegTestError, r0"  );
137         asm(    "LDI    r31,    7"          );
138         asm(    "CPSE   r31,    r2"         );
139         asm(    "STS    xRegTestError, r0"  );
140         asm(    "LDI    r31,    8"          );
141         asm(    "CPSE   r31,    r3"         );
142         asm(    "STS    xRegTestError, r0"  );
143         asm(    "LDI    r31,    9"          );
144         asm(    "CPSE   r31,    r4"         );
145         asm(    "STS    xRegTestError, r0"  );
146         asm(    "LDI    r31,    10"         );
147         asm(    "CPSE   r31,    r5"         );
148         asm(    "STS    xRegTestError, r0"  );
149         asm(    "LDI    r31,    11"         );
150         asm(    "CPSE   r31,    r6"         );
151         asm(    "STS    xRegTestError, r0"  );
152         asm(    "LDI    r31,    12"         );
153         asm(    "CPSE   r31,    r7"         );
154         asm(    "STS    xRegTestError, r0"  );
155         asm(    "LDI    r31,    13"         );
156         asm(    "CPSE   r31,    r8"         );
157         asm(    "STS    xRegTestError, r0"  );
158         asm(    "LDI    r31,    14"         );
159         asm(    "CPSE   r31,    r9"         );
160         asm(    "STS    xRegTestError, r0"  );
161         asm(    "LDI    r31,    15"         );
162         asm(    "CPSE   r31,    r10"        );
163         asm(    "STS    xRegTestError, r0"  );
164         asm(    "LDI    r31,    16"         );
165         asm(    "CPSE   r31,    r11"        );
166         asm(    "STS    xRegTestError, r0"  );
167         asm(    "LDI    r31,    17"         );
168         asm(    "CPSE   r31,    r12"        );
169         asm(    "STS    xRegTestError, r0"  );
170         asm(    "LDI    r31,    18"         );
171         asm(    "CPSE   r31,    r13"        );
172         asm(    "STS    xRegTestError, r0"  );
173         asm(    "LDI    r31,    19"         );
174         asm(    "CPSE   r31,    r14"        );
175         asm(    "STS    xRegTestError, r0"  );
176         asm(    "LDI    r31,    20"         );
177         asm(    "CPSE   r31,    r15"        );
178         asm(    "STS    xRegTestError, r0"  );
179         asm(    "LDI    r31,    21"         );
180         asm(    "CPSE   r31,    r16"        );
181         asm(    "STS    xRegTestError, r0"  );
182         asm(    "LDI    r31,    22"         );
183         asm(    "CPSE   r31,    r17"        );
184         asm(    "STS    xRegTestError, r0"  );
185         asm(    "LDI    r31,    23"         );
186         asm(    "CPSE   r31,    r18"        );
187         asm(    "STS    xRegTestError, r0"  );
188         asm(    "LDI    r31,    24"         );
189         asm(    "CPSE   r31,    r19"        );
190         asm(    "STS    xRegTestError, r0"  );
191         asm(    "LDI    r31,    25"         );
192         asm(    "CPSE   r31,    r20"        );
193         asm(    "STS    xRegTestError, r0"  );
194         asm(    "LDI    r31,    26"         );
195         asm(    "CPSE   r31,    r21"        );
196         asm(    "STS    xRegTestError, r0"  );
197         asm(    "LDI    r31,    27"         );
198         asm(    "CPSE   r31,    r22"        );
199         asm(    "STS    xRegTestError, r0"  );
200         asm(    "LDI    r31,    28"         );
201         asm(    "CPSE   r31,    r23"        );
202         asm(    "STS    xRegTestError, r0"  );
203         asm(    "LDI    r31,    29"         );
204         asm(    "CPSE   r31,    r24"        );
205         asm(    "STS    xRegTestError, r0"  );
206         asm(    "LDI    r31,    30"         );
207         asm(    "CPSE   r31,    r25"        );
208         asm(    "STS    xRegTestError, r0"  );
209         asm(    "LDI    r31,    31"         );
210         asm(    "CPSE   r31,    r26"        );
211         asm(    "STS    xRegTestError, r0"  );
212         asm(    "LDI    r31,    32"         );
213         asm(    "CPSE   r31,    r27"        );
214         asm(    "STS    xRegTestError, r0"  );
215         asm(    "LDI    r31,    33"         );
216         asm(    "CPSE   r31,    r28"        );
217         asm(    "STS    xRegTestError, r0"  );
218         asm(    "LDI    r31,    34"         );
219         asm(    "CPSE   r31,    r29"        );
220         asm(    "STS    xRegTestError, r0"  );
221         asm(    "LDI    r31,    35"         );
222         asm(    "CPSE   r31,    r30"        );
223         asm(    "STS    xRegTestError, r0"  );
224     }
225 }
226 /*-----------------------------------------------------------*/
227
228 static void prvRegisterCheck2( void *pvParameters )
229 {
230     ( void ) pvParameters;
231
232     for( ;; )
233     {
234         asm(    "LDI    r31,    1"      );
235         asm(    "MOV    r0,     r31"    );
236         asm(    "LDI    r31,    2"      );
237         asm(    "MOV    r1,     r31"    );
238         asm(    "LDI    r31,    3"      );
239         asm(    "MOV    r2,     r31"    );
240         asm(    "LDI    r31,    4"      );
241         asm(    "MOV    r3,     r31"    );
242         asm(    "LDI    r31,    5"      );
243         asm(    "MOV    r4,     r31"    );
244         asm(    "LDI    r31,    6"      );
245         asm(    "MOV    r5,     r31"    );
246         asm(    "LDI    r31,    7"      );
247         asm(    "MOV    r6,     r31"    );
248         asm(    "LDI    r31,    8"      );
249         asm(    "MOV    r7,     r31"    );
250         asm(    "LDI    r31,    9"      );
251         asm(    "MOV    r8,     r31"    );
252         asm(    "LDI    r31,    10"     );
253         asm(    "MOV    r9,     r31"    );
254         asm(    "LDI    r31,    11"     );
255         asm(    "MOV    r10,    r31"    );
256         asm(    "LDI    r31,    12"     );
257         asm(    "MOV    r11,    r31"    );
258         asm(    "LDI    r31,    13"     );
259         asm(    "MOV    r12,    r31"    );
260         asm(    "LDI    r31,    14"     );
261         asm(    "MOV    r13,    r31"    );
262         asm(    "LDI    r31,    15"     );
263         asm(    "MOV    r14,    r31"    );
264         asm(    "LDI    r31,    16"     );
265         asm(    "MOV    r15,    r31"    );
266         asm(    "LDI    r16,    17"     );
267         asm(    "LDI    r17,    18"     );
268         asm(    "LDI    r18,    19"     );
269         asm(    "LDI    r19,    20"     );
270         asm(    "LDI    r20,    21"     );
271         asm(    "LDI    r21,    22"     );
272         asm(    "LDI    r22,    23"     );
273         asm(    "LDI    r23,    24"     );
274         asm(    "LDI    r24,    25"     );
275         asm(    "LDI    r25,    26"     );
276         asm(    "LDI    r26,    27"     );
277         asm(    "LDI    r27,    28"     );
278         asm(    "LDI    r28,    29"     );
279         asm(    "LDI    r29,    30"     );
280         asm(    "LDI    r30,    31"     );
281
282         taskYIELD();
283
284         asm(    "CPI    r31,    16"         );
285         asm(    "BREQ   no_err_2"           );
286         asm(    "STS    xRegTestError, r0"  );
287         asm(    "no_err_2:"                 );
288         asm(    "LDI    r31,    1"          );
289         asm(    "CPSE   r31,    r0"         );
290         asm(    "STS    xRegTestError, r0"  );
291         asm(    "LDI    r31,    2"          );
292         asm(    "CPSE   r31,    r1"         );
293         asm(    "STS    xRegTestError, r0"  );
294         asm(    "LDI    r31,    3"          );
295         asm(    "CPSE   r31,    r2"         );
296         asm(    "STS    xRegTestError, r0"  );
297         asm(    "LDI    r31,    4"          );
298         asm(    "CPSE   r31,    r3"         );
299         asm(    "STS    xRegTestError, r0"  );
300         asm(    "LDI    r31,    5"          );
301         asm(    "CPSE   r31,    r4"         );
302         asm(    "STS    xRegTestError, r0"  );
303         asm(    "LDI    r31,    6"          );
304         asm(    "CPSE   r31,    r5"         );
305         asm(    "STS    xRegTestError, r0"  );
306         asm(    "LDI    r31,    7"          );
307         asm(    "CPSE   r31,    r6"         );
308         asm(    "STS    xRegTestError, r0"  );
309         asm(    "LDI    r31,    8"          );
310         asm(    "CPSE   r31,    r7"         );
311         asm(    "STS    xRegTestError, r0"  );
312         asm(    "LDI    r31,    9"          );
313         asm(    "CPSE   r31,    r8"         );
314         asm(    "STS    xRegTestError, r0"  );
315         asm(    "LDI    r31,    10"         );
316         asm(    "CPSE   r31,    r9"         );
317         asm(    "STS    xRegTestError, r0"  );
318         asm(    "LDI    r31,    11"         );
319         asm(    "CPSE   r31,    r10"        );
320         asm(    "STS    xRegTestError, r0"  );
321         asm(    "LDI    r31,    12"         );
322         asm(    "CPSE   r31,    r11"        );
323         asm(    "STS    xRegTestError, r0"  );
324         asm(    "LDI    r31,    13"         );
325         asm(    "CPSE   r31,    r12"        );
326         asm(    "STS    xRegTestError, r0"  );
327         asm(    "LDI    r31,    14"         );
328         asm(    "CPSE   r31,    r13"        );
329         asm(    "STS    xRegTestError, r0"  );
330         asm(    "LDI    r31,    15"         );
331         asm(    "CPSE   r31,    r14"        );
332         asm(    "STS    xRegTestError, r0"  );
333         asm(    "LDI    r31,    16"         );
334         asm(    "CPSE   r31,    r15"        );
335         asm(    "STS    xRegTestError, r0"  );
336         asm(    "LDI    r31,    17"         );
337         asm(    "CPSE   r31,    r16"        );
338         asm(    "STS    xRegTestError, r0"  );
339         asm(    "LDI    r31,    18"         );
340         asm(    "CPSE   r31,    r17"        );
341         asm(    "STS    xRegTestError, r0"  );
342         asm(    "LDI    r31,    19"         );
343         asm(    "CPSE   r31,    r18"        );
344         asm(    "STS    xRegTestError, r0"  );
345         asm(    "LDI    r31,    20"         );
346         asm(    "CPSE   r31,    r19"        );
347         asm(    "STS    xRegTestError, r0"  );
348         asm(    "LDI    r31,    21"         );
349         asm(    "CPSE   r31,    r20"        );
350         asm(    "STS    xRegTestError, r0"  );
351         asm(    "LDI    r31,    22"         );
352         asm(    "CPSE   r31,    r21"        );
353         asm(    "STS    xRegTestError, r0"  );
354         asm(    "LDI    r31,    23"         );
355         asm(    "CPSE   r31,    r22"        );
356         asm(    "STS    xRegTestError, r0"  );
357         asm(    "LDI    r31,    24"         );
358         asm(    "CPSE   r31,    r23"        );
359         asm(    "STS    xRegTestError, r0"  );
360         asm(    "LDI    r31,    25"         );
361         asm(    "CPSE   r31,    r24"        );
362         asm(    "STS    xRegTestError, r0"  );
363         asm(    "LDI    r31,    26"         );
364         asm(    "CPSE   r31,    r25"        );
365         asm(    "STS    xRegTestError, r0"  );
366         asm(    "LDI    r31,    27"         );
367         asm(    "CPSE   r31,    r26"        );
368         asm(    "STS    xRegTestError, r0"  );
369         asm(    "LDI    r31,    28"         );
370         asm(    "CPSE   r31,    r27"        );
371         asm(    "STS    xRegTestError, r0"  );
372         asm(    "LDI    r31,    29"         );
373         asm(    "CPSE   r31,    r28"        );
374         asm(    "STS    xRegTestError, r0"  );
375         asm(    "LDI    r31,    30"         );
376         asm(    "CPSE   r31,    r29"        );
377         asm(    "STS    xRegTestError, r0"  );
378         asm(    "LDI    r31,    31"         );
379         asm(    "CPSE   r31,    r30"        );
380         asm(    "STS    xRegTestError, r0"  );
381     }
382 }