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

📄 pollq.lst

📁 MSP430 IAR project with FreeRTOS port.
💻 LST
📖 第 1 页 / 共 2 页
字号:
   \   000030   0F20         JNE     ??vPolledQueueProducer_5
    124          				{
    125          					/* If an error has ever been recorded we stop incrementing the
    126          					check variable. */
    127          					portENTER_CRITICAL();
   \   000032   32C2         DINT
   \   000034   0343         NOP
   \   000036   9253....     ADD.W   #0x1, &usCriticalNesting
    128          						xPollingProducerCount++;
   \   00003A   9253....     ADD.W   #0x1, &xPollingProducerCount
    129          					portEXIT_CRITICAL();
   \   00003E   8293....     CMP.W   #0x0, &usCriticalNesting
   \   000042   0624         JEQ     ??vPolledQueueProducer_5
   \   000044   B253....     ADD.W   #0xffff, &usCriticalNesting
   \   000048   8293....     CMP.W   #0x0, &usCriticalNesting
   \   00004C   0120         JNE     ??vPolledQueueProducer_5
   \   00004E   32D2         EINT
    130          				}
    131          
    132          				/* Update the value we are going to post next time around. */
    133          				usValue++;
   \                     ??vPolledQueueProducer_5:
   \   000050   91530000     ADD.W   #0x1, 0x0(SP)
    134          			}
    135          		}
   \                     ??vPolledQueueProducer_4:
   \   000054   1853         ADD.W   #0x1, R8
   \   000056   DD3F         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:
   \   000058   3C40C800     MOV.W   #0xc8, R12
   \   00005C   B012....     CALL    #vTaskDelay
   \   000060   D73F         JMP     ??vPolledQueueProducer_1
    140          	}
    141          }  /*lint !e818 Function prototype must conform to API. */
    142          /*-----------------------------------------------------------*/
    143          

   \                                 In segment CODE, align 2
    144          static portTASK_FUNCTION( vPolledQueueConsumer, pvParameters )
   \                     vPolledQueueConsumer:
    145          {
   \   000000   0A12         PUSH.W  R10
   \   000002   0B12         PUSH.W  R11
   \   000004   0812         PUSH.W  R8
   \   000006   2183         SUB.W   #0x2, SP
   \   000008   0A4C         MOV.W   R12, R10
    146          unsigned portSHORT usData, usExpectedValue = ( unsigned portSHORT ) 0;
   \   00000A   0B43         MOV.W   #0x0, R11
    147          signed portBASE_TYPE xError = pdFALSE;
   \   00000C   0843         MOV.W   #0x0, R8
    148          
    149          	for( ;; )
    150          	{		
    151          		/* Loop until the queue is empty. */
    152          		while( uxQueueMessagesWaiting( *( ( xQueueHandle * ) pvParameters ) ) )
   \                     ??vPolledQueueConsumer_0:
   \   00000E   2C4A         MOV.W   @R10, R12
   \   000010   B012....     CALL    #uxQueueMessagesWaiting
   \   000014   0C93         CMP.W   #0x0, R12
   \   000016   2224         JEQ     ??vPolledQueueConsumer_1
    153          		{
    154          			if( xQueueReceive( *( ( xQueueHandle * ) pvParameters ), &usData, pollqNO_DELAY ) == pdPASS )
   \   000018   0312         PUSH.W  #0x0
   \   00001A   0E41         MOV.W   SP, R14
   \   00001C   2E53         ADD.W   #0x2, R14
   \   00001E   2C4A         MOV.W   @R10, R12
   \   000020   B012....     CALL    #xQueueReceive
   \   000024   2153         ADD.W   #0x2, SP
   \   000026   1C93         CMP.W   #0x1, R12
   \   000028   F223         JNE     ??vPolledQueueConsumer_0
    155          			{
    156          				if( usData != usExpectedValue )
   \   00002A   819B0000     CMP.W   R11, 0x0(SP)
   \   00002E   0324         JEQ     ??vPolledQueueConsumer_2
    157          				{
    158          					/* This is not what we expected to receive so an error has
    159          					occurred. */
    160          					xError = pdTRUE;
   \   000030   1843         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;
   \   000032   2B41         MOV.W   0x0(SP), R11
   \   000034   113C         JMP     ??vPolledQueueConsumer_3
    165          				}
    166          				else
    167          				{
    168          					if( xError == pdFALSE )
   \                     ??vPolledQueueConsumer_2:
   \   000036   0893         CMP.W   #0x0, R8
   \   000038   0F20         JNE     ??vPolledQueueConsumer_3
    169          					{
    170          						/* Only increment the check variable if no errors have
    171          						occurred. */
    172          						portENTER_CRITICAL();
   \   00003A   32C2         DINT
   \   00003C   0343         NOP
   \   00003E   9253....     ADD.W   #0x1, &usCriticalNesting
    173          							xPollingConsumerCount++;
   \   000042   9253....     ADD.W   #0x1, &xPollingConsumerCount
    174          						portEXIT_CRITICAL();
   \   000046   8293....     CMP.W   #0x0, &usCriticalNesting
   \   00004A   0624         JEQ     ??vPolledQueueConsumer_3
   \   00004C   B253....     ADD.W   #0xffff, &usCriticalNesting
   \   000050   8293....     CMP.W   #0x0, &usCriticalNesting
   \   000054   0120         JNE     ??vPolledQueueConsumer_3
   \   000056   32D2         EINT
    175          					}
    176          				}
    177          
    178          				/* Next time round we would expect the number to be one higher. */
    179          				usExpectedValue++;
   \                     ??vPolledQueueConsumer_3:
   \   000058   1B53         ADD.W   #0x1, R11
   \   00005A   D93F         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:
   \   00005C   3C40C800     MOV.W   #0xc8, R12
   \   000060   B012....     CALL    #vTaskDelay
   \   000064   D43F         JMP     ??vPolledQueueConsumer_0
    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. */

   \                                 In segment CODE, align 2
    191          portBASE_TYPE xArePollingQueuesStillRunning( void )
   \                     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          	  )
   \   000000   8293....     CMP.W   #0x0, &xPollingConsumerCount
   \   000004   0324         JEQ     ??xArePollingQueuesStillRunning_0
   \   000006   8293....     CMP.W   #0x0, &xPollingProducerCount
   \   00000A   0220         JNE     ??xArePollingQueuesStillRunning_1
    202          	{
    203          		xReturn = pdFALSE;
   \                     ??xArePollingQueuesStillRunning_0:
   \   00000C   0C43         MOV.W   #0x0, R12
   \   00000E   013C         JMP     ??xArePollingQueuesStillRunning_2
    204          	}
    205          	else
    206          	{
    207          		xReturn = pdTRUE;
   \                     ??xArePollingQueuesStillRunning_1:
   \   000010   1C43         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:
   \   000012   8243....     MOV.W   #0x0, &xPollingConsumerCount
    213          	xPollingProducerCount = pollqINITIAL_VALUE;
   \   000016   8243....     MOV.W   #0x0, &xPollingProducerCount
    214          
    215          	return xReturn;
   \   00001A   3041         RET
    216          }

   \                                 In segment DATA16_C, align 1, align-sorted
   \                     `?<Constant "QConsNB">`:
   \   000000   51436F6E734E DC8 "QConsNB"
   \            4200        

   \                                 In segment DATA16_C, align 1, align-sorted
   \                     `?<Constant "QProdNB">`:
   \   000000   5150726F644E DC8 "QProdNB"
   \            4200        

   Maximum stack usage in bytes:

     Function                      CSTACK
     --------                      ------
     vPolledQueueConsumer             12
       -> uxQueueMessagesWaiting      10
       -> xQueueReceive               12
       -> vTaskDelay                  10
     vPolledQueueProducer             12
       -> xQueueSend                  12
       -> vTaskDelay                  10
     vStartPolledQueueTasks           20
       -> xQueueCreate                 4
       -> xTaskCreate                 12
       -> xTaskCreate                 20
     xArePollingQueuesStillRunning     2


   Segment part sizes:

     Function/Label                Bytes
     --------------                -----
     xPollingConsumerCount            2
     xPollingProducerCount            2
     vStartPolledQueueTasks          74
     xPolledQueue                     2
     vPolledQueueProducer            98
     vPolledQueueConsumer           102
     xArePollingQueuesStillRunning   28
     ?<Constant "QConsNB">            8
     ?<Constant "QProdNB">            8

 
 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 + -