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

📄 queue.lst

📁 MSP430 IAR project with FreeRTOS port.
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   000074   0343         NOP
   \   000076   9253....     ADD.W   #0x1, &usCriticalNesting
   \   00007A   0F49         MOV.W   R9, R15
   \   00007C   9F532200     ADD.W   #0x1, 0x22(R15)
   \   000080   0F49         MOV.W   R9, R15
   \   000082   9F532400     ADD.W   #0x1, 0x24(R15)
   \   000086   8293....     CMP.W   #0x0, &usCriticalNesting
   \   00008A   0624         JEQ     ??xQueueReceive_3
   \   00008C   B253....     ADD.W   #0xffff, &usCriticalNesting
   \   000090   8293....     CMP.W   #0x0, &usCriticalNesting
   \   000094   0120         JNE     ??xQueueReceive_3
   \   000096   32D2         EINT
    455          			}
    456          			taskEXIT_CRITICAL();
   \                     ??xQueueReceive_3:
   \   000098   8293....     CMP.W   #0x0, &usCriticalNesting
   \   00009C   0624         JEQ     ??xQueueReceive_1
   \   00009E   B253....     ADD.W   #0xffff, &usCriticalNesting
   \   0000A2   8293....     CMP.W   #0x0, &usCriticalNesting
   \   0000A6   0120         JNE     ??xQueueReceive_1
   \   0000A8   32D2         EINT
    457          		}
    458          	}
    459          
    460          	taskENTER_CRITICAL();
   \                     ??xQueueReceive_1:
   \   0000AA   32C2         DINT
   \   0000AC   0343         NOP
   \   0000AE   9253....     ADD.W   #0x1, &usCriticalNesting
    461          	{
    462          		if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 )
   \   0000B2   89931C00     CMP.W   #0x0, 0x1c(R9)
   \   0000B6   1A24         JEQ     ??xQueueReceive_4
    463          		{
    464          			pxQueue->pcReadFrom += pxQueue->uxItemSize;
   \   0000B8   0F49         MOV.W   R9, R15
   \   0000BA   9F5920000600 ADD.W   0x20(R9), 0x6(R15)
    465          			if( pxQueue->pcReadFrom >= pxQueue->pcTail )
   \   0000C0   999902000600 CMP.W   0x2(R9), 0x6(R9)
   \   0000C6   0228         JNC     ??xQueueReceive_5
    466          			{
    467          				pxQueue->pcReadFrom = pxQueue->pcHead;
   \   0000C8   A9490600     MOV.W   @R9, 0x6(R9)
    468          			}
    469          			--( pxQueue->uxMessagesWaiting );
   \                     ??xQueueReceive_5:
   \   0000CC   0F49         MOV.W   R9, R15
   \   0000CE   BF531C00     ADD.W   #0xffff, 0x1c(R15)
    470          			memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->pcReadFrom, ( unsigned ) pxQueue->uxItemSize );
   \   0000D2   19122000     PUSH.W  0x20(R9)
   \   0000D6   1E490600     MOV.W   0x6(R9), R14
   \   0000DA   0C4A         MOV.W   R10, R12
   \   0000DC   B012....     CALL    #memcpy
    471          
    472          			/* Increment the lock count so prvUnlockQueue knows to check for
    473          			tasks waiting for space to become available on the queue. */
    474          			++( pxQueue->xRxLock );
   \   0000E0   0F49         MOV.W   R9, R15
   \   0000E2   9F532200     ADD.W   #0x1, 0x22(R15)
    475          			xReturn = pdPASS;
   \   0000E6   1843         MOV.W   #0x1, R8
   \   0000E8   2153         ADD.W   #0x2, SP
   \   0000EA   013C         JMP     ??xQueueReceive_6
    476          		}
    477          		else
    478          		{
    479          			xReturn = pdFAIL;
   \                     ??xQueueReceive_4:
   \   0000EC   0843         MOV.W   #0x0, R8
    480          		}
    481          	}
    482          	taskEXIT_CRITICAL();
   \                     ??xQueueReceive_6:
   \   0000EE   8293....     CMP.W   #0x0, &usCriticalNesting
   \   0000F2   0624         JEQ     ??xQueueReceive_7
   \   0000F4   B253....     ADD.W   #0xffff, &usCriticalNesting
   \   0000F8   8293....     CMP.W   #0x0, &usCriticalNesting
   \   0000FC   0120         JNE     ??xQueueReceive_7
   \   0000FE   32D2         EINT
    483          
    484          	/* We no longer require exclusive access to the queue. */
    485          	if( prvUnlockQueue( pxQueue ) )
   \                     ??xQueueReceive_7:
   \   000100   0C49         MOV.W   R9, R12
   \   000102   B012....     CALL    #prvUnlockQueue
   \   000106   0C93         CMP.W   #0x0, R12
   \   000108   0724         JEQ     ??xQueueReceive_8
    486          	{
    487          		if( !xTaskResumeAll() )
   \   00010A   B012....     CALL    #xTaskResumeAll
   \   00010E   0C93         CMP.W   #0x0, R12
   \   000110   0520         JNE     ??xQueueReceive_9
    488          		{
    489          			taskYIELD();
   \   000112   B012....     CALL    #vPortYield
   \   000116   023C         JMP     ??xQueueReceive_9
    490          		}
    491          	}
    492          	else
    493          	{
    494          		xTaskResumeAll();
   \                     ??xQueueReceive_8:
   \   000118   B012....     CALL    #xTaskResumeAll
    495          	}
    496          
    497          	return xReturn;
   \                     ??xQueueReceive_9:
   \   00011C   0C48         MOV.W   R8, R12
   \   00011E   3040....     BR      #?Epilogue4
    498          }
    499          /*-----------------------------------------------------------*/
    500          

   \                                 In segment CODE, align 2
    501          signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle pxQueue, void *pvBuffer, signed portBASE_TYPE *pxTaskWoken )
   \                     xQueueReceiveFromISR:
    502          {
   \   000000   0A12         PUSH.W  R10
   \   000002   0B12         PUSH.W  R11
   \   000004   0812         PUSH.W  R8
   \   000006   0912         PUSH.W  R9
   \   000008   0A4C         MOV.W   R12, R10
   \   00000A   0B4E         MOV.W   R14, R11
   \   00000C   18410A00     MOV.W   0xa(SP), R8
    503          signed portBASE_TYPE xReturn;
    504          
    505          	/* We cannot block from an ISR, so check there is data available. */
    506          	if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 )
   \   000010   8A931C00     CMP.W   #0x0, 0x1c(R10)
   \   000014   2C24         JEQ     ??xQueueReceiveFromISR_0
    507          	{
    508          		/* Copy the data from the queue. */
    509          		pxQueue->pcReadFrom += pxQueue->uxItemSize;
   \   000016   0F4A         MOV.W   R10, R15
   \   000018   9F5A20000600 ADD.W   0x20(R10), 0x6(R15)
    510          		if( pxQueue->pcReadFrom >= pxQueue->pcTail )
   \   00001E   9A9A02000600 CMP.W   0x2(R10), 0x6(R10)
   \   000024   0228         JNC     ??xQueueReceiveFromISR_1
    511          		{
    512          			pxQueue->pcReadFrom = pxQueue->pcHead;
   \   000026   AA4A0600     MOV.W   @R10, 0x6(R10)
    513          		}
    514          		--( pxQueue->uxMessagesWaiting );
   \                     ??xQueueReceiveFromISR_1:
   \   00002A   0F4A         MOV.W   R10, R15
   \   00002C   BF531C00     ADD.W   #0xffff, 0x1c(R15)
    515          		memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->pcReadFrom, ( unsigned ) pxQueue->uxItemSize );
   \   000030   1A122000     PUSH.W  0x20(R10)
   \   000034   1E4A0600     MOV.W   0x6(R10), R14
   \   000038   0C4B         MOV.W   R11, R12
   \   00003A   B012....     CALL    #memcpy
    516          
    517          		/* If the queue is locked we will not modify the event list.  Instead
    518          		we update the lock count so the task that unlocks the queue will know
    519          		that an ISR has removed data while the queue was locked. */
    520          		if( pxQueue->xRxLock == queueUNLOCKED )
   \   00003E   2153         ADD.W   #0x2, SP
   \   000040   BA932200     CMP.W   #0xffff, 0x22(R10)
   \   000044   0F20         JNE     ??xQueueReceiveFromISR_2
    521          		{
    522          			/* We only want to wake one task per ISR, so check that a task has
    523          			not already been woken. */
    524          			if( !( *pxTaskWoken ) )
   \   000046   88930000     CMP.W   #0x0, 0(R8)
   \   00004A   0F20         JNE     ??xQueueReceiveFromISR_3
    525          			{
    526          				if( !listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) )
   \   00004C   8A930800     CMP.W   #0x0, 0x8(R10)
   \   000050   0C24         JEQ     ??xQueueReceiveFromISR_3
    527          				{
    528          					if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
   \   000052   0C4A         MOV.W   R10, R12
   \   000054   3C52         ADD.W   #0x8, R12
   \   000056   B012....     CALL    #xTaskRemoveFromEventList
   \   00005A   0C93         CMP.W   #0x0, R12
   \   00005C   0624         JEQ     ??xQueueReceiveFromISR_3
    529          					{
    530          						/* The task waiting has a higher priority than us so
    531          						force a context switch. */
    532          						*pxTaskWoken = pdTRUE;
   \   00005E   98430000     MOV.W   #0x1, 0(R8)
   \   000062   033C         JMP     ??xQueueReceiveFromISR_3
    533          					}
    534          				}
    535          			}
    536          		}
    537          		else
    538          		{
    539          			/* Increment the lock count so the task that unlocks the queue
    540          			knows that data was removed while it was locked. */
    541          			++( pxQueue->xRxLock );
   \                     ??xQueueReceiveFromISR_2:
   \   000064   0F4A         MOV.W   R10, R15
   \   000066   9F532200     ADD.W   #0x1, 0x22(R15)
    542          		}
    543          
    544          		xReturn = pdPASS;
   \                     ??xQueueReceiveFromISR_3:
   \   00006A   1943         MOV.W   #0x1, R9
   \   00006C   013C         JMP     ??xQueueReceiveFromISR_4
    545          	}
    546          	else
    547          	{
    548          		xReturn = pdFAIL;
   \                     ??xQueueReceiveFromISR_0:
   \   00006E   0943         MOV.W   #0x0, R9
    549          	}
    550          
    551          	return xReturn;
   \                     ??xQueueReceiveFromISR_4:
   \   000070   0C49         MOV.W   R9, R12
   \   000072   3040....     BR      #?Epilogue4
    552          }
    553          /*-----------------------------------------------------------*/
    554          

   \                                 In segment CODE, align 2
    555          unsigned portBASE_TYPE uxQueueMessagesWaiting( xQueueHandle pxQueue )
   \                     uxQueueMessagesWaiting:
    556          {
   \   000000   0F4C         MOV.W   R12, R15
    557          unsigned portBASE_TYPE uxReturn;
    558          
    559          	taskENTER_CRITICAL();
   \   000002   32C2         DINT
   \   000004   0343         NOP
   \   000006   9253....     ADD.W   #0x1, &usCriticalNesting
    560          		uxReturn = pxQueue->uxMessagesWaiting;
   \   00000A   1C4F1C00     MOV.W   0x1c(R15), R12
    561          	taskEXIT_CRITICAL();
   \   00000E   8293....     CMP.W   #0x0, &usCriticalNesting
   \   000012   0624         JEQ     ??uxQueueMessagesWaiting_0
   \   000014   B253....     ADD.W   #0xffff, &usCriticalNesting
   \   000018   8293....     CMP.W   #0x0, &usCriticalNesting
   \   00001C   0120         JNE     ??uxQueueMessagesWaiting_0
   \   00001E   32D2         EINT
    562          
    563          	return uxReturn;
   \                     ??uxQueueMessagesWaiting_0:
   \   000020   3041         RET
    564          }
    565          /*-----------------------------------------------------------*/
    566          

   \                                 In segment CODE, align 2
    567          void vQueueDelete( xQueueHandle pxQueue )
   \                     vQueueDelete:
    568          {
   \   000000   0A12         PUSH.W  R10
   \   000002   0A4C         MOV.W   R12, R10
    569          	vPortFree( pxQueue->pcHead );
   \   000004   2C4A         MOV.W   @R10, R12

⌨️ 快捷键说明

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