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

📄 dynamic.lst

📁 本代码已经经过修改
💻 LST
📖 第 1 页 / 共 4 页
字号:
    147          {
   \                     vStartDynamicPriorityTasks:
   \   00000000   10B5               PUSH        {R4,LR}
    148          	xSuspendedTestQueue = xQueueCreate( priSUSPENDED_QUEUE_LENGTH, sizeof( unsigned portLONG ) );
   \   00000002   0421               MOV         R1,#+0x4
   \   00000004   0120               MOV         R0,#+0x1
   \   00000006   ........           _BLF        xQueueCreate,xQueueCreate??rT
   \   0000000A   ....               LDR         R1,??DataTable14   ;; xSuspendedTestQueue
   \   0000000C   0860               STR         R0,[R1, #+0]
    149          	xTaskCreate( vContinuousIncrementTask, "CNT_INC", priSTACK_SIZE, ( void * ) &ulCounter, tskIDLE_PRIORITY, &xContinousIncrementHandle );
   \   0000000E   ....               LDR         R4,??DataTable4    ;; ??ulCounter
   \   00000010   ....               LDR         R0,??DataTable9    ;; ??xContinousIncrementHandle
   \   00000012   01B4               PUSH        {R0}
   \   00000014   0020               MOV         R0,#+0
   \   00000016   01B4               PUSH        {R0}
   \   00000018   231C               MOV         R3,R4
   \   0000001A   8022               MOV         R2,#+0x80
   \   0000001C   1649               LDR         R1,??vStartDynamicPriorityTasks_0  ;; `?<Constant "CNT_INC">`
   \   0000001E   1748               LDR         R0,??vStartDynamicPriorityTasks_0+0x4  ;; ??vContinuousIncrementTask
   \   00000020   ........           _BLF        xTaskCreate,xTaskCreate??rT
    150          	xTaskCreate( vLimitedIncrementTask, "LIM_INC", priSTACK_SIZE, ( void * ) &ulCounter, tskIDLE_PRIORITY + 1, &xLimitedIncrementHandle );
   \   00000024   ....               LDR         R0,??DataTable10   ;; ??xLimitedIncrementHandle
   \   00000026   01B4               PUSH        {R0}
   \   00000028   0120               MOV         R0,#+0x1
   \   0000002A   01B4               PUSH        {R0}
   \   0000002C   231C               MOV         R3,R4
   \   0000002E   8022               MOV         R2,#+0x80
   \   00000030   1349               LDR         R1,??vStartDynamicPriorityTasks_0+0x8  ;; `?<Constant "LIM_INC">`
   \   00000032   1448               LDR         R0,??vStartDynamicPriorityTasks_0+0xC  ;; ??vLimitedIncrementTask
   \   00000034   ........           _BLF        xTaskCreate,xTaskCreate??rT
    151          	xTaskCreate( vCounterControlTask, "C_CTRL", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
   \   00000038   0020               MOV         R0,#+0
   \   0000003A   01B4               PUSH        {R0}
   \   0000003C   01B4               PUSH        {R0}
   \   0000003E   0023               MOV         R3,#+0
   \   00000040   8022               MOV         R2,#+0x80
   \   00000042   1149               LDR         R1,??vStartDynamicPriorityTasks_0+0x10  ;; `?<Constant "C_CTRL">`
   \   00000044   1148               LDR         R0,??vStartDynamicPriorityTasks_0+0x14  ;; ??vCounterControlTask
   \   00000046   ........           _BLF        xTaskCreate,xTaskCreate??rT
    152          	xTaskCreate( vQueueSendWhenSuspendedTask, "SUSP_TX", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
   \   0000004A   0020               MOV         R0,#+0
   \   0000004C   01B4               PUSH        {R0}
   \   0000004E   01B4               PUSH        {R0}
   \   00000050   031C               MOV         R3,R0
   \   00000052   8022               MOV         R2,#+0x80
   \   00000054   0E49               LDR         R1,??vStartDynamicPriorityTasks_0+0x18  ;; `?<Constant "SUSP_TX">`
   \   00000056   0F48               LDR         R0,??vStartDynamicPriorityTasks_0+0x1C  ;; ??vQueueSendWhenSuspendedTask
   \   00000058   ........           _BLF        xTaskCreate,xTaskCreate??rT
    153          	xTaskCreate( vQueueReceiveWhenSuspendedTask, "SUSP_RX", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
   \   0000005C   0020               MOV         R0,#+0
   \   0000005E   01B4               PUSH        {R0}
   \   00000060   01B4               PUSH        {R0}
   \   00000062   031C               MOV         R3,R0
   \   00000064   8022               MOV         R2,#+0x80
   \   00000066   0C49               LDR         R1,??vStartDynamicPriorityTasks_0+0x20  ;; `?<Constant "SUSP_RX">`
   \   00000068   0C48               LDR         R0,??vStartDynamicPriorityTasks_0+0x24  ;; ??vQueueReceiveWhenSuspendedTask
   \   0000006A   ........           _BLF        xTaskCreate,xTaskCreate??rT
   \   0000006E   0AB0               ADD         SP,#+0x28
    154          }
   \   00000070   10BC               POP         {R4}
   \   00000072   01BC               POP         {R0}
   \   00000074   0047               BX          R0                 ;; return
   \   00000076   C046               NOP         
   \                     ??vStartDynamicPriorityTasks_0:
   \   00000078   ........           DC32        `?<Constant "CNT_INC">`
   \   0000007C   ........           DC32        ??vContinuousIncrementTask
   \   00000080   ........           DC32        `?<Constant "LIM_INC">`
   \   00000084   ........           DC32        ??vLimitedIncrementTask
   \   00000088   ........           DC32        `?<Constant "C_CTRL">`
   \   0000008C   ........           DC32        ??vCounterControlTask
   \   00000090   ........           DC32        `?<Constant "SUSP_TX">`
   \   00000094   ........           DC32        ??vQueueSendWhenSuspendedTask
   \   00000098   ........           DC32        `?<Constant "SUSP_RX">`
   \   0000009C   ........           DC32        ??vQueueReceiveWhenSuspendedTask
    155          /*-----------------------------------------------------------*/
    156          
    157          /*
    158           * Just loops around incrementing the shared variable until the limit has been
    159           * reached.  Once the limit has been reached it suspends itself. 
    160           */

   \                                 In segment CODE, align 4, keep-with-next
    161          static portTASK_FUNCTION( vLimitedIncrementTask, pvParameters )
    162          {
   \                     ??vLimitedIncrementTask:
   \   00000000   10B5               PUSH        {R4,LR}
   \   00000002   041C               MOV         R4,R0
    163          unsigned portLONG *pulCounter;
    164          
    165          	/* Take a pointer to the shared variable from the parameters passed into
    166          	the task. */
    167          	pulCounter = ( unsigned portLONG * ) pvParameters;
    168          
    169          	/* This will run before the control task, so the first thing it does is
    170          	suspend - the control task will resume it when ready. */
    171          	vTaskSuspend( NULL );
   \                     ??vLimitedIncrementTask_1:
   \   00000004   0020               MOV         R0,#+0
   \   00000006   ........           _BLF        vTaskSuspend,vTaskSuspend??rT
    172          
    173          	for( ;; )
    174          	{
    175          		/* Just count up to a value then suspend. */
    176          		( *pulCounter )++;	
   \                     ??vLimitedIncrementTask_2:
   \   0000000A   2068               LDR         R0,[R4, #+0]
   \   0000000C   401C               ADD         R0,R0,#+0x1
   \   0000000E   2060               STR         R0,[R4, #+0]
    177          		
    178          		if( *pulCounter >= priMAX_COUNT )
   \   00000010   FF28               CMP         R0,#+0xFF
   \   00000012   FAD3               BCC         ??vLimitedIncrementTask_2
    179          		{
    180          			vTaskSuspend( NULL );
   \   00000014   F6E7               B           ??vLimitedIncrementTask_1
    181          		} 	
    182          	}
    183          }
    184          /*-----------------------------------------------------------*/
    185          
    186          /*
    187           * Just keep counting the shared variable up.  The control task will suspend
    188           * this task when it wants.
    189           */

   \                                 In segment CODE, align 4, keep-with-next
    190          static portTASK_FUNCTION( vContinuousIncrementTask, pvParameters )
    191          {
   \                     ??vContinuousIncrementTask:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   041C               MOV         R4,R0
    192          unsigned portLONG *pulCounter;
    193          unsigned portBASE_TYPE uxOurPriority;
    194          
    195          	/* Take a pointer to the shared variable from the parameters passed into
    196          	the task. */
    197          	pulCounter = ( unsigned portLONG * ) pvParameters;
    198          
    199          	/* Query our priority so we can raise it when exclusive access to the 
    200          	shared variable is required. */
    201          	uxOurPriority = uxTaskPriorityGet( NULL );
   \   00000004   0020               MOV         R0,#+0
   \   00000006   ........           _BLF        uxTaskPriorityGet,uxTaskPriorityGet??rT
   \   0000000A   051C               MOV         R5,R0
    202          
    203          	for( ;; )
    204          	{
    205          		/* Raise our priority above the controller task to ensure a context
    206          		switch does not occur while we are accessing this variable. */
    207          		vTaskPrioritySet( NULL, uxOurPriority + 1 );
   \                     ??vContinuousIncrementTask_1:
   \   0000000C   691C               ADD         R1,R5,#+0x1
   \   0000000E   0020               MOV         R0,#+0
   \   00000010   ........           _BLF        vTaskPrioritySet,vTaskPrioritySet??rT
    208          			( *pulCounter )++;		
   \   00000014   2068               LDR         R0,[R4, #+0]
   \   00000016   401C               ADD         R0,R0,#+0x1
   \   00000018   2060               STR         R0,[R4, #+0]
    209          		vTaskPrioritySet( NULL, uxOurPriority );
   \   0000001A   291C               MOV         R1,R5
   \   0000001C   0020               MOV         R0,#+0
   \   0000001E   ........           _BLF        vTaskPrioritySet,vTaskPrioritySet??rT
   \   00000022   F3E7               B           ??vContinuousIncrementTask_1
    210          	}
    211          }
    212          /*-----------------------------------------------------------*/
    213          
    214          /*
    215           * Controller task as described above.
    216           */

   \                                 In segment CODE, align 4, keep-with-next
    217          static portTASK_FUNCTION( vCounterControlTask, pvParameters )
    218          {
   \                     ??vCounterControlTask:
   \   00000000   F0B5               PUSH        {R4-R7,LR}
   \   00000002   81B0               SUB         SP,#+0x4
    219          unsigned portLONG ulLastCounter;
    220          portSHORT sLoops;
    221          portSHORT sError = pdFALSE;
   \   00000004   6846               MOV         R0,SP
   \   00000006   0021               MOV         R1,#+0
   \   00000008   0180               STRH        R1,[R0, #+0]
   \   0000000A   ....               LDR         R4,??DataTable4    ;; ??ulCounter
   \   0000000C   0127               MOV         R7,#+0x1
   \   0000000E   10E0               B           ??vCounterControlTask_1
    222          
    223          	/* Just to stop warning messages. */
    224          	( void ) pvParameters;
    225          
    226          	for( ;; )
    227          	{
    228          		/* Start with the counter at zero. */
    229          		ulCounter = ( unsigned portLONG ) 0;
    230          
    231          		/* First section : */
    232          
    233          		/* Check the continuous count task is running. */
    234          		for( sLoops = 0; sLoops < priLOOPS; sLoops++ )
    235          		{
    236          			/* Suspend the continuous count task so we can take a mirror of the
    237          			shared variable without risk of corruption. */
    238          			vTaskSuspend( xContinousIncrementHandle );
    239          				ulLastCounter = ulCounter;
    240          			vTaskResume( xContinousIncrementHandle );
    241          			
    242          			/* Now delay to ensure the other task has processor time. */
    243          			vTaskDelay( priSLEEP_TIME );
    244          
    245          			/* Check the shared variable again.  This time to ensure mutual 
    246          			exclusion the whole scheduler will be locked.  This is just for
    247          			demo purposes! */
    248          			vTaskSuspendAll();
    249          			{

⌨️ 快捷键说明

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