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

📄 pollq.s43

📁 MSP430 IAR project with FreeRTOS port.
💻 S43
📖 第 1 页 / 共 2 页
字号:
        FUNCALL vPolledQueueProducer, vTaskDelay
        LOCFRAME CSTACK, 10, 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   #0x2, SP
        CFI CFA SP+10
        MOV.W   R12, R10
//  107 unsigned portSHORT usValue = ( unsigned portSHORT ) 0;
        MOV.W   #0x0, 0x0(SP)
//  108 signed portBASE_TYPE xError = pdFALSE, xLoop;
        MOV.W   #0x0, R11
//  109 
//  110 	for( ;; )
//  111 	{		
//  112 		for( xLoop = 0; xLoop < pollqVALUES_TO_PRODUCE; xLoop++ )
??vPolledQueueProducer_1:
        MOV.W   #0x0, R8
??vPolledQueueProducer_0:
        CMP.W   #0x3, R8
        JGE     ??vPolledQueueProducer_2
//  113 		{
//  114 			/* Send an incrementing number on the queue without blocking. */
//  115 			if( xQueueSend( *( ( xQueueHandle * ) pvParameters ), ( void * ) &usValue, pollqNO_DELAY ) != pdPASS )
        PUSH.W  #0x0
        CFI CFA SP+12
        MOV.W   SP, R14
        ADD.W   #0x2, R14
        MOV.W   @R10, R12
        CALL    #xQueueSend
        ADD.W   #0x2, SP
        CFI CFA SP+10
        CMP.W   #0x1, R12
        JEQ     ??vPolledQueueProducer_3
//  116 			{
//  117 				/* We should never find the queue full so if we get here there
//  118 				has been an error. */
//  119 				xError = pdTRUE;
        MOV.W   #0x1, R11
        JMP     ??vPolledQueueProducer_4
//  120 			}
//  121 			else
//  122 			{
//  123 				if( xError == pdFALSE )
??vPolledQueueProducer_3:
        CMP.W   #0x0, R11
        JNE     ??vPolledQueueProducer_5
//  124 				{
//  125 					/* If an error has ever been recorded we stop incrementing the
//  126 					check variable. */
//  127 					portENTER_CRITICAL();
        DINT
        NOP
        ADD.W   #0x1, &usCriticalNesting
//  128 						xPollingProducerCount++;
        ADD.W   #0x1, &xPollingProducerCount
//  129 					portEXIT_CRITICAL();
        CMP.W   #0x0, &usCriticalNesting
        JEQ     ??vPolledQueueProducer_5
        ADD.W   #0xffff, &usCriticalNesting
        CMP.W   #0x0, &usCriticalNesting
        JNE     ??vPolledQueueProducer_5
        EINT
//  130 				}
//  131 
//  132 				/* Update the value we are going to post next time around. */
//  133 				usValue++;
??vPolledQueueProducer_5:
        ADD.W   #0x1, 0x0(SP)
//  134 			}
//  135 		}
??vPolledQueueProducer_4:
        ADD.W   #0x1, R8
        JMP     ??vPolledQueueProducer_0
//  136 
//  137 		/* Wait before we start posting again to ensure the consumer runs and
//  138 		empties the queue. */
//  139 		vTaskDelay( pollqDELAY );
??vPolledQueueProducer_2:
        MOV.W   #0xc8, R12
        CALL    #vTaskDelay
        JMP     ??vPolledQueueProducer_1
        CFI EndBlock cfiBlock1
//  140 	}
//  141 }  /*lint !e818 Function prototype must conform to API. */
//  142 /*-----------------------------------------------------------*/
//  143 

        RSEG CODE:CODE:REORDER:NOROOT(1)
//  144 static portTASK_FUNCTION( vPolledQueueConsumer, pvParameters )
vPolledQueueConsumer:
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function vPolledQueueConsumer
//  145 {
        FUNCALL vPolledQueueConsumer, uxQueueMessagesWaiting
        LOCFRAME CSTACK, 10, STACK
        FUNCALL vPolledQueueConsumer, xQueueReceive
        LOCFRAME CSTACK, 12, STACK
        FUNCALL vPolledQueueConsumer, vTaskDelay
        LOCFRAME CSTACK, 10, 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   #0x2, SP
        CFI CFA SP+10
        MOV.W   R12, R10
//  146 unsigned portSHORT usData, usExpectedValue = ( unsigned portSHORT ) 0;
        MOV.W   #0x0, R11
//  147 signed portBASE_TYPE xError = pdFALSE;
        MOV.W   #0x0, R8
//  148 
//  149 	for( ;; )
//  150 	{		
//  151 		/* Loop until the queue is empty. */
//  152 		while( uxQueueMessagesWaiting( *( ( xQueueHandle * ) pvParameters ) ) )
??vPolledQueueConsumer_0:
        MOV.W   @R10, R12
        CALL    #uxQueueMessagesWaiting
        CMP.W   #0x0, R12
        JEQ     ??vPolledQueueConsumer_1
//  153 		{
//  154 			if( xQueueReceive( *( ( xQueueHandle * ) pvParameters ), &usData, pollqNO_DELAY ) == pdPASS )
        PUSH.W  #0x0
        CFI CFA SP+12
        MOV.W   SP, R14
        ADD.W   #0x2, R14
        MOV.W   @R10, R12
        CALL    #xQueueReceive
        ADD.W   #0x2, SP
        CFI CFA SP+10
        CMP.W   #0x1, R12
        JNE     ??vPolledQueueConsumer_0
//  155 			{
//  156 				if( usData != usExpectedValue )
        CMP.W   R11, 0x0(SP)
        JEQ     ??vPolledQueueConsumer_2
//  157 				{
//  158 					/* This is not what we expected to receive so an error has
//  159 					occurred. */
//  160 					xError = pdTRUE;
        MOV.W   #0x1, R8
//  161 
//  162 					/* Catch-up to the value we received so our next expected
//  163 					value should again be correct. */
//  164 					usExpectedValue = usData;
        MOV.W   0x0(SP), R11
        JMP     ??vPolledQueueConsumer_3
//  165 				}
//  166 				else
//  167 				{
//  168 					if( xError == pdFALSE )
??vPolledQueueConsumer_2:
        CMP.W   #0x0, R8
        JNE     ??vPolledQueueConsumer_3
//  169 					{
//  170 						/* Only increment the check variable if no errors have
//  171 						occurred. */
//  172 						portENTER_CRITICAL();
        DINT
        NOP
        ADD.W   #0x1, &usCriticalNesting
//  173 							xPollingConsumerCount++;
        ADD.W   #0x1, &xPollingConsumerCount
//  174 						portEXIT_CRITICAL();
        CMP.W   #0x0, &usCriticalNesting
        JEQ     ??vPolledQueueConsumer_3
        ADD.W   #0xffff, &usCriticalNesting
        CMP.W   #0x0, &usCriticalNesting
        JNE     ??vPolledQueueConsumer_3
        EINT
//  175 					}
//  176 				}
//  177 
//  178 				/* Next time round we would expect the number to be one higher. */
//  179 				usExpectedValue++;
??vPolledQueueConsumer_3:
        ADD.W   #0x1, R11
        JMP     ??vPolledQueueConsumer_0
//  180 			}
//  181 		}
//  182 
//  183 		/* Now the queue is empty we block, allowing the producer to place more
//  184 		items in the queue. */
//  185 		vTaskDelay( pollqDELAY );
??vPolledQueueConsumer_1:
        MOV.W   #0xc8, R12
        CALL    #vTaskDelay
        JMP     ??vPolledQueueConsumer_0
        CFI EndBlock cfiBlock2
//  186 	}
//  187 } /*lint !e818 Function prototype must conform to API. */
//  188 /*-----------------------------------------------------------*/
//  189 
//  190 /* This is called to check that all the created tasks are still running with no errors. */

        RSEG CODE:CODE:REORDER:NOROOT(1)
//  191 portBASE_TYPE xArePollingQueuesStillRunning( void )
xArePollingQueuesStillRunning:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function xArePollingQueuesStillRunning
//  192 {
//  193 portBASE_TYPE xReturn;
//  194 
//  195 	/* Check both the consumer and producer poll count to check they have both
//  196 	been changed since out last trip round.  We do not need a critical section
//  197 	around the check variables as this is called from a higher priority than
//  198 	the other tasks that access the same variables. */
//  199 	if( ( xPollingConsumerCount == pollqINITIAL_VALUE ) ||
//  200 		( xPollingProducerCount == pollqINITIAL_VALUE )
//  201 	  )
        CMP.W   #0x0, &xPollingConsumerCount
        JEQ     ??xArePollingQueuesStillRunning_0
        CMP.W   #0x0, &xPollingProducerCount
        JNE     ??xArePollingQueuesStillRunning_1
//  202 	{
//  203 		xReturn = pdFALSE;
??xArePollingQueuesStillRunning_0:
        MOV.W   #0x0, R12
        JMP     ??xArePollingQueuesStillRunning_2
//  204 	}
//  205 	else
//  206 	{
//  207 		xReturn = pdTRUE;
??xArePollingQueuesStillRunning_1:
        MOV.W   #0x1, R12
//  208 	}
//  209 
//  210 	/* Set the check variables back down so we know if they have been
//  211 	incremented the next time around. */
//  212 	xPollingConsumerCount = pollqINITIAL_VALUE;
??xArePollingQueuesStillRunning_2:
        MOV.W   #0x0, &xPollingConsumerCount
//  213 	xPollingProducerCount = pollqINITIAL_VALUE;
        MOV.W   #0x0, &xPollingProducerCount
//  214 
//  215 	return xReturn;
        RET
        CFI EndBlock cfiBlock3
//  216 }

        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 "QConsNB">`:
        DC8 "QConsNB"

        RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "QProdNB">`:
        DC8 "QProdNB"

        END
// 
// 302 bytes in segment CODE
//  16 bytes in segment DATA16_C
//   6 bytes in segment DATA16_Z
// 
// 302 bytes of CODE  memory
//  16 bytes of CONST memory
//   6 bytes of DATA  memory
//
//Errors: none
//Warnings: 2

⌨️ 快捷键说明

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