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

📄 death.s43

📁 MSP430 IAR project with FreeRTOS port.
💻 S43
📖 第 1 页 / 共 2 页
字号:
//  126 /*-----------------------------------------------------------*/
//  127 					

        RSEG CODE:CODE:REORDER:NOROOT(1)
//  128 static portTASK_FUNCTION( vSuicidalTask, pvParameters )
vSuicidalTask:
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function vSuicidalTask
//  129 {
        FUNCALL vSuicidalTask, vTaskDelay
        LOCFRAME CSTACK, 16, STACK
        FUNCALL vSuicidalTask, vTaskDelay
        LOCFRAME CSTACK, 16, STACK
        FUNCALL vSuicidalTask, vTaskDelete
        LOCFRAME CSTACK, 16, STACK
        FUNCALL vSuicidalTask, vTaskDelete
        LOCFRAME CSTACK, 16, STACK
        PUSH.W  R10
        CFI R10 Frame(CFA, -4)
        CFI CFA SP+4
        PUSH.W  R11
        CFI R11 Frame(CFA, -6)
        CFI CFA SP+6
        PUSH.W  R8
        CFI R8 Frame(CFA, -8)
        CFI CFA SP+8
        SUB.W   #0x8, SP
        CFI CFA SP+16
        MOV.W   R12, R10
//  130 volatile portLONG l1, l2;
//  131 xTaskHandle xTaskToKill;
//  132 const portTickType xDelay = ( portTickType ) 200 / portTICK_RATE_MS;
        MOV.W   #0xc8, R8
//  133 
//  134 	if( pvParameters != NULL )
        CMP.W   #0x0, R10
        JEQ     ??vSuicidalTask_1
//  135 	{
//  136 		/* This task is periodically created four times.  Two created tasks are
//  137 		passed a handle to the other task so it can kill it before killing itself.
//  138 		The other task is passed in null. */
//  139 		xTaskToKill = *( xTaskHandle* )pvParameters;
        MOV.W   @R10, R11
        JMP     ??vSuicidalTask_0
//  140 	}
//  141 	else
//  142 	{
//  143 		xTaskToKill = NULL;
??vSuicidalTask_1:
        MOV.W   #0x0, R11
//  144 	}
//  145 
//  146 	for( ;; )
//  147 	{
//  148 		/* Do something random just to use some stack and registers. */
//  149 		l1 = 2;
??vSuicidalTask_0:
        MOV.W   #0x2, 0x4(SP)
        MOV.W   #0x0, 0x6(SP)
//  150 		l2 = 89;
        MOV.W   #0x59, 0x0(SP)
        MOV.W   #0x0, 0x2(SP)
//  151 		l2 *= l1;
        MOV.W   0x0(SP), R12
        MOV.W   0x2(SP), R13
        MOV.W   0x4(SP), R14
        MOV.W   0x6(SP), R15
        CALL    #?Mul32
        MOV.W   R12, 0x0(SP)
        MOV.W   R13, 0x2(SP)
//  152 		vTaskDelay( xDelay );
        MOV.W   R8, R12
        CALL    #vTaskDelay
//  153 
//  154 		if( xTaskToKill != NULL )
        CMP.W   #0x0, R11
        JEQ     ??vSuicidalTask_0
//  155 		{
//  156 			/* Make sure the other task has a go before we delete it. */
//  157 			vTaskDelay( ( portTickType ) 0 );
        MOV.W   #0x0, R12
        CALL    #vTaskDelay
//  158 			/* Kill the other task that was created by vCreateTasks(). */
//  159 			vTaskDelete( xTaskToKill );
        MOV.W   R11, R12
        CALL    #vTaskDelete
//  160 			/* Kill ourselves. */
//  161 			vTaskDelete( NULL );
        MOV.W   #0x0, R12
        CALL    #vTaskDelete
        JMP     ??vSuicidalTask_0
        CFI EndBlock cfiBlock1
//  162 		}
//  163 	}
//  164 }/*lint !e818 !e550 Function prototype must be as per standard for task functions. */
//  165 /*-----------------------------------------------------------*/
//  166 

        RSEG CODE:CODE:REORDER:NOROOT(1)
//  167 static portTASK_FUNCTION( vCreateTasks, pvParameters )
vCreateTasks:
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function vCreateTasks
//  168 {
        FUNCALL vCreateTasks, vPortFree
        LOCFRAME CSTACK, 8, STACK
        FUNCALL vCreateTasks, vTaskDelay
        LOCFRAME CSTACK, 8, STACK
        FUNCALL vCreateTasks, xTaskCreate
        LOCFRAME CSTACK, 16, STACK
        FUNCALL vCreateTasks, xTaskCreate
        LOCFRAME CSTACK, 24, STACK
        FUNCALL vCreateTasks, xTaskCreate
        LOCFRAME CSTACK, 32, STACK
        FUNCALL vCreateTasks, xTaskCreate
        LOCFRAME CSTACK, 40, STACK
        PUSH.W  R10
        CFI R10 Frame(CFA, -4)
        CFI CFA SP+4
        PUSH.W  R11
        CFI R11 Frame(CFA, -6)
        CFI CFA SP+6
        PUSH.W  R8
        CFI R8 Frame(CFA, -8)
        CFI CFA SP+8
        MOV.W   R12, R10
//  169 const portTickType xDelay = ( portTickType ) 1000 / portTICK_RATE_MS;
        MOV.W   #0x3e8, R11
//  170 unsigned portBASE_TYPE uxPriority;
//  171 
//  172 	uxPriority = *( unsigned portBASE_TYPE * ) pvParameters;
        MOV.W   @R10, R8
//  173 	vPortFree( pvParameters );
        MOV.W   R10, R12
        CALL    #vPortFree
//  174 
//  175 	for( ;; )
//  176 	{
//  177 		/* Just loop round, delaying then creating the four suicidal tasks. */
//  178 		vTaskDelay( xDelay );
??vCreateTasks_0:
        MOV.W   R11, R12
        CALL    #vTaskDelay
//  179 
//  180 		xTaskCreate( vSuicidalTask, "SUICID1", deathSTACK_SIZE, NULL, uxPriority, &xCreatedTask1 );
        PUSH.W  #xCreatedTask1
        CFI CFA SP+10
        PUSH.W  R8
        CFI CFA SP+12
        PUSH.W  #0x0
        CFI CFA SP+14
        PUSH.W  #0x58
        CFI CFA SP+16
        MOV.W   #`?<Constant "SUICID1">`, R14
        MOV.W   #vSuicidalTask, R12
        CALL    #xTaskCreate
//  181 		xTaskCreate( vSuicidalTask, "SUICID2", deathSTACK_SIZE, &xCreatedTask1, uxPriority, NULL );
        PUSH.W  #0x0
        CFI CFA SP+18
        PUSH.W  R8
        CFI CFA SP+20
        PUSH.W  #xCreatedTask1
        CFI CFA SP+22
        PUSH.W  #0x58
        CFI CFA SP+24
        MOV.W   #`?<Constant "SUICID2">`, R14
        MOV.W   #vSuicidalTask, R12
        CALL    #xTaskCreate
//  182 
//  183 		xTaskCreate( vSuicidalTask, "SUICID1", deathSTACK_SIZE, NULL, uxPriority, &xCreatedTask2 );
        PUSH.W  #xCreatedTask2
        CFI CFA SP+26
        PUSH.W  R8
        CFI CFA SP+28
        PUSH.W  #0x0
        CFI CFA SP+30
        PUSH.W  #0x58
        CFI CFA SP+32
        MOV.W   #`?<Constant "SUICID1">`, R14
        MOV.W   #vSuicidalTask, R12
        CALL    #xTaskCreate
//  184 		xTaskCreate( vSuicidalTask, "SUICID2", deathSTACK_SIZE, &xCreatedTask2, uxPriority, NULL );
        PUSH.W  #0x0
        CFI CFA SP+34
        PUSH.W  R8
        CFI CFA SP+36
        PUSH.W  #xCreatedTask2
        CFI CFA SP+38
        PUSH.W  #0x58
        CFI CFA SP+40
        MOV.W   #`?<Constant "SUICID2">`, R14
        MOV.W   #vSuicidalTask, R12
        CALL    #xTaskCreate
//  185 
//  186 		++usCreationCount;
        ADD.W   #0x1, &usCreationCount
        ADD.W   #0x20, SP
        CFI CFA SP+8
        JMP     ??vCreateTasks_0
        CFI EndBlock cfiBlock2
//  187 	}
//  188 }
//  189 /*-----------------------------------------------------------*/
//  190 
//  191 /* This is called to check that the creator task is still running and that there
//  192 are not any more than four extra tasks. */

        RSEG CODE:CODE:REORDER:NOROOT(1)
//  193 portBASE_TYPE xIsCreateTaskStillRunning( void )
xIsCreateTaskStillRunning:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function xIsCreateTaskStillRunning
//  194 {
        FUNCALL xIsCreateTaskStillRunning, uxTaskGetNumberOfTasks
        LOCFRAME CSTACK, 4, STACK
        PUSH.W  R10
        CFI R10 Frame(CFA, -4)
        CFI CFA SP+4
//  195 static portSHORT usLastCreationCount = -1;
//  196 portBASE_TYPE xReturn = pdTRUE;
        MOV.W   #0x1, R10
//  197 static unsigned portBASE_TYPE uxTasksRunningNow;
//  198 
//  199 	if( usLastCreationCount == usCreationCount )
        CMP.W   &usCreationCount, &??usLastCreationCount
        JNE     ??xIsCreateTaskStillRunning_0
//  200 	{
//  201 		xReturn = pdFALSE;
        MOV.W   #0x0, R10
        JMP     ??xIsCreateTaskStillRunning_1
//  202 	}
//  203 	else
//  204 	{
//  205 		usLastCreationCount = usCreationCount;
??xIsCreateTaskStillRunning_0:
        MOV.W   &usCreationCount, &??usLastCreationCount
//  206 	}
//  207 	
//  208 	uxTasksRunningNow = ( unsigned portBASE_TYPE ) uxTaskGetNumberOfTasks();
??xIsCreateTaskStillRunning_1:
        CALL    #uxTaskGetNumberOfTasks
        MOV.W   R12, &??uxTasksRunningNow
//  209 
//  210 	if( uxTasksRunningNow < uxTasksRunningAtStart )
        CMP.W   &uxTasksRunningAtStart, &??uxTasksRunningNow
        JC      ??xIsCreateTaskStillRunning_2
//  211 	{
//  212 		xReturn = pdFALSE;
        MOV.W   #0x0, R10
        JMP     ??xIsCreateTaskStillRunning_3
//  213 	}
//  214 	else if( ( uxTasksRunningNow - uxTasksRunningAtStart ) > uxMaxNumberOfExtraTasksRunning )
??xIsCreateTaskStillRunning_2:
        MOV.W   &??uxTasksRunningNow, R15
        SUB.W   &uxTasksRunningAtStart, R15
        CMP.W   R15, &uxMaxNumberOfExtraTasksRunning
        JC      ??xIsCreateTaskStillRunning_3
//  215 	{
//  216 		xReturn = pdFALSE;
        MOV.W   #0x0, R10
//  217 	}
//  218 	else
//  219 	{
//  220 		/* Everything is okay. */
//  221 	}
//  222 
//  223 	return xReturn;
??xIsCreateTaskStillRunning_3:
        MOV.W   R10, R12
        POP.W   R10
        CFI R10 SameValue
        CFI CFA SP+2
        RET
        CFI EndBlock cfiBlock3
//  224 }

        RSEG DATA16_I:DATA:SORT:NOROOT(1)
        REQUIRE ?cstart_init_copy
??usLastCreationCount:
        DS8 2
        REQUIRE `?<Initializer for usLastCreationCount>`

        RSEG DATA16_Z:DATA:SORT:NOROOT(1)
        REQUIRE ?cstart_init_zero
??uxTasksRunningNow:
        DS8 2

        RSEG DATA16_ID:CONST:SORT:NOROOT(1)
`?<Initializer for usLastCreationCount>`:
        DC16 -1

        RSEG CODE:CODE:REORDER:NOROOT(1)
?setjmp_save_r4:
        REQUIRE ?setjmp_r4
        REQUIRE ?longjmp_r4

        RSEG CODE:CODE:REORDER:NOROOT(1)
?setjmp_save_r5:
        REQUIRE ?setjmp_r5
        REQUIRE ?longjmp_r5

        END
//  225 
//  226 
// 
// 354 bytes in segment CODE
//  26 bytes in segment DATA16_C
//   2 bytes in segment DATA16_I
//   2 bytes in segment DATA16_ID
//  10 bytes in segment DATA16_Z
// 
// 354 bytes of CODE  memory
//  28 bytes of CONST memory
//  12 bytes of DATA  memory
//
//Errors: none
//Warnings: 1

⌨️ 快捷键说明

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