📄 dynamic.s43
字号:
// 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 + -