📄 os_tmr.lst
字号:
\ 00000050 ........ LDR R0,??DataTable7 ;; OSIntNesting
\ 00000054 0000D0E5 LDRB R0,[R0, #+0]
\ 00000058 010050E3 CMP R0,#+1
\ 0000005C 0300003A BCC ??OSTmrStateGet_5
480 *perr = OS_ERR_TMR_ISR;
\ 00000060 8B00A0E3 MOV R0,#+139
\ 00000064 0000C5E5 STRB R0,[R5, #+0]
481 return (0);
\ 00000068 0000A0E3 MOV R0,#+0
\ 0000006C 100000EA B ??OSTmrStateGet_2
482 }
483 OSTmr_Lock();
\ ??OSTmrStateGet_5:
\ 00000070 ........ BL OSTmr_Lock
484 state = ptmr->OSTmrState;
\ 00000074 3100D4E5 LDRB R0,[R4, #+49]
\ 00000078 0060B0E1 MOVS R6,R0
485 switch (state) {
\ 0000007C 0600B0E1 MOVS R0,R6
\ 00000080 030050E3 CMP R0,#+3
\ 00000084 0600008A BHI ??OSTmrStateGet_6
\ 00000088 011F8FE2 ADR R1,??OSTmrStateGet_0
\ 0000008C 0010D1E7 LDRB R1,[R1, R0]
\ 00000090 01F18FE0 ADD PC,PC,R1, LSL #+2
\ ??OSTmrStateGet_0:
\ 00000094 00000000 DC8 +0,+0,+0,+0
486 case OS_TMR_STATE_UNUSED:
487 case OS_TMR_STATE_STOPPED:
488 case OS_TMR_STATE_COMPLETED:
489 case OS_TMR_STATE_RUNNING:
490 *perr = OS_ERR_NONE;
\ ??OSTmrStateGet_7:
\ 00000098 0000A0E3 MOV R0,#+0
\ 0000009C 0000C5E5 STRB R0,[R5, #+0]
\ 000000A0 010000EA B ??OSTmrStateGet_8
491 break;
492
493 default:
494 *perr = OS_ERR_TMR_INVALID_STATE;
\ ??OSTmrStateGet_6:
\ 000000A4 8D00A0E3 MOV R0,#+141
\ 000000A8 0000C5E5 STRB R0,[R5, #+0]
495 break;
496 }
497 OSTmr_Unlock();
\ ??OSTmrStateGet_8:
\ 000000AC ........ BL OSTmr_Unlock
498 return (state);
\ 000000B0 0600B0E1 MOVS R0,R6
\ ??OSTmrStateGet_2:
\ 000000B4 7080BDE8 POP {R4-R6,PC} ;; return
499 }
500 #endif
501
502 /*$PAGE*/
503 /*
504 ************************************************************************************************************************
505 * START A TIMER
506 *
507 * Description: This function is called by your application code to start a timer.
508 *
509 * Arguments : ptmr Is a pointer to an OS_TMR
510 *
511 * perr Is a pointer to an error code. '*perr' will contain one of the following:
512 * OS_ERR_NONE
513 * OS_ERR_TMR_INVALID
514 * OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR
515 * OS_ERR_TMR_ISR if the call was made from an ISR
516 * OS_ERR_TMR_INACTIVE if the timer was not created
517 * OS_ERR_TMR_INVALID_STATE the timer is in an invalid state
518 *
519 * Returns : OS_TRUE if the timer was started
520 * OS_FALSE if an error was detected
521 ************************************************************************************************************************
522 */
523
524 #if OS_TMR_EN > 0
\ In segment CODE, align 4, keep-with-next
525 BOOLEAN OSTmrStart (OS_TMR *ptmr,
526 INT8U *perr)
527 {
\ OSTmrStart:
\ 00000000 30402DE9 PUSH {R4,R5,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 0150B0E1 MOVS R5,R1
528 #if OS_ARG_CHK_EN > 0
529 if (perr == (INT8U *)0) { /* Validate arguments */
\ 0000000C 000055E3 CMP R5,#+0
\ 00000010 0100001A BNE ??OSTmrStart_1
530 return (OS_FALSE);
\ 00000014 0000A0E3 MOV R0,#+0
\ 00000018 370000EA B ??OSTmrStart_2
531 }
532 if (ptmr == (OS_TMR *)0) {
\ ??OSTmrStart_1:
\ 0000001C 000054E3 CMP R4,#+0
\ 00000020 0300001A BNE ??OSTmrStart_3
533 *perr = OS_ERR_TMR_INVALID;
\ 00000024 8A00A0E3 MOV R0,#+138
\ 00000028 0000C5E5 STRB R0,[R5, #+0]
534 return (OS_FALSE);
\ 0000002C 0000A0E3 MOV R0,#+0
\ 00000030 310000EA B ??OSTmrStart_2
535 }
536 #endif
537 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
\ ??OSTmrStart_3:
\ 00000034 0000D4E5 LDRB R0,[R4, #+0]
\ 00000038 640050E3 CMP R0,#+100
\ 0000003C 0300000A BEQ ??OSTmrStart_4
538 *perr = OS_ERR_TMR_INVALID_TYPE;
\ 00000040 8900A0E3 MOV R0,#+137
\ 00000044 0000C5E5 STRB R0,[R5, #+0]
539 return (OS_FALSE);
\ 00000048 0000A0E3 MOV R0,#+0
\ 0000004C 2A0000EA B ??OSTmrStart_2
540 }
541 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
\ ??OSTmrStart_4:
\ 00000050 ........ LDR R0,??DataTable7 ;; OSIntNesting
\ 00000054 0000D0E5 LDRB R0,[R0, #+0]
\ 00000058 010050E3 CMP R0,#+1
\ 0000005C 0300003A BCC ??OSTmrStart_5
542 *perr = OS_ERR_TMR_ISR;
\ 00000060 8B00A0E3 MOV R0,#+139
\ 00000064 0000C5E5 STRB R0,[R5, #+0]
543 return (OS_FALSE);
\ 00000068 0000A0E3 MOV R0,#+0
\ 0000006C 220000EA B ??OSTmrStart_2
544 }
545 OSTmr_Lock();
\ ??OSTmrStart_5:
\ 00000070 ........ BL OSTmr_Lock
546 switch (ptmr->OSTmrState) {
\ 00000074 3100D4E5 LDRB R0,[R4, #+49]
\ 00000078 030050E3 CMP R0,#+3
\ 0000007C 1A00008A BHI ??OSTmrStart_6
\ 00000080 011F8FE2 ADR R1,??OSTmrStart_0
\ 00000084 0010D1E7 LDRB R1,[R1, R0]
\ 00000088 01F18FE0 ADD PC,PC,R1, LSL #+2
\ ??OSTmrStart_0:
\ 0000008C 120A0A00 DC8 +18,+10,+10,+0
547 case OS_TMR_STATE_RUNNING: /* Restart the timer */
548 OSTmr_Unlink(ptmr); /* ... Stop the timer */
\ ??OSTmrStart_7:
\ 00000090 0400B0E1 MOVS R0,R4
\ 00000094 ........ BL OSTmr_Unlink
549 OSTmr_Link(ptmr, OS_TMR_LINK_DLY); /* ... Link timer to timer wheel */
\ 00000098 0010A0E3 MOV R1,#+0
\ 0000009C 0400B0E1 MOVS R0,R4
\ 000000A0 ........ BL OSTmr_Link
550 OSTmr_Unlock();
\ 000000A4 ........ BL OSTmr_Unlock
551 *perr = OS_ERR_NONE;
\ 000000A8 0000A0E3 MOV R0,#+0
\ 000000AC 0000C5E5 STRB R0,[R5, #+0]
552 return (OS_TRUE);
\ 000000B0 0100A0E3 MOV R0,#+1
\ 000000B4 100000EA B ??OSTmrStart_2
553
554 case OS_TMR_STATE_STOPPED: /* Start the timer */
555 case OS_TMR_STATE_COMPLETED:
556 OSTmr_Link(ptmr, OS_TMR_LINK_DLY); /* ... Link timer to timer wheel */
\ ??OSTmrStart_8:
\ 000000B8 0010A0E3 MOV R1,#+0
\ 000000BC 0400B0E1 MOVS R0,R4
\ 000000C0 ........ BL OSTmr_Link
557 OSTmr_Unlock();
\ 000000C4 ........ BL OSTmr_Unlock
558 *perr = OS_ERR_NONE;
\ 000000C8 0000A0E3 MOV R0,#+0
\ 000000CC 0000C5E5 STRB R0,[R5, #+0]
559 return (OS_TRUE);
\ 000000D0 0100A0E3 MOV R0,#+1
\ 000000D4 080000EA B ??OSTmrStart_2
560
561 case OS_TMR_STATE_UNUSED: /* Timer not created */
562 OSTmr_Unlock();
\ ??OSTmrStart_9:
\ 000000D8 ........ BL OSTmr_Unlock
563 *perr = OS_ERR_TMR_INACTIVE;
\ 000000DC 8700A0E3 MOV R0,#+135
\ 000000E0 0000C5E5 STRB R0,[R5, #+0]
564 return (OS_FALSE);
\ 000000E4 0000A0E3 MOV R0,#+0
\ 000000E8 030000EA B ??OSTmrStart_2
565
566 default:
567 OSTmr_Unlock();
\ ??OSTmrStart_6:
\ 000000EC ........ BL OSTmr_Unlock
568 *perr = OS_ERR_TMR_INVALID_STATE;
\ 000000F0 8D00A0E3 MOV R0,#+141
\ 000000F4 0000C5E5 STRB R0,[R5, #+0]
569 return (OS_FALSE);
\ 000000F8 0000A0E3 MOV R0,#+0
\ ??OSTmrStart_2:
\ 000000FC 3080BDE8 POP {R4,R5,PC} ;; return
570 }
571 }
572 #endif
573
574 /*$PAGE*/
575 /*
576 ************************************************************************************************************************
577 * STOP A TIMER
578 *
579 * Description: This function is called by your application code to stop a timer.
580 *
581 * Arguments : ptmr Is a pointer to the timer to stop.
582 *
583 * opt Allows you to specify an option to this functions which can be:
584 *
585 * OS_TMR_OPT_NONE Do nothing special but stop the timer
586 * OS_TMR_OPT_CALLBACK Execute the callback function, pass it the callback argument
587 * specified when the timer was created.
588 * OS_TMR_OPT_CALLBACK_ARG Execute the callback function, pass it the callback argument
589 * specified in THIS function call
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -