📄 flop.s43
字号:
ADD.W R14, R15
MOV.W @R15, R14
MOV.W 0x2(R15), R15
MOV.W 0x4(SP), R12
MOV.W 0x6(SP), R13
CALL #_Add32f
MOV.W R12, 0x4(SP)
MOV.W R13, 0x6(SP)
// 226 }
ADD.W #0x1, R10
JMP ??vCompetingMathTask3_1
// 227
// 228 dDifference = dTotal1 - dTotal2;
??vCompetingMathTask3_4:
MOV.W 0x4(SP), R14
MOV.W 0x6(SP), R15
MOV.W 0x0(SP), R12
MOV.W 0x2(SP), R13
CALL #_Sub32f
MOV.W R12, 0x8(SP)
MOV.W R13, 0xa(SP)
// 229 if( fabs( dDifference ) > 0.001 )
MOV.W 0x8(SP), R12
MOV.W 0xa(SP), R13
CALL #fabs
MOV.W #0x1270, R14
MOV.W #0x3a83, R15
CALL #_CmpGe32f
CMP.W #0x0, R12
JEQ ??vCompetingMathTask3_5
// 230 {
// 231 sError = pdTRUE;
MOV.W #0x1, R9
// 232 }
// 233
// 234 #if configUSE_PREEMPTION == 0
// 235 taskYIELD();
// 236 #endif
// 237
// 238 if( sError == pdFALSE )
??vCompetingMathTask3_5:
CMP.W #0x0, R9
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 )++;
MOV.W R6, R15
ADD.W #0x1, 0(R15)
JMP ??vCompetingMathTask3_2
CFI EndBlock cfiBlock3
// 243 }
// 244 }
// 245 }
// 246 /*-----------------------------------------------------------*/
// 247
RSEG CODE:CODE:REORDER:NOROOT(1)
// 248 static portTASK_FUNCTION( vCompetingMathTask4, pvParameters )
vCompetingMathTask4:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function vCompetingMathTask4
// 249 {
FUNCALL vCompetingMathTask4, pvPortMalloc
LOCFRAME CSTACK, 26, STACK
FUNCALL vCompetingMathTask4, _Cast32uto32f
LOCFRAME CSTACK, 26, STACK
FUNCALL vCompetingMathTask4, _Mul32f
LOCFRAME CSTACK, 26, STACK
FUNCALL vCompetingMathTask4, _Cast32uto32f
LOCFRAME CSTACK, 26, STACK
FUNCALL vCompetingMathTask4, _Mul32f
LOCFRAME CSTACK, 26, STACK
FUNCALL vCompetingMathTask4, _Add32f
LOCFRAME CSTACK, 26, STACK
FUNCALL vCompetingMathTask4, _Add32f
LOCFRAME CSTACK, 26, STACK
FUNCALL vCompetingMathTask4, _Sub32f
LOCFRAME CSTACK, 26, STACK
FUNCALL vCompetingMathTask4, fabs
LOCFRAME CSTACK, 26, STACK
FUNCALL vCompetingMathTask4, _CmpGe32f
LOCFRAME CSTACK, 26, STACK
PUSH.W R10
CFI R10 Frame(CFA, -4)
CFI CFA SP+4
PUSH.W R11
CFI R11 Frame(CFA, -6)
CFI CFA SP+6
PUSH.W R8
CFI R8 Frame(CFA, -8)
CFI CFA SP+8
PUSH.W R9
CFI R9 Frame(CFA, -10)
CFI CFA SP+10
PUSH.W R6
CFI R6 Frame(CFA, -12)
CFI CFA SP+12
PUSH.W R7
CFI R7 Frame(CFA, -14)
CFI CFA SP+14
SUB.W #0xc, SP
CFI CFA SP+26
MOV.W R12, R7
// 250 volatile portDOUBLE *pdArray, dTotal1, dTotal2, dDifference;
// 251 volatile unsigned portSHORT *pusTaskCheckVariable;
// 252 const size_t xArraySize = 10;
MOV.W #0xa, R8
// 253 size_t xPosition;
// 254 portSHORT sError = pdFALSE;
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;
MOV.W R7, R6
// 259
// 260 pdArray = ( portDOUBLE * ) pvPortMalloc( xArraySize * sizeof( portDOUBLE ) );
MOV.W R8, R12
RLA.W R12
RLA.W R12
CALL #pvPortMalloc
MOV.W R12, R11
// 261
// 262 /* Keep filling an array, keeping a running total of the values placed in the
// 263 array. Then run through the array adding up all the values. If the two totals
// 264 do not match, stop the check variable from incrementing. */
// 265 for( ;; )
// 266 {
// 267 dTotal1 = 0.0;
??vCompetingMathTask4_2:
MOV.W #0x0, 0x0(SP)
MOV.W #0x0, 0x2(SP)
// 268 dTotal2 = 0.0;
MOV.W #0x0, 0x4(SP)
MOV.W #0x0, 0x6(SP)
// 269
// 270 for( xPosition = 0; xPosition < xArraySize; xPosition++ )
MOV.W #0x0, R10
??vCompetingMathTask4_0:
CMP.W R8, R10
JC ??vCompetingMathTask4_3
// 271 {
// 272 pdArray[ xPosition ] = ( portDOUBLE ) xPosition * 12.123;
MOV.W R10, R12
MOV.W #0x0, R13
CALL #_Cast32uto32f
MOV.W #0xf7cf, R14
MOV.W #0x4141, R15
CALL #_Mul32f
MOV.W R10, R14
RLA.W R14
RLA.W R14
MOV.W R11, R15
ADD.W R14, R15
MOV.W R12, 0(R15)
MOV.W R13, 0x2(R15)
// 273 dTotal1 += ( portDOUBLE ) xPosition * 12.123;
MOV.W R10, R12
MOV.W #0x0, R13
CALL #_Cast32uto32f
MOV.W #0xf7cf, R14
MOV.W #0x4141, R15
CALL #_Mul32f
MOV.W R12, R14
MOV.W R13, R15
MOV.W 0x0(SP), R12
MOV.W 0x2(SP), R13
CALL #_Add32f
MOV.W R12, 0x0(SP)
MOV.W R13, 0x2(SP)
// 274 }
ADD.W #0x1, R10
JMP ??vCompetingMathTask4_0
// 275
// 276 #if configUSE_PREEMPTION == 0
// 277 taskYIELD();
// 278 #endif
// 279
// 280 for( xPosition = 0; xPosition < xArraySize; xPosition++ )
??vCompetingMathTask4_3:
MOV.W #0x0, R10
??vCompetingMathTask4_1:
CMP.W R8, R10
JC ??vCompetingMathTask4_4
// 281 {
// 282 dTotal2 += pdArray[ xPosition ];
MOV.W R10, R14
RLA.W R14
RLA.W R14
MOV.W R11, R15
ADD.W R14, R15
MOV.W @R15, R14
MOV.W 0x2(R15), R15
MOV.W 0x4(SP), R12
MOV.W 0x6(SP), R13
CALL #_Add32f
MOV.W R12, 0x4(SP)
MOV.W R13, 0x6(SP)
// 283 }
ADD.W #0x1, R10
JMP ??vCompetingMathTask4_1
// 284
// 285 dDifference = dTotal1 - dTotal2;
??vCompetingMathTask4_4:
MOV.W 0x4(SP), R14
MOV.W 0x6(SP), R15
MOV.W 0x0(SP), R12
MOV.W 0x2(SP), R13
CALL #_Sub32f
MOV.W R12, 0x8(SP)
MOV.W R13, 0xa(SP)
// 286 if( fabs( dDifference ) > 0.001 )
MOV.W 0x8(SP), R12
MOV.W 0xa(SP), R13
CALL #fabs
MOV.W #0x1270, R14
MOV.W #0x3a83, R15
CALL #_CmpGe32f
CMP.W #0x0, R12
JEQ ??vCompetingMathTask4_5
// 287 {
// 288 sError = pdTRUE;
MOV.W #0x1, R9
// 289 }
// 290
// 291 #if configUSE_PREEMPTION == 0
// 292 taskYIELD();
// 293 #endif
// 294
// 295 if( sError == pdFALSE )
??vCompetingMathTask4_5:
CMP.W #0x0, R9
JNE ??vCompetingMathTask4_2
// 296 {
// 297 /* If the calculation has always been correct, increment the check
// 298 variable so we know this task is still running okay. */
// 299 ( *pusTaskCheckVariable )++;
MOV.W R6, R15
ADD.W #0x1, 0(R15)
JMP ??vCompetingMathTask4_2
CFI EndBlock cfiBlock4
// 300 }
// 301 }
// 302 }
// 303 /*-----------------------------------------------------------*/
// 304
// 305 /* This is called to check that all the created tasks are still running. */
RSEG CODE:CODE:REORDER:NOROOT(1)
// 306 portBASE_TYPE xAreMathsTaskStillRunning( void )
xAreMathsTaskStillRunning:
CFI Block cfiBlock5 Using cfiCommon0
CFI Function xAreMathsTaskStillRunning
// 307 {
PUSH.W R10
CFI R10 Frame(CFA, -4)
CFI CFA SP+4
// 308 /* Keep a history of the check variables so we know if they have been incremented
// 309 since the last call. */
// 310 static unsigned portSHORT usLastTaskCheck[ mathNUMBER_OF_TASKS ] = { ( unsigned portSHORT ) 0 };
// 311 portBASE_TYPE xReturn = pdTRUE, xTask;
MOV.W #0x1, R12
// 312
// 313 /* Check the maths tasks are still running by ensuring their check variables
// 314 are still incrementing. */
// 315 for( xTask = 0; xTask < mathNUMBER_OF_TASKS; xTask++ )
MOV.W #0x0, R14
??xAreMathsTaskStillRunning_0:
CMP.W #0x8, R14
JGE ??xAreMathsTaskStillRunning_1
// 316 {
// 317 if( usTaskCheck[ xTask ] == usLastTaskCheck[ xTask ] )
MOV.W R14, R13
RLA.W R13
MOV.W R14, R15
RLA.W R15
CMP.W ??usLastTaskCheck(R15), usTaskCheck(R13)
JNE ??xAreMathsTaskStillRunning_2
// 318 {
// 319 /* The check has not incremented so an error exists. */
// 320 xReturn = pdFALSE;
MOV.W #0x0, R12
// 321 }
// 322
// 323 usLastTaskCheck[ xTask ] = usTaskCheck[ xTask ];
??xAreMathsTaskStillRunning_2:
MOV.W R14, R13
RLA.W R13
MOV.W R14, R15
RLA.W R15
MOV.W usTaskCheck(R13), ??usLastTaskCheck(R15)
// 324 }
ADD.W #0x1, R14
JMP ??xAreMathsTaskStillRunning_0
// 325
// 326 return xReturn;
??xAreMathsTaskStillRunning_1:
POP.W R10
CFI R10 SameValue
CFI CFA SP+2
RET
CFI EndBlock cfiBlock5
// 327 }
RSEG DATA16_Z:DATA:SORT:NOROOT(1)
REQUIRE ?cstart_init_zero
??usLastTaskCheck:
DS8 16
RSEG CODE:CODE:REORDER:NOROOT(1)
?setjmp_save_r4:
REQUIRE ?setjmp_r4
REQUIRE ?longjmp_r4
RSEG CODE:CODE:REORDER:NOROOT(1)
?setjmp_save_r5:
REQUIRE ?setjmp_r5
REQUIRE ?longjmp_r5
RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "Math1">`:
DC8 "Math1"
RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "Math2">`:
DC8 "Math2"
RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "Math3">`:
DC8 "Math3"
RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "Math4">`:
DC8 "Math4"
RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "Math5">`:
DC8 "Math5"
RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "Math6">`:
DC8 "Math6"
RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "Math7">`:
DC8 "Math7"
RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "Math8">`:
DC8 "Math8"
END
// 328
// 329
// 330
//
// 1 202 bytes in segment CODE
// 48 bytes in segment DATA16_C
// 32 bytes in segment DATA16_Z
//
// 1 202 bytes of CODE memory
// 48 bytes of CONST memory
// 32 bytes of DATA memory
//
//Errors: none
//Warnings: 10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -