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

📄 dynamic.s43

📁 MSP430 IAR project with FreeRTOS port.
💻 S43
📖 第 1 页 / 共 3 页
字号:
//  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 );
        MOV.W   &xLimitedIncrementHandle, R12
        CALL    #vTaskResume
//  273 
//  274 		/* Does the counter variable have the expected value? */
//  275 		if( ulCounter != priMAX_COUNT )
        CMP.W   #0xff, &ulCounter
        JNE     ??vCounterControlTask_4
        CMP.W   #0x0, &ulCounter + 2
        JEQ     ??vCounterControlTask_5
//  276 		{
//  277 			sError = pdTRUE;
??vCounterControlTask_4:
        MOV.W   #0x1, R6
//  278 		}
//  279 
//  280 		if( sError == pdFALSE )
??vCounterControlTask_5:
        CMP.W   #0x0, R6
        JNE     ??vCounterControlTask_6
//  281 		{
//  282 			/* If no errors have occurred then increment the check variable. */
//  283 			portENTER_CRITICAL();
        DINT
        NOP
        ADD.W   #0x1, &usCriticalNesting
//  284 				usCheckVariable++;
        ADD.W   #0x1, &usCheckVariable
//  285 			portEXIT_CRITICAL();
        CMP.W   #0x0, &usCriticalNesting
        JEQ     ??vCounterControlTask_6
        ADD.W   #0xffff, &usCriticalNesting
        CMP.W   #0x0, &usCriticalNesting
        JNE     ??vCounterControlTask_6
        EINT
//  286 		}
//  287 
//  288 		/* Resume the continuous count task and do it all again. */
//  289 		vTaskResume( xContinousIncrementHandle );
??vCounterControlTask_6:
        MOV.W   &xContinousIncrementHandle, R12
        CALL    #vTaskResume
        JMP     ??vCounterControlTask_1
        CFI EndBlock cfiBlock3
//  290 	}
//  291 }
//  292 /*-----------------------------------------------------------*/
//  293 

        RSEG CODE:CODE:REORDER:NOROOT(1)
//  294 static portTASK_FUNCTION( vQueueSendWhenSuspendedTask, pvParameters )
vQueueSendWhenSuspendedTask:
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function vQueueSendWhenSuspendedTask
//  295 {
        FUNCALL vQueueSendWhenSuspendedTask, vTaskSuspendAll
        LOCFRAME CSTACK, 4, STACK
        FUNCALL vQueueSendWhenSuspendedTask, xQueueSend
        LOCFRAME CSTACK, 6, STACK
        FUNCALL vQueueSendWhenSuspendedTask, xTaskResumeAll
        LOCFRAME CSTACK, 4, STACK
        FUNCALL vQueueSendWhenSuspendedTask, vTaskDelay
        LOCFRAME CSTACK, 4, STACK
        PUSH.W  R10
        CFI R10 Frame(CFA, -4)
        CFI CFA SP+4
        MOV.W   R12, R10
//  296 static unsigned portLONG ulValueToSend = ( unsigned portLONG ) 0;
//  297 
//  298 	/* Just to stop warning messages. */
//  299 	( void ) pvParameters;
//  300 
//  301 	for( ;; )
//  302 	{
//  303 		vTaskSuspendAll();
??vQueueSendWhenSuspendedTask_0:
        CALL    #vTaskSuspendAll
//  304 		{
//  305 			/* We must not block while the scheduler is suspended! */
//  306 			if( xQueueSend( xSuspendedTestQueue, ( void * ) &ulValueToSend, priNO_BLOCK ) != pdTRUE )
        PUSH.W  #0x0
        CFI CFA SP+6
        MOV.W   #??ulValueToSend, R14
        MOV.W   &xSuspendedTestQueue, R12
        CALL    #xQueueSend
        ADD.W   #0x2, SP
        CFI CFA SP+4
        CMP.W   #0x1, R12
        JEQ     ??vQueueSendWhenSuspendedTask_1
//  307 			{
//  308 				xSuspendedQueueSendError = pdTRUE;
        MOV.W   #0x1, &xSuspendedQueueSendError
//  309 			}
//  310 		}
//  311 		xTaskResumeAll();
??vQueueSendWhenSuspendedTask_1:
        CALL    #xTaskResumeAll
//  312 
//  313 		vTaskDelay( priSLEEP_TIME );
        MOV.W   #0x32, R12
        CALL    #vTaskDelay
//  314 
//  315 		++ulValueToSend;
        ADD.W   #0x1, &??ulValueToSend
        ADDC.W  #0x0, &??ulValueToSend + 2
        JMP     ??vQueueSendWhenSuspendedTask_0
        CFI EndBlock cfiBlock4
//  316 	}
//  317 }

        RSEG DATA16_Z:DATA:SORT:NOROOT(1)
        REQUIRE ?cstart_init_zero
??ulValueToSend:
        DS8 4
//  318 /*-----------------------------------------------------------*/
//  319 

        RSEG CODE:CODE:REORDER:NOROOT(1)
//  320 static portTASK_FUNCTION( vQueueReceiveWhenSuspendedTask, pvParameters )
vQueueReceiveWhenSuspendedTask:
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function vQueueReceiveWhenSuspendedTask
//  321 {
        FUNCALL vQueueReceiveWhenSuspendedTask, vTaskSuspendAll
        LOCFRAME CSTACK, 6, STACK
        FUNCALL vQueueReceiveWhenSuspendedTask, vTaskSuspendAll
        LOCFRAME CSTACK, 6, STACK
        FUNCALL vQueueReceiveWhenSuspendedTask, xQueueReceive
        LOCFRAME CSTACK, 8, STACK
        FUNCALL vQueueReceiveWhenSuspendedTask, xTaskResumeAll
        LOCFRAME CSTACK, 8, STACK
        FUNCALL vQueueReceiveWhenSuspendedTask, xTaskResumeAll
        LOCFRAME CSTACK, 6, 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
        MOV.W   R12, R10
//  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_0:
        CALL    #vTaskSuspendAll
//  338 			{
//  339 				vTaskSuspendAll();
        CALL    #vTaskSuspendAll
//  340 				{
//  341 					xGotValue = xQueueReceive( xSuspendedTestQueue, ( void * ) &ulReceivedValue, priNO_BLOCK );
        PUSH.W  #0x0
        CFI CFA SP+8
        MOV.W   #??ulReceivedValue, R14
        MOV.W   &xSuspendedTestQueue, R12
        CALL    #xQueueReceive
        MOV.W   R12, R11
//  342 				}
//  343 				if( xTaskResumeAll() )
        CALL    #xTaskResumeAll
        ADD.W   #0x2, SP
        CFI CFA SP+6
        CMP.W   #0x0, R12
        JEQ     ??vQueueReceiveWhenSuspendedTask_1
//  344 				{
//  345 					xSuspendedQueueReceiveError = pdTRUE;
        MOV.W   #0x1, &xSuspendedQueueReceiveError
//  346 				}
//  347 			}
//  348 			xTaskResumeAll();
??vQueueReceiveWhenSuspendedTask_1:
        CALL    #xTaskResumeAll
//  349 
//  350 		} while( xGotValue == pdFALSE );
        CMP.W   #0x0, R11
        JEQ     ??vQueueReceiveWhenSuspendedTask_0
//  351 
//  352 		if( ulReceivedValue != ulExpectedValue )
        CMP.W   &??ulExpectedValue, &??ulReceivedValue
        JNE     ??vQueueReceiveWhenSuspendedTask_2
        CMP.W   &??ulExpectedValue + 2, &??ulReceivedValue + 2
        JEQ     ??vQueueReceiveWhenSuspendedTask_3
//  353 		{
//  354 			xSuspendedQueueReceiveError = pdTRUE;
??vQueueReceiveWhenSuspendedTask_2:
        MOV.W   #0x1, &xSuspendedQueueReceiveError
//  355 		}
//  356 
//  357 		++ulExpectedValue;
??vQueueReceiveWhenSuspendedTask_3:
        ADD.W   #0x1, &??ulExpectedValue
        ADDC.W  #0x0, &??ulExpectedValue + 2
        JMP     ??vQueueReceiveWhenSuspendedTask_0
        CFI EndBlock cfiBlock5
//  358 	}
//  359 }

        RSEG DATA16_Z:DATA:SORT:NOROOT(1)
        REQUIRE ?cstart_init_zero
??ulExpectedValue:
        DS8 4

        RSEG DATA16_Z:DATA:SORT:NOROOT(1)
        REQUIRE ?cstart_init_zero
??ulReceivedValue:
        DS8 4
//  360 /*-----------------------------------------------------------*/
//  361 
//  362 /* Called to check that all the created tasks are still running without error. */

        RSEG CODE:CODE:REORDER:NOROOT(1)
//  363 portBASE_TYPE xAreDynamicPriorityTasksStillRunning( void )
xAreDynamicPriorityTasksStillRunning:
        CFI Block cfiBlock6 Using cfiCommon0
        CFI Function xAreDynamicPriorityTasksStillRunning
//  364 {
//  365 /* Keep a history of the check variables so we know if it has been incremented 
//  366 since the last call. */
//  367 static unsigned portSHORT usLastTaskCheck = ( unsigned portSHORT ) 0;
//  368 portBASE_TYPE xReturn = pdTRUE;
        MOV.W   #0x1, R12
//  369 
//  370 	/* Check the tasks are still running by ensuring the check variable
//  371 	is still incrementing. */
//  372 
//  373 	if( usCheckVariable == usLastTaskCheck )
        CMP.W   &??usLastTaskCheck, &usCheckVariable
        JNE     ??xAreDynamicPriorityTasksStillRunning_0
//  374 	{
//  375 		/* The check has not incremented so an error exists. */
//  376 		xReturn = pdFALSE;
        MOV.W   #0x0, R12
//  377 	}
//  378 
//  379 	if( xSuspendedQueueSendError == pdTRUE )
??xAreDynamicPriorityTasksStillRunning_0:
        CMP.W   #0x1, &xSuspendedQueueSendError
        JNE     ??xAreDynamicPriorityTasksStillRunning_1
//  380 	{
//  381 		xReturn = pdFALSE;
        MOV.W   #0x0, R12
//  382 	}
//  383 
//  384 	if( xSuspendedQueueReceiveError == pdTRUE )
??xAreDynamicPriorityTasksStillRunning_1:
        CMP.W   #0x1, &xSuspendedQueueReceiveError
        JNE     ??xAreDynamicPriorityTasksStillRunning_2
//  385 	{
//  386 		xReturn = pdFALSE;
        MOV.W   #0x0, R12
//  387 	}
//  388 
//  389 	usLastTaskCheck = usCheckVariable;
??xAreDynamicPriorityTasksStillRunning_2:
        MOV.W   &usCheckVariable, &??usLastTaskCheck
//  390 	return xReturn;
        RET
        CFI EndBlock cfiBlock6
//  391 }

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

        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

        RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "CNT_INC">`:
        DC8 "CNT_INC"

        RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "LIM_INC">`:
        DC8 "LIM_INC"

        RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "C_CTRL">`:
        DC8 "C_CTRL"

        RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "SUSP_TX">`:
        DC8 "SUSP_TX"

        RSEG DATA16_C:CONST:SORT:NOROOT(0)
`?<Constant "SUSP_RX">`:
        DC8 "SUSP_RX"

        END
// 
// 576 bytes in segment CODE
//  39 bytes in segment DATA16_C
//  30 bytes in segment DATA16_Z
// 
// 576 bytes of CODE  memory
//  39 bytes of CONST memory
//  30 bytes of DATA  memory
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

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