📄 os_tmr.lst
字号:
404 remain = ptmr->OSTmrPeriod;
\ 00000062 E069 LDR R0,[R4, #+28]
\ 00000064 0600 MOVS R6,R0
\ 00000066 01E0 B.N ??OSTmrRemainGet_10
405 } else {
406 remain = ptmr->OSTmrDly;
\ ??OSTmrRemainGet_9:
\ 00000068 A069 LDR R0,[R4, #+24]
\ 0000006A 0600 MOVS R6,R0
407 }
408 OSSchedUnlock();
\ ??OSTmrRemainGet_10:
\ 0000006C ........ BL OSSchedUnlock
409 *perr = OS_ERR_NONE;
\ 00000070 0020 MOVS R0,#+0
\ 00000072 2870 STRB R0,[R5, #+0]
410 break;
\ 00000074 05E0 B.N ??OSTmrRemainGet_11
411
412 case OS_TMR_OPT_ONE_SHOT:
413 default:
414 remain = ptmr->OSTmrDly;
\ ??OSTmrRemainGet_8:
\ 00000076 A069 LDR R0,[R4, #+24]
\ 00000078 0600 MOVS R6,R0
415 OSSchedUnlock();
\ 0000007A ........ BL OSSchedUnlock
416 *perr = OS_ERR_NONE;
\ 0000007E 0020 MOVS R0,#+0
\ 00000080 2870 STRB R0,[R5, #+0]
417 break;
418 }
419 return (remain);
\ ??OSTmrRemainGet_11:
\ 00000082 3000 MOVS R0,R6
\ 00000084 10E0 B.N ??OSTmrRemainGet_1
420
421 case OS_TMR_STATE_COMPLETED: /* Only ONE-SHOT that timed out can be in this state */
422 OSSchedUnlock();
\ ??OSTmrRemainGet_4:
\ 00000086 ........ BL OSSchedUnlock
423 *perr = OS_ERR_NONE;
\ 0000008A 0020 MOVS R0,#+0
\ 0000008C 2870 STRB R0,[R5, #+0]
424 return (0u);
\ 0000008E 0020 MOVS R0,#+0
\ 00000090 0AE0 B.N ??OSTmrRemainGet_1
425
426 case OS_TMR_STATE_UNUSED:
427 OSSchedUnlock();
\ ??OSTmrRemainGet_3:
\ 00000092 ........ BL OSSchedUnlock
428 *perr = OS_ERR_TMR_INACTIVE;
\ 00000096 8720 MOVS R0,#+135
\ 00000098 2870 STRB R0,[R5, #+0]
429 return (0u);
\ 0000009A 0020 MOVS R0,#+0
\ 0000009C 04E0 B.N ??OSTmrRemainGet_1
430
431 default:
432 OSSchedUnlock();
\ ??OSTmrRemainGet_6:
\ 0000009E ........ BL OSSchedUnlock
433 *perr = OS_ERR_TMR_INVALID_STATE;
\ 000000A2 8D20 MOVS R0,#+141
\ 000000A4 2870 STRB R0,[R5, #+0]
434 return (0u);
\ 000000A6 0020 MOVS R0,#+0
\ ??OSTmrRemainGet_1:
\ 000000A8 70BD POP {R4-R6,PC} ;; return
435 }
436 }
437 #endif
438
439 /*$PAGE*/
440 /*
441 ************************************************************************************************************************
442 * FIND OUT WHAT STATE A TIMER IS IN
443 *
444 * Description: This function is called to determine what state the timer is in:
445 *
446 * OS_TMR_STATE_UNUSED the timer has not been created
447 * OS_TMR_STATE_STOPPED the timer has been created but has not been started or has been stopped
448 * OS_TMR_STATE_COMPLETED the timer is in ONE-SHOT mode and has completed it's timeout
449 * OS_TMR_STATE_RUNNING the timer is currently running
450 *
451 * Arguments : ptmr Is a pointer to the desired timer
452 *
453 * perr Is a pointer to an error code. '*perr' will contain one of the following:
454 * OS_ERR_NONE
455 * OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer
456 * OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR
457 * OS_ERR_TMR_ISR if the call was made from an ISR
458 * OS_ERR_TMR_INACTIVE 'ptmr' points to a timer that is not active
459 * OS_ERR_TMR_INVALID_STATE if the timer is not in a valid state
460 *
461 * Returns : The current state of the timer (see description).
462 ************************************************************************************************************************
463 */
464
465 #if OS_TMR_EN > 0u
\ In section .text, align 2, keep-with-next
466 INT8U OSTmrStateGet (OS_TMR *ptmr,
467 INT8U *perr)
468 {
\ OSTmrStateGet:
\ 00000000 70B5 PUSH {R4-R6,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 MOVS R5,R1
469 INT8U state;
470
471
472 #ifdef OS_SAFETY_CRITICAL
473 if (perr == (INT8U *)0) {
474 OS_SAFETY_CRITICAL_EXCEPTION();
475 return (0u);
476 }
477 #endif
478
479 #if OS_ARG_CHK_EN > 0u
480 if (ptmr == (OS_TMR *)0) {
481 *perr = OS_ERR_TMR_INVALID;
482 return (0u);
483 }
484 #endif
485 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
\ 00000006 2078 LDRB R0,[R4, #+0]
\ 00000008 6428 CMP R0,#+100
\ 0000000A 03D0 BEQ.N ??OSTmrStateGet_0
486 *perr = OS_ERR_TMR_INVALID_TYPE;
\ 0000000C 8920 MOVS R0,#+137
\ 0000000E 2870 STRB R0,[R5, #+0]
487 return (0u);
\ 00000010 0020 MOVS R0,#+0
\ 00000012 1BE0 B.N ??OSTmrStateGet_1
488 }
489 if (OSIntNesting > 0u) { /* See if trying to call from an ISR */
\ ??OSTmrStateGet_0:
\ 00000014 ........ LDR.W R0,??DataTable18_1
\ 00000018 0078 LDRB R0,[R0, #+0]
\ 0000001A 0028 CMP R0,#+0
\ 0000001C 03D0 BEQ.N ??OSTmrStateGet_2
490 *perr = OS_ERR_TMR_ISR;
\ 0000001E 8B20 MOVS R0,#+139
\ 00000020 2870 STRB R0,[R5, #+0]
491 return (0u);
\ 00000022 0020 MOVS R0,#+0
\ 00000024 12E0 B.N ??OSTmrStateGet_1
492 }
493 OSSchedLock();
\ ??OSTmrStateGet_2:
\ 00000026 ........ BL OSSchedLock
494 state = ptmr->OSTmrState;
\ 0000002A 94F82500 LDRB R0,[R4, #+37]
\ 0000002E 0600 MOVS R6,R0
495 switch (state) {
\ 00000030 F6B2 UXTB R6,R6 ;; ZeroExt R6,R6,#+24,#+24
\ 00000032 3000 MOVS R0,R6
\ 00000034 0028 CMP R0,#+0
\ 00000036 0328 CMP R0,#+3
\ 00000038 02D8 BHI.N ??OSTmrStateGet_3
496 case OS_TMR_STATE_UNUSED:
497 case OS_TMR_STATE_STOPPED:
498 case OS_TMR_STATE_COMPLETED:
499 case OS_TMR_STATE_RUNNING:
500 *perr = OS_ERR_NONE;
\ ??OSTmrStateGet_4:
\ 0000003A 0020 MOVS R0,#+0
\ 0000003C 2870 STRB R0,[R5, #+0]
501 break;
\ 0000003E 01E0 B.N ??OSTmrStateGet_5
502
503 default:
504 *perr = OS_ERR_TMR_INVALID_STATE;
\ ??OSTmrStateGet_3:
\ 00000040 8D20 MOVS R0,#+141
\ 00000042 2870 STRB R0,[R5, #+0]
505 break;
506 }
507 OSSchedUnlock();
\ ??OSTmrStateGet_5:
\ 00000044 ........ BL OSSchedUnlock
508 return (state);
\ 00000048 3000 MOVS R0,R6
\ 0000004A C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ ??OSTmrStateGet_1:
\ 0000004C 70BD POP {R4-R6,PC} ;; return
509 }
510 #endif
511
512 /*$PAGE*/
513 /*
514 ************************************************************************************************************************
515 * START A TIMER
516 *
517 * Description: This function is called by your application code to start a timer.
518 *
519 * Arguments : ptmr Is a pointer to an OS_TMR
520 *
521 * perr Is a pointer to an error code. '*perr' will contain one of the following:
522 * OS_ERR_NONE
523 * OS_ERR_TMR_INVALID
524 * OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR
525 * OS_ERR_TMR_ISR if the call was made from an ISR
526 * OS_ERR_TMR_INACTIVE if the timer was not created
527 * OS_ERR_TMR_INVALID_STATE the timer is in an invalid state
528 *
529 * Returns : OS_TRUE if the timer was started
530 * OS_FALSE if an error was detected
531 ************************************************************************************************************************
532 */
533
534 #if OS_TMR_EN > 0u
\ In section .text, align 2, keep-with-next
535 BOOLEAN OSTmrStart (OS_TMR *ptmr,
536 INT8U *perr)
537 {
\ OSTmrStart:
\ 00000000 38B5 PUSH {R3-R5,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 MOVS R5,R1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -