📄 flop.lst
字号:
137
\ In segment CODE, align 2
138 static portTASK_FUNCTION( vCompetingMathTask2, pvParameters )
\ vCompetingMathTask2:
139 {
\ 000000 0A12 PUSH.W R10
\ 000002 0B12 PUSH.W R11
\ 000004 0812 PUSH.W R8
\ 000006 31801400 SUB.W #0x14, SP
\ 00000A 0A4C MOV.W R12, R10
140 volatile portDOUBLE d1, d2, d3, d4;
141 volatile unsigned portSHORT *pusTaskCheckVariable;
142 volatile portDOUBLE dAnswer;
143 portSHORT sError = pdFALSE;
\ 00000C 0843 MOV.W #0x0, R8
144
145 d1 = -389.38;
\ 00000E B140A4B00000 MOV.W #0xb0a4, 0x0(SP)
\ 000014 B140C2C30200 MOV.W #0xc3c2, 0x2(SP)
146 d2 = 32498.2;
\ 00001A B14066E40400 MOV.W #0xe466, 0x4(SP)
\ 000020 B140FD460600 MOV.W #0x46fd, 0x6(SP)
147 d3 = -2.0001;
\ 000026 B140A3010800 MOV.W #0x1a3, 0x8(SP)
\ 00002C B14000C00A00 MOV.W #0xc000, 0xa(SP)
148
149 dAnswer = ( d1 / d2 ) * d3;
^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
undefined in this statement
\ 000032 1E410400 MOV.W 0x4(SP), R14
\ 000036 1F410600 MOV.W 0x6(SP), R15
\ 00003A 2C41 MOV.W 0x0(SP), R12
\ 00003C 1D410200 MOV.W 0x2(SP), R13
\ 000040 B012.... CALL #_Div32f
\ 000044 1E410800 MOV.W 0x8(SP), R14
\ 000048 1F410A00 MOV.W 0xa(SP), R15
\ 00004C B012.... CALL #_Mul32f
\ 000050 814C1000 MOV.W R12, 0x10(SP)
\ 000054 814D1200 MOV.W R13, 0x12(SP)
150
151
152 /* The variable this task increments to show it is still running is passed in
153 as the parameter. */
154 pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
\ 000058 0B4A MOV.W R10, R11
155
156 /* Keep performing a calculation and checking the result against a constant. */
157 for( ;; )
158 {
159 d1 = -389.38;
\ ??vCompetingMathTask2_0:
\ 00005A B140A4B00000 MOV.W #0xb0a4, 0x0(SP)
\ 000060 B140C2C30200 MOV.W #0xc3c2, 0x2(SP)
160 d2 = 32498.2;
\ 000066 B14066E40400 MOV.W #0xe466, 0x4(SP)
\ 00006C B140FD460600 MOV.W #0x46fd, 0x6(SP)
161 d3 = -2.0001;
\ 000072 B140A3010800 MOV.W #0x1a3, 0x8(SP)
\ 000078 B14000C00A00 MOV.W #0xc000, 0xa(SP)
162
163 d4 = ( d1 / d2 ) * d3;
^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
undefined in this statement
\ 00007E 1E410400 MOV.W 0x4(SP), R14
\ 000082 1F410600 MOV.W 0x6(SP), R15
\ 000086 2C41 MOV.W 0x0(SP), R12
\ 000088 1D410200 MOV.W 0x2(SP), R13
\ 00008C B012.... CALL #_Div32f
\ 000090 1E410800 MOV.W 0x8(SP), R14
\ 000094 1F410A00 MOV.W 0xa(SP), R15
\ 000098 B012.... CALL #_Mul32f
\ 00009C 814C0C00 MOV.W R12, 0xc(SP)
\ 0000A0 814D0E00 MOV.W R13, 0xe(SP)
164
165 #if configUSE_PREEMPTION == 0
166 taskYIELD();
167 #endif
168
169 /* If the calculation does not match the expected constant, stop the
170 increment of the check variable. */
171 if( fabs( d4 - dAnswer ) > 0.001 )
^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
undefined in this statement
\ 0000A4 1E411000 MOV.W 0x10(SP), R14
\ 0000A8 1F411200 MOV.W 0x12(SP), R15
\ 0000AC 1C410C00 MOV.W 0xc(SP), R12
\ 0000B0 1D410E00 MOV.W 0xe(SP), R13
\ 0000B4 B012.... CALL #_Sub32f
\ 0000B8 B012.... CALL #fabs
\ 0000BC 3E407012 MOV.W #0x1270, R14
\ 0000C0 3F40833A MOV.W #0x3a83, R15
\ 0000C4 B012.... CALL #_CmpGe32f
\ 0000C8 0C93 CMP.W #0x0, R12
\ 0000CA 0124 JEQ ??vCompetingMathTask2_1
172 {
173 sError = pdTRUE;
\ 0000CC 1843 MOV.W #0x1, R8
174 }
175
176 if( sError == pdFALSE )
\ ??vCompetingMathTask2_1:
\ 0000CE 0893 CMP.W #0x0, R8
\ 0000D0 C423 JNE ??vCompetingMathTask2_0
177 {
178 /* If the calculation has always been correct, increment the check
179 variable so we know
180 this task is still running okay. */
181 ( *pusTaskCheckVariable )++;
\ 0000D2 0F4B MOV.W R11, R15
\ 0000D4 9F530000 ADD.W #0x1, 0(R15)
\ 0000D8 C03F JMP ??vCompetingMathTask2_0
182 }
183
184 #if configUSE_PREEMPTION == 0
185 taskYIELD();
186 #endif
187 }
188 }
189 /*-----------------------------------------------------------*/
190
\ In segment CODE, align 2
191 static portTASK_FUNCTION( vCompetingMathTask3, pvParameters )
\ vCompetingMathTask3:
192 {
\ 000000 0A12 PUSH.W R10
\ 000002 0B12 PUSH.W R11
\ 000004 0812 PUSH.W R8
\ 000006 0912 PUSH.W R9
\ 000008 0612 PUSH.W R6
\ 00000A 0712 PUSH.W R7
\ 00000C 31800C00 SUB.W #0xc, SP
\ 000010 074C MOV.W R12, R7
193 volatile portDOUBLE *pdArray, dTotal1, dTotal2, dDifference;
194 volatile unsigned portSHORT *pusTaskCheckVariable;
195 const size_t xArraySize = 10;
\ 000012 38400A00 MOV.W #0xa, R8
196 size_t xPosition;
197 portSHORT sError = pdFALSE;
\ 000016 0943 MOV.W #0x0, R9
198
199 /* The variable this task increments to show it is still running is passed in
200 as the parameter. */
201 pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
\ 000018 0647 MOV.W R7, R6
202
203 pdArray = ( portDOUBLE * ) pvPortMalloc( xArraySize * sizeof( portDOUBLE ) );
\ 00001A 0C48 MOV.W R8, R12
\ 00001C 0C5C RLA.W R12
\ 00001E 0C5C RLA.W R12
\ 000020 B012.... CALL #pvPortMalloc
\ 000024 0B4C MOV.W R12, R11
204
205 /* Keep filling an array, keeping a running total of the values placed in the
206 array. Then run through the array adding up all the values. If the two totals
207 do not match, stop the check variable from incrementing. */
208 for( ;; )
209 {
210 dTotal1 = 0.0;
\ ??vCompetingMathTask3_2:
\ 000026 81430000 MOV.W #0x0, 0x0(SP)
\ 00002A 81430200 MOV.W #0x0, 0x2(SP)
211 dTotal2 = 0.0;
\ 00002E 81430400 MOV.W #0x0, 0x4(SP)
\ 000032 81430600 MOV.W #0x0, 0x6(SP)
212
213 for( xPosition = 0; xPosition < xArraySize; xPosition++ )
\ 000036 0A43 MOV.W #0x0, R10
\ ??vCompetingMathTask3_0:
\ 000038 0A98 CMP.W R8, R10
\ 00003A 282C JC ??vCompetingMathTask3_3
214 {
215 pdArray[ xPosition ] = ( portDOUBLE ) xPosition + 5.5;
\ 00003C 0C4A MOV.W R10, R12
\ 00003E 0D43 MOV.W #0x0, R13
\ 000040 B012.... CALL #_Cast32uto32f
\ 000044 0E43 MOV.W #0x0, R14
\ 000046 3F40B040 MOV.W #0x40b0, R15
\ 00004A B012.... CALL #_Add32f
\ 00004E 0E4A MOV.W R10, R14
\ 000050 0E5E RLA.W R14
\ 000052 0E5E RLA.W R14
\ 000054 0F4B MOV.W R11, R15
\ 000056 0F5E ADD.W R14, R15
\ 000058 8F4C0000 MOV.W R12, 0(R15)
\ 00005C 8F4D0200 MOV.W R13, 0x2(R15)
216 dTotal1 += ( portDOUBLE ) xPosition + 5.5;
\ 000060 0C4A MOV.W R10, R12
\ 000062 0D43 MOV.W #0x0, R13
\ 000064 B012.... CALL #_Cast32uto32f
\ 000068 0E43 MOV.W #0x0, R14
\ 00006A 3F40B040 MOV.W #0x40b0, R15
\ 00006E B012.... CALL #_Add32f
\ 000072 0E4C MOV.W R12, R14
\ 000074 0F4D MOV.W R13, R15
\ 000076 2C41 MOV.W 0x0(SP), R12
\ 000078 1D410200 MOV.W 0x2(SP), R13
\ 00007C B012.... CALL #_Add32f
\ 000080 814C0000 MOV.W R12, 0x0(SP)
\ 000084 814D0200 MOV.W R13, 0x2(SP)
217 }
\ 000088 1A53 ADD.W #0x1, R10
\ 00008A D63F JMP ??vCompetingMathTask3_0
218
219 #if configUSE_PREEMPTION == 0
220 taskYIELD();
221 #endif
222
223 for( xPosition = 0; xPosition < xArraySize; xPosition++ )
\ ??vCompetingMathTask3_3:
\ 00008C 0A43 MOV.W #0x0, R10
\ ??vCompetingMathTask3_1:
\ 00008E 0A98 CMP.W R8, R10
\ 000090 142C JC ??vCompetingMathTask3_4
224 {
225 dTotal2 += pdArray[ xPosition ];
^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
undefined in this statement
\ 000092 0E4A MOV.W R10, R14
\ 000094 0E5E RLA.W R14
\ 000096 0E5E RLA.W R14
\ 000098 0F4B MOV.W R11, R15
\ 00009A 0F5E ADD.W R14, R15
\ 00009C 2E4F MOV.W @R15, R14
\ 00009E 1F4F0200 MOV.W 0x2(R15), R15
\ 0000A2 1C410400 MOV.W 0x4(SP), R12
\ 0000A6 1D410600 MOV.W 0x6(SP), R13
\ 0000AA B012.... CALL #_Add32f
\ 0000AE 814C0400 MOV.W R12, 0x4(SP)
\ 0000B2 814D0600 MOV.W R13, 0x6(SP)
226 }
\ 0000B6 1A53 ADD.W #0x1, R10
\ 0000B8 EA3F JMP ??vCompetingMathTask3_1
227
228 dDifference = dTotal1 - dTotal2;
^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
undefined in this statement
\ ??vCompetingMathTask3_4:
\ 0000BA 1E410400 MOV.W 0x4(SP), R14
\ 0000BE 1F410600 MOV.W 0x6(SP), R15
\ 0000C2 2C41 MOV.W 0x0(SP), R12
\ 0000C4 1D410200 MOV.W 0x2(SP), R13
\ 0000C8 B012.... CALL #_Sub32f
\ 0000CC 814C0800 MOV.W R12, 0x8(SP)
\ 0000D0 814D0A00 MOV.W R13, 0xa(SP)
229 if( fabs( dDifference ) > 0.001 )
\ 0000D4 1C410800 MOV.W 0x8(SP), R12
\ 0000D8 1D410A00 MOV.W 0xa(SP), R13
\ 0000DC B012.... CALL #fabs
\ 0000E0 3E407012 MOV.W #0x1270, R14
\ 0000E4 3F40833A MOV.W #0x3a83, R15
\ 0000E8 B012.... CALL #_CmpGe32f
\ 0000EC 0C93 CMP.W #0x0, R12
\ 0000EE 0124 JEQ ??vCompetingMathTask3_5
230 {
231 sError = pdTRUE;
\ 0000F0 1943 MOV.W #0x1, R9
232 }
233
234 #if configUSE_PREEMPTION == 0
235 taskYIELD();
236 #endif
237
238 if( sError == pdFALSE )
\ ??vCompetingMathTask3_5:
\ 0000F2 0993 CMP.W #0x0, R9
\ 0000F4 9823 JNE ??vCompetingMathTask3_2
239 {
240 /* If the calculation has always been correct, increment the check
241 variable so we know this task is still running okay. */
242 ( *pusTaskCheckVariable )++;
\ 0000F6 0F46 MOV.W R6, R15
\ 0000F8 9F530000 ADD.W #0x1, 0(R15)
\ 0000FC 943F JMP ??vCompetingMathTask3_2
243 }
244 }
245 }
246 /*-----------------------------------------------------------*/
247
\ In segment CODE, align 2
248 static portTASK_FUNCTION( vCompetingMathTask4, pvParameters )
\ vCompetingMathTask4:
249 {
\ 000000 0A12 PUSH.W R10
\ 000002 0B12 PUSH.W R11
\ 000004 0812 PUSH.W R8
\ 000006 0912 PUSH.W R9
\ 000008 0612 PUSH.W R6
\ 00000A 0712 PUSH.W R7
\ 00000C 31800C00 SUB.W #0xc, SP
\ 000010 074C MOV.W R12, R7
250 volatile portDOUBLE *pdArray, dTotal1, dTotal2, dDifference;
251 volatile unsigned portSHORT *pusTaskCheckVariable;
252 const size_t xArraySize = 10;
\ 000012 38400A00 MOV.W #0xa, R8
253 size_t xPosition;
254 portSHORT sError = pdFALSE;
\ 000016 0943 MOV.W #0x0, R9
255
256 /* The variable this task increments to show it is still running is passed in
257 as the parameter. */
258 pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
\ 000018 0647 MOV.W R7, R6
259
260 pdArray = ( portDOUBLE * ) pvPortMalloc( xArraySize * sizeof( portDOUBLE ) );
\ 00001A 0C48 MOV.W R8, R12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -