📄 os_tmr.lst
字号:
538 #ifdef OS_SAFETY_CRITICAL
539 if (perr == (INT8U *)0) {
540 OS_SAFETY_CRITICAL_EXCEPTION();
541 return (OS_FALSE);
542 }
543 #endif
544
545 #if OS_ARG_CHK_EN > 0u
546 if (ptmr == (OS_TMR *)0) {
547 *perr = OS_ERR_TMR_INVALID;
548 return (OS_FALSE);
549 }
550 #endif
551 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
\ 00000006 2078 LDRB R0,[R4, #+0]
\ 00000008 6428 CMP R0,#+100
\ 0000000A 03D0 BEQ.N ??OSTmrStart_0
552 *perr = OS_ERR_TMR_INVALID_TYPE;
\ 0000000C 8920 MOVS R0,#+137
\ 0000000E 2870 STRB R0,[R5, #+0]
553 return (OS_FALSE);
\ 00000010 0020 MOVS R0,#+0
\ 00000012 35E0 B.N ??OSTmrStart_1
554 }
555 if (OSIntNesting > 0u) { /* See if trying to call from an ISR */
\ ??OSTmrStart_0:
\ 00000014 ........ LDR.W R0,??DataTable18_1
\ 00000018 0078 LDRB R0,[R0, #+0]
\ 0000001A 0028 CMP R0,#+0
\ 0000001C 03D0 BEQ.N ??OSTmrStart_2
556 *perr = OS_ERR_TMR_ISR;
\ 0000001E 8B20 MOVS R0,#+139
\ 00000020 2870 STRB R0,[R5, #+0]
557 return (OS_FALSE);
\ 00000022 0020 MOVS R0,#+0
\ 00000024 2CE0 B.N ??OSTmrStart_1
558 }
559 OSSchedLock();
\ ??OSTmrStart_2:
\ 00000026 ........ BL OSSchedLock
560 switch (ptmr->OSTmrState) {
\ 0000002A 94F82500 LDRB R0,[R4, #+37]
\ 0000002E 0028 CMP R0,#+0
\ 00000030 1BD0 BEQ.N ??OSTmrStart_3
\ 00000032 0228 CMP R0,#+2
\ 00000034 0FD0 BEQ.N ??OSTmrStart_4
\ 00000036 0ED3 BCC.N ??OSTmrStart_4
\ 00000038 0328 CMP R0,#+3
\ 0000003A 1CD1 BNE.N ??OSTmrStart_5
561 case OS_TMR_STATE_RUNNING: /* Restart the timer */
562 OSTmr_Unlink(ptmr); /* ... Stop the timer */
\ ??OSTmrStart_6:
\ 0000003C 2000 MOVS R0,R4
\ 0000003E ........ BL OSTmr_Unlink
563 OSTmr_Link(ptmr, OS_TMR_LINK_DLY); /* ... Link timer to timer wheel */
\ 00000042 0021 MOVS R1,#+0
\ 00000044 2000 MOVS R0,R4
\ 00000046 ........ BL OSTmr_Link
564 OSSchedUnlock();
\ 0000004A ........ BL OSSchedUnlock
565 *perr = OS_ERR_NONE;
\ 0000004E 0020 MOVS R0,#+0
\ 00000050 2870 STRB R0,[R5, #+0]
566 return (OS_TRUE);
\ 00000052 0120 MOVS R0,#+1
\ 00000054 14E0 B.N ??OSTmrStart_1
567
568 case OS_TMR_STATE_STOPPED: /* Start the timer */
569 case OS_TMR_STATE_COMPLETED:
570 OSTmr_Link(ptmr, OS_TMR_LINK_DLY); /* ... Link timer to timer wheel */
\ ??OSTmrStart_4:
\ 00000056 0021 MOVS R1,#+0
\ 00000058 2000 MOVS R0,R4
\ 0000005A ........ BL OSTmr_Link
571 OSSchedUnlock();
\ 0000005E ........ BL OSSchedUnlock
572 *perr = OS_ERR_NONE;
\ 00000062 0020 MOVS R0,#+0
\ 00000064 2870 STRB R0,[R5, #+0]
573 return (OS_TRUE);
\ 00000066 0120 MOVS R0,#+1
\ 00000068 0AE0 B.N ??OSTmrStart_1
574
575 case OS_TMR_STATE_UNUSED: /* Timer not created */
576 OSSchedUnlock();
\ ??OSTmrStart_3:
\ 0000006A ........ BL OSSchedUnlock
577 *perr = OS_ERR_TMR_INACTIVE;
\ 0000006E 8720 MOVS R0,#+135
\ 00000070 2870 STRB R0,[R5, #+0]
578 return (OS_FALSE);
\ 00000072 0020 MOVS R0,#+0
\ 00000074 04E0 B.N ??OSTmrStart_1
579
580 default:
581 OSSchedUnlock();
\ ??OSTmrStart_5:
\ 00000076 ........ BL OSSchedUnlock
582 *perr = OS_ERR_TMR_INVALID_STATE;
\ 0000007A 8D20 MOVS R0,#+141
\ 0000007C 2870 STRB R0,[R5, #+0]
583 return (OS_FALSE);
\ 0000007E 0020 MOVS R0,#+0
\ ??OSTmrStart_1:
\ 00000080 32BD POP {R1,R4,R5,PC} ;; return
584 }
585 }
586 #endif
587
588 /*$PAGE*/
589 /*
590 ************************************************************************************************************************
591 * STOP A TIMER
592 *
593 * Description: This function is called by your application code to stop a timer.
594 *
595 * Arguments : ptmr Is a pointer to the timer to stop.
596 *
597 * opt Allows you to specify an option to this functions which can be:
598 *
599 * OS_TMR_OPT_NONE Do nothing special but stop the timer
600 * OS_TMR_OPT_CALLBACK Execute the callback function, pass it the callback argument
601 * specified when the timer was created.
602 * OS_TMR_OPT_CALLBACK_ARG Execute the callback function, pass it the callback argument
603 * specified in THIS function call
604 *
605 * callback_arg Is a pointer to a 'new' callback argument that can be passed to the callback function
606 * instead of the timer's callback argument. In other words, use 'callback_arg' passed in
607 * THIS function INSTEAD of ptmr->OSTmrCallbackArg
608 *
609 * perr Is a pointer to an error code. '*perr' will contain one of the following:
610 * OS_ERR_NONE
611 * OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer
612 * OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR
613 * OS_ERR_TMR_ISR if the function was called from an ISR
614 * OS_ERR_TMR_INACTIVE if the timer was not created
615 * OS_ERR_TMR_INVALID_OPT if you specified an invalid option for 'opt'
616 * OS_ERR_TMR_STOPPED if the timer was already stopped
617 * OS_ERR_TMR_INVALID_STATE the timer is in an invalid state
618 * OS_ERR_TMR_NO_CALLBACK if the timer does not have a callback function defined
619 *
620 * Returns : OS_TRUE If we stopped the timer (if the timer is already stopped, we also return OS_TRUE)
621 * OS_FALSE If not
622 ************************************************************************************************************************
623 */
624
625 #if OS_TMR_EN > 0u
\ In section .text, align 2, keep-with-next
626 BOOLEAN OSTmrStop (OS_TMR *ptmr,
627 INT8U opt,
628 void *callback_arg,
629 INT8U *perr)
630 {
\ OSTmrStop:
\ 00000000 2DE9F041 PUSH {R4-R8,LR}
\ 00000004 0400 MOVS R4,R0
\ 00000006 0D00 MOVS R5,R1
\ 00000008 1600 MOVS R6,R2
\ 0000000A 1F00 MOVS R7,R3
631 OS_TMR_CALLBACK pfnct;
632
633
634 #ifdef OS_SAFETY_CRITICAL
635 if (perr == (INT8U *)0) {
636 OS_SAFETY_CRITICAL_EXCEPTION();
637 return (OS_FALSE);
638 }
639 #endif
640
641 #if OS_ARG_CHK_EN > 0u
642 if (ptmr == (OS_TMR *)0) {
643 *perr = OS_ERR_TMR_INVALID;
644 return (OS_FALSE);
645 }
646 #endif
647 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
\ 0000000C 2078 LDRB R0,[R4, #+0]
\ 0000000E 6428 CMP R0,#+100
\ 00000010 03D0 BEQ.N ??OSTmrStop_0
648 *perr = OS_ERR_TMR_INVALID_TYPE;
\ 00000012 8920 MOVS R0,#+137
\ 00000014 3870 STRB R0,[R7, #+0]
649 return (OS_FALSE);
\ 00000016 0020 MOVS R0,#+0
\ 00000018 51E0 B.N ??OSTmrStop_1
650 }
651 if (OSIntNesting > 0u) { /* See if trying to call from an ISR */
\ ??OSTmrStop_0:
\ 0000001A ........ LDR.W R0,??DataTable18_1
\ 0000001E 0078 LDRB R0,[R0, #+0]
\ 00000020 0028 CMP R0,#+0
\ 00000022 03D0 BEQ.N ??OSTmrStop_2
652 *perr = OS_ERR_TMR_ISR;
\ 00000024 8B20 MOVS R0,#+139
\ 00000026 3870 STRB R0,[R7, #+0]
653 return (OS_FALSE);
\ 00000028 0020 MOVS R0,#+0
\ 0000002A 48E0 B.N ??OSTmrStop_1
654 }
655 OSSchedLock();
\ ??OSTmrStop_2:
\ 0000002C ........ BL OSSchedLock
656 switch (ptmr->OSTmrState) {
\ 00000030 94F82500 LDRB R0,[R4, #+37]
\ 00000034 0028 CMP R0,#+0
\ 00000036 37D0 BEQ.N ??OSTmrStop_3
\ 00000038 0228 CMP R0,#+2
\ 0000003A 2FD0 BEQ.N ??OSTmrStop_4
\ 0000003C 2ED3 BCC.N ??OSTmrStop_4
\ 0000003E 0328 CMP R0,#+3
\ 00000040 38D1 BNE.N ??OSTmrStop_5
657 case OS_TMR_STATE_RUNNING:
658 OSTmr_Unlink(ptmr); /* Remove from current wheel spoke */
\ ??OSTmrStop_6:
\ 00000042 2000 MOVS R0,R4
\ 00000044 ........ BL OSTmr_Unlink
659 *perr = OS_ERR_NONE;
\ 00000048 0020 MOVS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -