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

📄 tasks.lst

📁 本代码已经经过修改
💻 LST
📖 第 1 页 / 共 5 页
字号:
    638          				vListRemove( ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) );
   \   00000036   ....               LDR         R4,??DataTable24   ;; pxCurrentTCB
   \   00000038   2068               LDR         R0,[R4, #+0]
   \   0000003A   1030               ADD         R0,#+0x10
   \   0000003C   ........           _BLF        vListRemove,vListRemove??rT
    639          
    640          				/* The list item will be inserted in wake time order. */
    641          				listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake );
   \   00000040   2068               LDR         R0,[R4, #+0]
   \   00000042   0661               STR         R6,[R0, #+0x10]
    642          
    643          				if( xTimeToWake < xTickCount )
   \   00000044   3868               LDR         R0,[R7, #+0]
   \   00000046   8642               CMP         R6,R0
   \   00000048   2168               LDR         R1,[R4, #+0]
   \   0000004A   02D2               BCS         ??vTaskDelayUntil_4
    644          				{
    645          					/* Wake time has overflowed.  Place this item in the
    646          					overflow list. */
    647          					vListInsert( ( xList * ) pxOverflowDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) );
   \   0000004C   1031               ADD         R1,#+0x10
   \   0000004E   ....               LDR         R0,??DataTable16   ;; ??pxOverflowDelayedTaskList
   \   00000050   01E0               B           ??vTaskDelayUntil_5
    648          				}
    649          				else
    650          				{
    651          					/* The wake time has not overflowed, so we can use the
    652          					current block list. */
    653          					vListInsert( ( xList * ) pxDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) );
   \                     ??vTaskDelayUntil_4:
   \   00000052   1031               ADD         R1,#+0x10
   \   00000054   ....               LDR         R0,??DataTable17   ;; ??pxDelayedTaskList
   \                     ??vTaskDelayUntil_5:
   \   00000056   0068               LDR         R0,[R0, #+0]
   \   00000058   ........           _BLF        vListInsert,vListInsert??rT
    654          				}
    655          			}
    656          		}
    657          		xAlreadyYielded = xTaskResumeAll();
    658          
    659          		/* Force a reschedule if xTaskResumeAll has not already done so, we may
    660          		have put ourselves to sleep. */
    661          		if( !xAlreadyYielded )
   \                     ??vTaskDelayUntil_3:
   \   0000005C   ........           BL          xTaskResumeAll
   \   00000060   0028               CMP         R0,#+0
   \   00000062   00D1               BNE         ??vTaskDelayUntil_6
    662          		{
    663          			taskYIELD();
   \   00000064   00DF               SWI 0          
    664          		}
    665          	}
   \                     ??vTaskDelayUntil_6:
   \   00000066   F0BC               POP         {R4-R7}
   \   00000068   01BC               POP         {R0}
   \   0000006A   0047               BX          R0                 ;; return
    666          #endif
    667          /*-----------------------------------------------------------*/
    668          
    669          #if ( INCLUDE_vTaskDelay == 1 )

   \                                 In segment CODE, align 4, keep-with-next
    670          	void vTaskDelay( portTickType xTicksToDelay )
    671          	{
   \                     vTaskDelay:
   \   00000000   70B5               PUSH        {R4-R6,LR}
   \   00000002   051C               MOV         R5,R0
    672          	portTickType xTimeToWake;
    673          	signed portBASE_TYPE xAlreadyYielded = pdFALSE;
    674          
    675          		/* A delay time of zero just forces a reschedule. */
    676          		if( xTicksToDelay > ( portTickType ) 0 )
   \   00000004   1BD0               BEQ         ??vTaskDelay_0
    677          		{
    678          			vTaskSuspendAll();
   \   00000006   ........           BL          vTaskSuspendAll
    679          			{
    680          				/* A task that is removed from the event list while the
    681          				scheduler is suspended will not get placed in the ready
    682          				list or removed from the blocked list until the scheduler
    683          				is resumed.
    684          				
    685          				This task cannot be in an event list as it is the currently
    686          				executing task. */
    687          
    688          				/* Calculate the time to wake - this may overflow but this is
    689          				not a problem. */
    690          				xTimeToWake = xTickCount + xTicksToDelay;
   \   0000000A   ....               LDR         R4,??DataTable33   ;; ??xTickCount
   \   0000000C   2068               LDR         R0,[R4, #+0]
   \   0000000E   4619               ADD         R6,R0,R5
    691          
    692          				/* We must remove ourselves from the ready list before adding
    693          				ourselves to the blocked list as the same list item is used for
    694          				both lists. */
    695          				vListRemove( ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) );
   \   00000010   ....               LDR         R5,??DataTable24   ;; pxCurrentTCB
   \   00000012   2868               LDR         R0,[R5, #+0]
   \   00000014   1030               ADD         R0,#+0x10
   \   00000016   ........           _BLF        vListRemove,vListRemove??rT
    696          
    697          				/* The list item will be inserted in wake time order. */
    698          				listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake );
   \   0000001A   2868               LDR         R0,[R5, #+0]
   \   0000001C   0661               STR         R6,[R0, #+0x10]
    699          
    700          				if( xTimeToWake < xTickCount )
   \   0000001E   2068               LDR         R0,[R4, #+0]
   \   00000020   8642               CMP         R6,R0
   \   00000022   2968               LDR         R1,[R5, #+0]
   \   00000024   02D2               BCS         ??vTaskDelay_1
    701          				{
    702          					/* Wake time has overflowed.  Place this item in the
    703          					overflow list. */
    704          					vListInsert( ( xList * ) pxOverflowDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) );
   \   00000026   1031               ADD         R1,#+0x10
   \   00000028   ....               LDR         R0,??DataTable16   ;; ??pxOverflowDelayedTaskList
   \   0000002A   01E0               B           ??vTaskDelay_2
    705          				}
    706          				else
    707          				{
    708          					/* The wake time has not overflowed, so we can use the
    709          					current block list. */
    710          					vListInsert( ( xList * ) pxDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) );
   \                     ??vTaskDelay_1:
   \   0000002C   1031               ADD         R1,#+0x10
   \   0000002E   ....               LDR         R0,??DataTable17   ;; ??pxDelayedTaskList
   \                     ??vTaskDelay_2:
   \   00000030   0068               LDR         R0,[R0, #+0]
   \   00000032   ........           _BLF        vListInsert,vListInsert??rT
    711          				}
    712          			}
    713          			xAlreadyYielded = xTaskResumeAll();
    714          		}
    715          		
    716          		/* Force a reschedule if xTaskResumeAll has not already done so, we may
    717          		have put ourselves to sleep. */
    718          		if( !xAlreadyYielded )
   \   00000036   ........           BL          xTaskResumeAll
   \   0000003A   0028               CMP         R0,#+0
   \   0000003C   00D1               BNE         ??vTaskDelay_3
    719          		{
    720          			taskYIELD();
   \                     ??vTaskDelay_0:
   \   0000003E   00DF               SWI 0          
    721          		}
    722          	}
   \                     ??vTaskDelay_3:
   \   00000040   70BC               POP         {R4-R6}
   \   00000042   01BC               POP         {R0}
   \   00000044   0047               BX          R0                 ;; return
    723          #endif
    724          /*-----------------------------------------------------------*/
    725          
    726          #if ( INCLUDE_uxTaskPriorityGet == 1 )
    727          

   \                                 In segment CODE, align 4, keep-with-next
    728          	unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask )
    729          	{
   \                     uxTaskPriorityGet:
   \   00000000   10B5               PUSH        {R4,LR}
   \   00000002   041C               MOV         R4,R0
    730          	tskTCB *pxTCB;
    731          	unsigned portBASE_TYPE uxReturn;
    732          
    733          		taskENTER_CRITICAL();
   \   00000004   ........           _BLF        vPortEnterCritical,vPortEnterCritical??rT
    734          		{
    735          			/* If null is passed in here then we are changing the
    736          			priority of the calling function. */
    737          			pxTCB = prvGetTCBFromHandle( pxTask );
   \   00000008   002C               CMP         R4,#+0
   \   0000000A   01D1               BNE         ??uxTaskPriorityGet_0
   \   0000000C   ....               LDR         R0,??DataTable24   ;; pxCurrentTCB
   \   0000000E   0468               LDR         R4,[R0, #+0]
    738          			uxReturn = pxTCB->uxPriority;
   \                     ??uxTaskPriorityGet_0:
   \   00000010   E468               LDR         R4,[R4, #+0xC]
    739          		}
    740          		taskEXIT_CRITICAL();
   \   00000012   ........           _BLF        vPortExitCritical,vPortExitCritical??rT
    741          
    742          		return uxReturn;
   \   00000016   201C               MOV         R0,R4
   \   00000018   10BC               POP         {R4}
   \   0000001A   02BC               POP         {R1}
   \   0000001C   0847               BX          R1                 ;; return
    743          	}
    744          
    745          #endif
    746          /*-----------------------------------------------------------*/
    747          
    748          #if ( INCLUDE_vTaskPrioritySet == 1 )
    749          

   \                                 In segment CODE, align 4, keep-with-next
    750          	void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority )
    751          	{
   \                     vTaskPrioritySet:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   041C               MOV         R4,R0
   \   00000004   0D1C               MOV         R5,R1
    752          	tskTCB *pxTCB;
    753          	unsigned portBASE_TYPE uxCurrentPriority;
    754          
    755          		/* Ensure the new priority is valid. */
    756          		if( uxNewPriority >= configMAX_PRIORITIES )
   \   00000006   0529               CMP         R1,#+0x5
   \   00000008   00D3               BCC         ??vTaskPrioritySet_0
    757          		{
    758          			uxNewPriority = configMAX_PRIORITIES - 1;
   \   0000000A   0425               MOV         R5,#+0x4
    759          		}
    760          
    761          		taskENTER_CRITICAL();
   \                     ??vTaskPrioritySet_0:
   \   0000000C   ........           _BLF        vPortEnterCritical,vPortEnterCritical??rT
    762          		{
    763          			/* If null is passed in here then we are changing the
    764          			priority of the calling function. */
    765          			pxTCB = prvGetTCBFromHandle( pxTask );
   \   00000010   002C               CMP         R4,#+0
   \   00000012   01D1               BNE         ??vTaskPrioritySet_1
   \   00000014   ....               LDR         R0,??DataTable24   ;; pxCurrentTCB
   \   00000016   0468               LDR         R4,[R0, #+0]
    766          			uxCurrentPriority = pxTCB->uxPriority;
   \                     ??vTaskPrioritySet_1:
   \   00000018   E068               LDR         R0,[R4, #+0xC]
    767          
    768          			if( uxCurrentPriority != uxNewPriority )
   \   0000001A   A842               CMP         R0,R5
   \   0000001C   20D0               BEQ         ??vTaskPrioritySet_2
    769          			{
    770          				pxTCB

⌨️ 快捷键说明

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