]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M0+_LPC51U68_LPCXpresso/GCC_specific/RegTest.c
383b8ba82b4d37a5dc85972a5948c2e6fc567de1
[freertos] / FreeRTOS / Demo / CORTEX_M0+_LPC51U68_LPCXpresso / GCC_specific / RegTest.c
1 /*\r
2  * FreeRTOS Kernel V10.2.1\r
3  * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
6  * this software and associated documentation files (the "Software"), to deal in\r
7  * the Software without restriction, including without limitation the rights to\r
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
9  * the Software, and to permit persons to whom the Software is furnished to do so,\r
10  * subject to the following conditions:\r
11  *\r
12  * The above copyright notice and this permission notice shall be included in all\r
13  * copies or substantial portions of the Software.\r
14  *\r
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21  *\r
22  * http://www.FreeRTOS.org\r
23  * http://aws.amazon.com/freertos\r
24  *\r
25  * 1 tab == 4 spaces!\r
26  */\r
27 \r
28 void vRegTest1Task( void ) __attribute__((naked));\r
29 void vRegTest2Task( void ) __attribute__((naked));\r
30 \r
31 void vRegTest1Task( void )\r
32 {\r
33         __asm volatile\r
34         (\r
35                 ".extern ulRegTest1LoopCounter          \n"\r
36                 "                                                                       \n"\r
37                 "       /* Fill the core registers with known values. */ \n"\r
38                 "       movs r1, #101                                   \n"\r
39                 "       movs r2, #102                                   \n"\r
40                 "       movs r3, #103                                   \n"\r
41                 "       movs r4, #104                                   \n"\r
42                 "       movs r5, #105                                   \n"\r
43                 "       movs r6, #106                                   \n"\r
44                 "       movs r7, #107                                   \n"\r
45                 "       movs r0, #108                                   \n"\r
46                 "       mov      r8, r0                                         \n"\r
47                 "       movs r0, #109                                   \n"\r
48                 "       mov  r9, r0                                             \n"\r
49                 "       movs r0, #110                                   \n"\r
50                 "       mov      r10, r0                                        \n"\r
51                 "       movs r0, #111                                   \n"\r
52                 "       mov      r11, r0                                        \n"\r
53                 "       movs r0, #112                                   \n"\r
54                 "       mov  r12, r0                                    \n"\r
55                 "       movs r0, #100                                   \n"\r
56                 "                                                                       \n"\r
57                 "reg1_loop:                                                     \n"\r
58                 "                                                                       \n"\r
59                 "       cmp     r0, #100                                        \n"\r
60                 "       bne     reg1_error_loop                         \n"\r
61                 "       cmp     r1, #101                                        \n"\r
62                 "       bne     reg1_error_loop                         \n"\r
63                 "       cmp     r2, #102                                        \n"\r
64                 "       bne     reg1_error_loop                         \n"\r
65                 "       cmp r3, #103                                    \n"\r
66                 "       bne     reg1_error_loop                         \n"\r
67                 "       cmp     r4, #104                                        \n"\r
68                 "       bne     reg1_error_loop                         \n"\r
69                 "       cmp     r5, #105                                        \n"\r
70                 "       bne     reg1_error_loop                         \n"\r
71                 "       cmp     r6, #106                                        \n"\r
72                 "       bne     reg1_error_loop                         \n"\r
73                 "       cmp     r7, #107                                        \n"\r
74                 "       bne     reg1_error_loop                         \n"\r
75                 "       movs r0, #108                                   \n"\r
76                 "       cmp     r8, r0                                          \n"\r
77                 "       bne     reg1_error_loop                         \n"\r
78                 "       movs r0, #109                                   \n"\r
79                 "       cmp     r9, r0                                          \n"\r
80                 "       bne     reg1_error_loop                         \n"\r
81                 "       movs r0, #110                                   \n"\r
82                 "       cmp     r10, r0                                         \n"\r
83                 "       bne     reg1_error_loop                         \n"\r
84                 "       movs r0, #111                                   \n"\r
85                 "       cmp     r11, r0                                         \n"\r
86                 "       bne     reg1_error_loop                         \n"\r
87                 "       movs r0, #112                                   \n"\r
88                 "       cmp     r12, r0                                         \n"\r
89                 "       bne     reg1_error_loop                         \n"\r
90                 "                                                                       \n"\r
91                 "       /* Everything passed, increment the loop counter. */ \n"\r
92                 "       push { r1 }                                             \n"\r
93                 "       ldr     r0, =ulRegTest1LoopCounter      \n"\r
94                 "       ldr r1, [r0]                                    \n"\r
95                 "       add r1, r1, #1                                  \n"\r
96                 "       str r1, [r0]                                    \n"\r
97                 "       pop { r1 }                                              \n"\r
98                 "                                                                       \n"\r
99                 "       /* Start again. */                              \n"\r
100                 "       movs r0, #100                                   \n"\r
101                 "       b reg1_loop                                             \n"\r
102                 "                                                                       \n"\r
103                 "reg1_error_loop:                                       \n"\r
104                 "       /* If this line is hit then there was an error in a core register value.        \n"\r
105                 "       The loop ensures the loop counter stops incrementing. */                                        \n"\r
106                 "       b reg1_error_loop                               \n"\r
107                 "       nop                                                             \n"\r
108         );\r
109 }\r
110 /*-----------------------------------------------------------*/\r
111 \r
112 void vRegTest2Task( void )\r
113 {\r
114         __asm volatile\r
115         (\r
116                 ".extern ulRegTest2LoopCounter          \n"\r
117                 "                                                                       \n"\r
118                 "       /* Fill the core registers with known values. */ \n"\r
119                 "       movs r1, #1                                             \n"\r
120                 "       movs r2, #2                                             \n"\r
121                 "       movs r3, #3                                             \n"\r
122                 "       movs r4, #4                                             \n"\r
123                 "       movs r5, #5                                             \n"\r
124                 "       movs r6, #6                                             \n"\r
125                 "       movs r7, #7                                             \n"\r
126                 "       movs r0, #8                                             \n"\r
127                 "       movs r8, r0                                             \n"\r
128                 "       movs r0, #9                                             \n"\r
129                 "       mov  r9, r0                                             \n"\r
130                 "       movs r0, #10                                    \n"\r
131                 "       mov      r10, r0                                        \n"\r
132                 "       movs r0, #11                                    \n"\r
133                 "       mov      r11, r0                                        \n"\r
134                 "       movs r0, #12                                    \n"\r
135                 "       mov  r12, r0                                    \n"\r
136                 "       movs r0, #10                                    \n"\r
137                 "                                                                       \n"\r
138                 "reg2_loop:                                                     \n"\r
139                 "                                                                       \n"\r
140                 "       cmp     r0, #10                                         \n"\r
141                 "       bne     reg2_error_loop                         \n"\r
142                 "       cmp     r1, #1                                          \n"\r
143                 "       bne     reg2_error_loop                         \n"\r
144                 "       cmp     r2, #2                                          \n"\r
145                 "       bne     reg2_error_loop                         \n"\r
146                 "       cmp r3, #3                                              \n"\r
147                 "       bne     reg2_error_loop                         \n"\r
148                 "       cmp     r4, #4                                          \n"\r
149                 "       bne     reg2_error_loop                         \n"\r
150                 "       cmp     r5, #5                                          \n"\r
151                 "       bne     reg2_error_loop                         \n"\r
152                 "       cmp     r6, #6                                          \n"\r
153                 "       bne     reg2_error_loop                         \n"\r
154                 "       cmp     r7, #7                                          \n"\r
155                 "       bne     reg2_error_loop                         \n"\r
156                 "       movs r0, #8                                             \n"\r
157                 "       cmp     r8, r0                                          \n"\r
158                 "       bne     reg2_error_loop                         \n"\r
159                 "       movs r0, #9                                             \n"\r
160                 "       cmp     r9, r0                                          \n"\r
161                 "       bne     reg2_error_loop                         \n"\r
162                 "       movs r0, #10                                    \n"\r
163                 "       cmp     r10, r0                                         \n"\r
164                 "       bne     reg2_error_loop                         \n"\r
165                 "       movs r0, #11                                    \n"\r
166                 "       cmp     r11, r0                                         \n"\r
167                 "       bne     reg2_error_loop                         \n"\r
168                 "       movs r0, #12                                    \n"\r
169                 "       cmp     r12, r0                                         \n"\r
170                 "       bne     reg2_error_loop                         \n"\r
171                 "                                                                       \n"\r
172                 "       /* Everything passed, increment the loop counter. */ \n"\r
173                 "       push { r1 }                                             \n"\r
174                 "       ldr     r0, =ulRegTest2LoopCounter      \n"\r
175                 "       ldr r1, [r0]                                    \n"\r
176                 "       add r1, r1, #1                                  \n"\r
177                 "       str r1, [r0]                                    \n"\r
178                 "       pop { r1 }                                              \n"\r
179                 "                                                                       \n"\r
180                 "       /* Start again. */                              \n"\r
181                 "       movs r0, #10                                    \n"\r
182                 "       b reg2_loop                                             \n"\r
183                 "                                                                       \n"\r
184                 "reg2_error_loop:                                       \n"\r
185                 "       /* If this line is hit then there was an error in a core register value.        \n"\r
186                 "       The loop ensures the loop counter stops incrementing. */                                        \n"\r
187                 "       b reg2_error_loop                               \n"\r
188                 "       nop                                                             \n"\r
189         );\r
190 }\r
191 /*-----------------------------------------------------------*/\r
192 \r
193 \r
194 \r
195 \r