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

📄 flop.s43

📁 MSP430 IAR project with FreeRTOS port.
💻 S43
📖 第 1 页 / 共 3 页
字号:
        MOV.W   #0x42f6, 0x2(SP)
//   94 	d2 = 2345.6789;
        MOV.W   #0x9add, 0x4(SP)
        MOV.W   #0x4512, 0x6(SP)
//   95 	d3 = -918.222;
        MOV.W   #0x8e35, 0x8(SP)
        MOV.W   #0xc465, 0xa(SP)
//   96 
//   97 	dAnswer = ( d1 + d2 ) * d3;
        MOV.W   0x4(SP), R14
        MOV.W   0x6(SP), R15
        MOV.W   0x0(SP), R12
        MOV.W   0x2(SP), R13
        CALL    #_Add32f
        MOV.W   0x8(SP), R14
        MOV.W   0xa(SP), R15
        CALL    #_Mul32f
        MOV.W   R12, 0x10(SP)
        MOV.W   R13, 0x12(SP)
//   98 
//   99 	/* The variable this task increments to show it is still running is passed in 
//  100 	as the parameter. */
//  101 	pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
        MOV.W   R10, R11
//  102 
//  103 	/* Keep performing a calculation and checking the result against a constant. */
//  104 	for(;;)
//  105 	{
//  106 		d1 = 123.4567;
??vCompetingMathTask1_0:
        MOV.W   #0xe9d5, 0x0(SP)
        MOV.W   #0x42f6, 0x2(SP)
//  107 		d2 = 2345.6789;
        MOV.W   #0x9add, 0x4(SP)
        MOV.W   #0x4512, 0x6(SP)
//  108 		d3 = -918.222;
        MOV.W   #0x8e35, 0x8(SP)
        MOV.W   #0xc465, 0xa(SP)
//  109 
//  110 		d4 = ( d1 + d2 ) * d3;
        MOV.W   0x4(SP), R14
        MOV.W   0x6(SP), R15
        MOV.W   0x0(SP), R12
        MOV.W   0x2(SP), R13
        CALL    #_Add32f
        MOV.W   0x8(SP), R14
        MOV.W   0xa(SP), R15
        CALL    #_Mul32f
        MOV.W   R12, 0xc(SP)
        MOV.W   R13, 0xe(SP)
//  111 
//  112 		#if configUSE_PREEMPTION == 0
//  113 			taskYIELD();
//  114 		#endif
//  115 
//  116 		/* If the calculation does not match the expected constant, stop the 
//  117 		increment of the check variable. */
//  118 		if( fabs( d4 - dAnswer ) > 0.001 )
        MOV.W   0x10(SP), R14
        MOV.W   0x12(SP), R15
        MOV.W   0xc(SP), R12
        MOV.W   0xe(SP), R13
        CALL    #_Sub32f
        CALL    #fabs
        MOV.W   #0x1270, R14
        MOV.W   #0x3a83, R15
        CALL    #_CmpGe32f
        CMP.W   #0x0, R12
        JEQ     ??vCompetingMathTask1_1
//  119 		{
//  120 			sError = pdTRUE;
        MOV.W   #0x1, R8
//  121 		}
//  122 
//  123 		if( sError == pdFALSE )
??vCompetingMathTask1_1:
        CMP.W   #0x0, R8
        JNE     ??vCompetingMathTask1_0
//  124 		{
//  125 			/* If the calculation has always been correct, increment the check 
//  126 			variable so we know this task is still running okay. */
//  127 			( *pusTaskCheckVariable )++;
        MOV.W   R11, R15
        ADD.W   #0x1, 0(R15)
        JMP     ??vCompetingMathTask1_0
        CFI EndBlock cfiBlock1
//  128 		}
//  129 
//  130 		#if configUSE_PREEMPTION == 0
//  131 			taskYIELD();
//  132 		#endif
//  133 
//  134 	}
//  135 }
//  136 /*-----------------------------------------------------------*/
//  137 

        RSEG CODE:CODE:REORDER:NOROOT(1)
//  138 static portTASK_FUNCTION( vCompetingMathTask2, pvParameters )
vCompetingMathTask2:
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function vCompetingMathTask2
//  139 {
        FUNCALL vCompetingMathTask2, _Div32f
        LOCFRAME CSTACK, 28, STACK
        FUNCALL vCompetingMathTask2, _Mul32f
        LOCFRAME CSTACK, 28, STACK
        FUNCALL vCompetingMathTask2, _Div32f
        LOCFRAME CSTACK, 28, STACK
        FUNCALL vCompetingMathTask2, _Mul32f
        LOCFRAME CSTACK, 28, STACK
        FUNCALL vCompetingMathTask2, _Sub32f
        LOCFRAME CSTACK, 28, STACK
        FUNCALL vCompetingMathTask2, fabs
        LOCFRAME CSTACK, 28, STACK
        FUNCALL vCompetingMathTask2, _CmpGe32f
        LOCFRAME CSTACK, 28, 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
        SUB.W   #0x14, SP
        CFI CFA SP+28
        MOV.W   R12, R10
//  140 volatile portDOUBLE d1, d2, d3, d4;
//  141 volatile unsigned portSHORT *pusTaskCheckVariable;
//  142 volatile portDOUBLE dAnswer;
//  143 portSHORT sError = pdFALSE;
        MOV.W   #0x0, R8
//  144 
//  145 	d1 = -389.38;
        MOV.W   #0xb0a4, 0x0(SP)
        MOV.W   #0xc3c2, 0x2(SP)
//  146 	d2 = 32498.2;
        MOV.W   #0xe466, 0x4(SP)
        MOV.W   #0x46fd, 0x6(SP)
//  147 	d3 = -2.0001;
        MOV.W   #0x1a3, 0x8(SP)
        MOV.W   #0xc000, 0xa(SP)
//  148 
//  149 	dAnswer = ( d1 / d2 ) * d3;
        MOV.W   0x4(SP), R14
        MOV.W   0x6(SP), R15
        MOV.W   0x0(SP), R12
        MOV.W   0x2(SP), R13
        CALL    #_Div32f
        MOV.W   0x8(SP), R14
        MOV.W   0xa(SP), R15
        CALL    #_Mul32f
        MOV.W   R12, 0x10(SP)
        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;
        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:
        MOV.W   #0xb0a4, 0x0(SP)
        MOV.W   #0xc3c2, 0x2(SP)
//  160 		d2 = 32498.2;
        MOV.W   #0xe466, 0x4(SP)
        MOV.W   #0x46fd, 0x6(SP)
//  161 		d3 = -2.0001;
        MOV.W   #0x1a3, 0x8(SP)
        MOV.W   #0xc000, 0xa(SP)
//  162 
//  163 		d4 = ( d1 / d2 ) * d3;
        MOV.W   0x4(SP), R14
        MOV.W   0x6(SP), R15
        MOV.W   0x0(SP), R12
        MOV.W   0x2(SP), R13
        CALL    #_Div32f
        MOV.W   0x8(SP), R14
        MOV.W   0xa(SP), R15
        CALL    #_Mul32f
        MOV.W   R12, 0xc(SP)
        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 )
        MOV.W   0x10(SP), R14
        MOV.W   0x12(SP), R15
        MOV.W   0xc(SP), R12
        MOV.W   0xe(SP), R13
        CALL    #_Sub32f
        CALL    #fabs
        MOV.W   #0x1270, R14
        MOV.W   #0x3a83, R15
        CALL    #_CmpGe32f
        CMP.W   #0x0, R12
        JEQ     ??vCompetingMathTask2_1
//  172 		{
//  173 			sError = pdTRUE;
        MOV.W   #0x1, R8
//  174 		}
//  175 
//  176 		if( sError == pdFALSE )
??vCompetingMathTask2_1:
        CMP.W   #0x0, R8
        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 )++;
        MOV.W   R11, R15
        ADD.W   #0x1, 0(R15)
        JMP     ??vCompetingMathTask2_0
        CFI EndBlock cfiBlock2
//  182 		}
//  183 
//  184 		#if configUSE_PREEMPTION == 0
//  185 			taskYIELD();
//  186 		#endif
//  187 	}
//  188 }
//  189 /*-----------------------------------------------------------*/
//  190 

        RSEG CODE:CODE:REORDER:NOROOT(1)
//  191 static portTASK_FUNCTION( vCompetingMathTask3, pvParameters )
vCompetingMathTask3:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function vCompetingMathTask3
//  192 {
        FUNCALL vCompetingMathTask3, pvPortMalloc
        LOCFRAME CSTACK, 26, STACK
        FUNCALL vCompetingMathTask3, _Cast32uto32f
        LOCFRAME CSTACK, 26, STACK
        FUNCALL vCompetingMathTask3, _Add32f
        LOCFRAME CSTACK, 26, STACK
        FUNCALL vCompetingMathTask3, _Cast32uto32f
        LOCFRAME CSTACK, 26, STACK
        FUNCALL vCompetingMathTask3, _Add32f
        LOCFRAME CSTACK, 26, STACK
        FUNCALL vCompetingMathTask3, _Add32f
        LOCFRAME CSTACK, 26, STACK
        FUNCALL vCompetingMathTask3, _Add32f
        LOCFRAME CSTACK, 26, STACK
        FUNCALL vCompetingMathTask3, _Sub32f
        LOCFRAME CSTACK, 26, STACK
        FUNCALL vCompetingMathTask3, fabs
        LOCFRAME CSTACK, 26, STACK
        FUNCALL vCompetingMathTask3, _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
//  193 volatile portDOUBLE *pdArray, dTotal1, dTotal2, dDifference;
//  194 volatile unsigned portSHORT *pusTaskCheckVariable;
//  195 const size_t xArraySize = 10;
        MOV.W   #0xa, R8
//  196 size_t xPosition;
//  197 portSHORT sError = pdFALSE;
        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;
        MOV.W   R7, R6
//  202 
//  203 	pdArray = ( portDOUBLE * ) pvPortMalloc( xArraySize * sizeof( portDOUBLE ) );
        MOV.W   R8, R12
        RLA.W   R12
        RLA.W   R12
        CALL    #pvPortMalloc
        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:
        MOV.W   #0x0, 0x0(SP)
        MOV.W   #0x0, 0x2(SP)
//  211 		dTotal2 = 0.0;
        MOV.W   #0x0, 0x4(SP)
        MOV.W   #0x0, 0x6(SP)
//  212 
//  213 		for( xPosition = 0; xPosition < xArraySize; xPosition++ )
        MOV.W   #0x0, R10
??vCompetingMathTask3_0:
        CMP.W   R8, R10
        JC      ??vCompetingMathTask3_3
//  214 		{
//  215 			pdArray[ xPosition ] = ( portDOUBLE ) xPosition + 5.5;
        MOV.W   R10, R12
        MOV.W   #0x0, R13
        CALL    #_Cast32uto32f
        MOV.W   #0x0, R14
        MOV.W   #0x40b0, R15
        CALL    #_Add32f
        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)
//  216 			dTotal1 += ( portDOUBLE ) xPosition + 5.5;	
        MOV.W   R10, R12
        MOV.W   #0x0, R13
        CALL    #_Cast32uto32f
        MOV.W   #0x0, R14
        MOV.W   #0x40b0, R15
        CALL    #_Add32f
        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)
//  217 		}
        ADD.W   #0x1, R10
        JMP     ??vCompetingMathTask3_0
//  218 
//  219 		#if configUSE_PREEMPTION == 0
//  220 			taskYIELD();
//  221 		#endif
//  222 
//  223 		for( xPosition = 0; xPosition < xArraySize; xPosition++ )
??vCompetingMathTask3_3:
        MOV.W   #0x0, R10
??vCompetingMathTask3_1:
        CMP.W   R8, R10
        JC      ??vCompetingMathTask3_4
//  224 		{
//  225 			dTotal2 += pdArray[ xPosition ];
        MOV.W   R10, R14
        RLA.W   R14
        RLA.W   R14
        MOV.W   R11, R15

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -