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

📄 dynamic.lst

📁 本代码已经经过修改
💻 LST
📖 第 1 页 / 共 4 页
字号:
    250          				if( ulLastCounter == ulCounter )
    251          				{
    252          					/* The shared variable has not changed.  There is a problem
    253          					with the continuous count task so flag an error. */
    254          					sError = pdTRUE;
    255          				}
    256          			}
    257          			xTaskResumeAll();
    258          		}
    259          
    260          
    261          		/* Second section: */
    262          
    263          		/* Suspend the continuous counter task so it stops accessing the shared variable. */
    264          		vTaskSuspend( xContinousIncrementHandle );
    265          
    266          		/* Reset the variable. */
    267          		ulCounter = ( unsigned portLONG ) 0;
    268          
    269          		/* Resume the limited count task which has a higher priority than us.
    270          		We should therefore not return from this call until the limited count
    271          		task has suspended itself with a known value in the counter variable. */
    272          		vTaskResume( xLimitedIncrementHandle );
    273          
    274          		/* Does the counter variable have the expected value? */
    275          		if( ulCounter != priMAX_COUNT )
    276          		{
    277          			sError = pdTRUE;
    278          		}
    279          
    280          		if( sError == pdFALSE )
   \                     ??vCounterControlTask_2:
   \   00000010   6946               MOV         R1,SP
   \   00000012   0020               MOV         R0,#+0
   \   00000014   085E               LDRSH       R0,[R1, R0]
   \   00000016   0028               CMP         R0,#+0
   \   00000018   07D1               BNE         ??vCounterControlTask_3
    281          		{
    282          			/* If no errors have occurred then increment the check variable. */
    283          			portENTER_CRITICAL();
   \   0000001A   ........           _BLF        vPortEnterCritical,vPortEnterCritical??rT
    284          				usCheckVariable++;
   \   0000001E   ....               LDR         R0,??DataTable15   ;; ??usCheckVariable
   \   00000020   0188               LDRH        R1,[R0, #+0]
   \   00000022   491C               ADD         R1,R1,#+0x1
   \   00000024   0180               STRH        R1,[R0, #+0]
    285          			portEXIT_CRITICAL();
   \   00000026   ........           _BLF        vPortExitCritical,vPortExitCritical??rT
    286          		}
    287          
    288          		/* Resume the continuous count task and do it all again. */
    289          		vTaskResume( xContinousIncrementHandle );
   \                     ??vCounterControlTask_3:
   \   0000002A   ....               LDR         R0,??DataTable9    ;; ??xContinousIncrementHandle
   \   0000002C   0068               LDR         R0,[R0, #+0]
   \   0000002E   ........           _BLF        vTaskResume,vTaskResume??rT
   \                     ??vCounterControlTask_1:
   \   00000032   0020               MOV         R0,#+0
   \   00000034   2060               STR         R0,[R4, #+0]
   \   00000036   0525               MOV         R5,#+0x5
   \                     ??vCounterControlTask_4:
   \   00000038   ....               LDR         R0,??DataTable9    ;; ??xContinousIncrementHandle
   \   0000003A   0068               LDR         R0,[R0, #+0]
   \   0000003C   ........           _BLF        vTaskSuspend,vTaskSuspend??rT
   \   00000040   2668               LDR         R6,[R4, #+0]
   \   00000042   ....               LDR         R0,??DataTable9    ;; ??xContinousIncrementHandle
   \   00000044   0068               LDR         R0,[R0, #+0]
   \   00000046   ........           _BLF        vTaskResume,vTaskResume??rT
   \   0000004A   3220               MOV         R0,#+0x32
   \   0000004C   ........           _BLF        vTaskDelay,vTaskDelay??rT
   \   00000050   ........           _BLF        vTaskSuspendAll,vTaskSuspendAll??rT
   \   00000054   2068               LDR         R0,[R4, #+0]
   \   00000056   8642               CMP         R6,R0
   \   00000058   01D1               BNE         ??vCounterControlTask_5
   \   0000005A   6846               MOV         R0,SP
   \   0000005C   0780               STRH        R7,[R0, #+0]
   \                     ??vCounterControlTask_5:
   \   0000005E   ........           _BLF        xTaskResumeAll,xTaskResumeAll??rT
   \   00000062   6D1E               SUB         R5,R5,#+0x1
   \   00000064   E8D1               BNE         ??vCounterControlTask_4
   \   00000066   ....               LDR         R0,??DataTable9    ;; ??xContinousIncrementHandle
   \   00000068   0068               LDR         R0,[R0, #+0]
   \   0000006A   ........           _BLF        vTaskSuspend,vTaskSuspend??rT
   \   0000006E   0020               MOV         R0,#+0
   \   00000070   2060               STR         R0,[R4, #+0]
   \   00000072   ....               LDR         R0,??DataTable10   ;; ??xLimitedIncrementHandle
   \   00000074   0068               LDR         R0,[R0, #+0]
   \   00000076   ........           _BLF        vTaskResume,vTaskResume??rT
   \   0000007A   2068               LDR         R0,[R4, #+0]
   \   0000007C   FF28               CMP         R0,#+0xFF
   \   0000007E   C7D0               BEQ         ??vCounterControlTask_2
   \   00000080   6846               MOV         R0,SP
   \   00000082   0780               STRH        R7,[R0, #+0]
   \   00000084   D1E7               B           ??vCounterControlTask_3
    290          	}
    291          }
    292          /*-----------------------------------------------------------*/
    293          

   \                                 In segment CODE, align 4, keep-with-next
    294          static portTASK_FUNCTION( vQueueSendWhenSuspendedTask, pvParameters )
    295          {
   \                     ??vQueueSendWhenSuspendedTask:
   \   00000000   30B5               PUSH        {R4,R5,LR}
    296          static unsigned portLONG ulValueToSend = ( unsigned portLONG ) 0;
    297          
    298          	/* Just to stop warning messages. */
    299          	( void ) pvParameters;
   \   00000002   ....               LDR         R4,??DataTable14   ;; xSuspendedTestQueue
   \   00000004   0A4D               LDR         R5,??vQueueSendWhenSuspendedTask_1  ;; ??ulValueToSend
    300          
    301          	for( ;; )
    302          	{
    303          		vTaskSuspendAll();
   \                     ??vQueueSendWhenSuspendedTask_2:
   \   00000006   ........           _BLF        vTaskSuspendAll,vTaskSuspendAll??rT
    304          		{
    305          			/* We must not block while the scheduler is suspended! */
    306          			if( xQueueSend( xSuspendedTestQueue, ( void * ) &ulValueToSend, priNO_BLOCK ) != pdTRUE )
   \   0000000A   0022               MOV         R2,#+0
   \   0000000C   291C               MOV         R1,R5
   \   0000000E   2068               LDR         R0,[R4, #+0]
   \   00000010   ........           _BLF        xQueueSend,xQueueSend??rT
   \   00000014   0128               CMP         R0,#+0x1
   \   00000016   02D0               BEQ         ??vQueueSendWhenSuspendedTask_3
    307          			{
    308          				xSuspendedQueueSendError = pdTRUE;
   \   00000018   ....               LDR         R0,??DataTable16   ;; ??xSuspendedQueueSendError
   \   0000001A   0121               MOV         R1,#+0x1
   \   0000001C   0160               STR         R1,[R0, #+0]
    309          			}
    310          		}
    311          		xTaskResumeAll();
   \                     ??vQueueSendWhenSuspendedTask_3:
   \   0000001E   ........           _BLF        xTaskResumeAll,xTaskResumeAll??rT
    312          
    313          		vTaskDelay( priSLEEP_TIME );
   \   00000022   3220               MOV         R0,#+0x32
   \   00000024   ........           _BLF        vTaskDelay,vTaskDelay??rT
    314          
    315          		++ulValueToSend;
   \   00000028   2868               LDR         R0,[R5, #+0]
   \   0000002A   401C               ADD         R0,R0,#+0x1
   \   0000002C   2860               STR         R0,[R5, #+0]
   \   0000002E   EAE7               B           ??vQueueSendWhenSuspendedTask_2
   \                     ??vQueueSendWhenSuspendedTask_1:
   \   00000030   ........           DC32        ??ulValueToSend
    316          	}
    317          }

   \                                 In segment DATA_Z, align 4, align-sorted
   \                     ??ulValueToSend:
   \   00000000                      DS8 4
    318          /*-----------------------------------------------------------*/
    319          

   \                                 In segment CODE, align 4, keep-with-next
    320          static portTASK_FUNCTION( vQueueReceiveWhenSuspendedTask, pvParameters )
    321          {
   \                     ??vQueueReceiveWhenSuspendedTask:
   \   00000000   F0B5               PUSH        {R4-R7,LR}
   \   00000002   104C               LDR         R4,??vQueueReceiveWhenSuspendedTask_1  ;; ??ulReceivedValue
   \   00000004   ....               LDR         R5,??DataTable17   ;; ??xSuspendedQueueReceiveError
   \   00000006   0126               MOV         R6,#+0x1
    322          static unsigned portLONG ulExpectedValue = ( unsigned portLONG ) 0, ulReceivedValue;
    323          portBASE_TYPE xGotValue;
    324          
    325          	/* Just to stop warning messages. */
    326          	( void ) pvParameters;
    327          
    328          	for( ;; )
    329          	{
    330          		do
    331          		{
    332          			/* Suspending the scheduler here is fairly pointless and 
    333          			undesirable for a normal application.  It is done here purely
    334          			to test the scheduler.  The inner xTaskResumeAll() should
    335          			never return pdTRUE as the scheduler is still locked by the
    336          			outer call. */
    337          			vTaskSuspendAll();
   \                     ??vQueueReceiveWhenSuspendedTask_2:
   \   00000008   ........           _BLF        vTaskSuspendAll,vTaskSuspendAll??rT
    338          			{
    339          				vTaskSuspendAll();
   \   0000000C   ........           _BLF        vTaskSuspendAll,vTaskSuspendAll??rT
    340          				{
    341          					xGotValue = xQueueReceive( xSuspendedTestQueue, ( void * ) &ulReceivedValue, priNO_BLOCK );
   \   00000010   0022               MOV         R2,#+0
   \   00000012   211C               MOV         R1,R4
   \   00000014   ....               LDR         R0,??DataTable14   ;; xSuspendedTestQueue
   \   00000016   0068               LDR         R0,[R0, #+0]
   \   00000018   ........           _BLF        xQueueReceive,xQueueReceive??rT
   \   0000001C   071C               MOV         R7,R0
    342          				}
    343          				if( xTaskResumeAll() )
   \   0000001E   ........           _BLF        xTaskResumeAll,xTaskResumeAll??rT
   \   00000022   0028               CMP         R0,#+0
   \   00000024   00D0               BEQ         ??vQueueReceiveWhenSuspendedTask_3
    344          				{
    345          					xSuspendedQueueReceiveError = pdTRUE;
   \   00000026   2E60               STR         R6,[R5, #+0]
    346          				}
    347          			}
    348          			xTaskResumeAll();
   \                     ??vQueueReceiveWhenSuspendedTask_3:
   \   00000028   ........           _BLF        xTaskResumeAll,xTaskResumeAll??rT
    349          
    350          		} while( xGotValue == pdFALSE );
   \   0000002C   002F               CMP         R7,#+0
   \   0000002E   EBD0               BEQ         ??vQueueReceiveWhenSuspendedTask_2
    351          
    352          		if( ulReceivedValue != ulExpectedValue )
   \   00000030   0548               LDR         R0,??vQueueReceiveWhenSuspendedTask_1+0x4  ;; ??ulExpectedValue
   \   00000032   0168               LDR         R1,[R0, #+0]

⌨️ 快捷键说明

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