⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flop.s43

📁 MSP430 IAR project with FreeRTOS port.
💻 S43
📖 第 1 页 / 共 3 页
字号:
        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 + -