📄 os_tmr.lst
字号:
\ ??OSTmrRemainGet_2:
\ 00000008 0020 MOVS R0,#+0
\ 0000000A 70BD POP {R4-R6,PC} ;; return
372 }
373 if (ptmr == (OS_TMR *)0) {
\ ??OSTmrRemainGet_1:
\ 0000000C 002E CMP R6,#+0
\ 0000000E 02D1 BNE.N ??OSTmrRemainGet_3
374 *perr = OS_ERR_TMR_INVALID;
\ 00000010 8A20 MOVS R0,#+138
\ 00000012 2070 STRB R0,[R4, #+0]
\ 00000014 F8E7 B.N ??OSTmrRemainGet_2
375 return (0);
376 }
377 #endif
378 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
\ ??OSTmrRemainGet_3:
\ 00000016 3078 LDRB R0,[R6, #+0]
\ 00000018 6428 CMP R0,#+100
\ 0000001A 02D0 BEQ.N ??OSTmrRemainGet_4
379 *perr = OS_ERR_TMR_INVALID_TYPE;
\ 0000001C 8920 MOVS R0,#+137
\ 0000001E 2070 STRB R0,[R4, #+0]
\ 00000020 F2E7 B.N ??OSTmrRemainGet_2
380 return (0);
381 }
382 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
\ ??OSTmrRemainGet_4:
\ 00000022 .... LDR.N R0,??DataTable6 ;; OSIntNesting
\ 00000024 0078 LDRB R0,[R0, #+0]
\ 00000026 0028 CMP R0,#+0
\ 00000028 02D0 BEQ.N ??OSTmrRemainGet_5
383 *perr = OS_ERR_TMR_ISR;
\ 0000002A 8B20 MOVS R0,#+139
\ 0000002C 2070 STRB R0,[R4, #+0]
\ 0000002E EBE7 B.N ??OSTmrRemainGet_2
384 return (0);
385 }
386 OSTmr_Lock();
\ ??OSTmrRemainGet_5:
\ 00000030 ........ BL OSTmr_Lock
387 switch (ptmr->OSTmrState) {
\ 00000034 3000 MOVS R0,R6
\ 00000036 3030 ADDS R0,R0,#+48
\ 00000038 0025 MOVS R5,#+0
\ 0000003A 4178 LDRB R1,[R0, #+1]
\ 0000003C 0329 CMP R1,#+3
\ 0000003E 21D8 BHI.N ??OSTmrRemainGet_6
\ 00000040 DFE801F0 TBB [PC, R1]
\ ??OSTmrRemainGet_0:
\ 00000044 1B071702 DC8 +27,+7,+23,+2
388 case OS_TMR_STATE_RUNNING:
389 remain = ptmr->OSTmrMatch - OSTmrTime; /* Determine how much time is left to timeout */
\ ??OSTmrRemainGet_7:
\ 00000048 7069 LDR R0,[R6, #+20]
\ 0000004A .... LDR.N R1,??DataTable16 ;; OSTmrTime
\ 0000004C 0968 LDR R1,[R1, #+0]
\ 0000004E 461A SUBS R6,R0,R1
\ 00000050 08E0 B.N ??OSTmrRemainGet_8
390 OSTmr_Unlock();
391 *perr = OS_ERR_NONE;
392 return (remain);
393
394 case OS_TMR_STATE_STOPPED: /* It's assumed that the timer has not started yet */
395 switch (ptmr->OSTmrOpt) {
\ ??OSTmrRemainGet_9:
\ 00000052 0078 LDRB R0,[R0, #+0]
\ 00000054 0228 CMP R0,#+2
\ 00000056 0AD1 BNE.N ??OSTmrRemainGet_10
396 case OS_TMR_OPT_PERIODIC:
397 if (ptmr->OSTmrDly == 0) {
\ 00000058 B069 LDR R0,[R6, #+24]
\ 0000005A 0028 CMP R0,#+0
\ 0000005C 01D1 BNE.N ??OSTmrRemainGet_11
398 remain = ptmr->OSTmrPeriod;
\ 0000005E F669 LDR R6,[R6, #+28]
\ 00000060 00E0 B.N ??OSTmrRemainGet_8
399 } else {
400 remain = ptmr->OSTmrDly;
\ ??OSTmrRemainGet_11:
\ 00000062 0646 MOV R6,R0
401 }
402 OSTmr_Unlock();
\ ??OSTmrRemainGet_8:
\ 00000064 ........ BL OSTmr_Unlock
403 *perr = OS_ERR_NONE;
\ 00000068 2570 STRB R5,[R4, #+0]
404 break;
405
406 case OS_TMR_OPT_ONE_SHOT:
407 default:
408 remain = ptmr->OSTmrDly;
409 OSTmr_Unlock();
410 *perr = OS_ERR_NONE;
411 break;
412 }
413 return (remain);
\ 0000006A 3000 MOVS R0,R6
\ 0000006C 70BD POP {R4-R6,PC}
\ ??OSTmrRemainGet_10:
\ 0000006E B669 LDR R6,[R6, #+24]
\ 00000070 F8E7 B.N ??OSTmrRemainGet_8
414
415 case OS_TMR_STATE_COMPLETED: /* Only ONE-SHOT that timed out can be in this state */
416 OSTmr_Unlock();
\ ??OSTmrRemainGet_12:
\ 00000072 ........ BL OSTmr_Unlock
417 *perr = OS_ERR_NONE;
\ 00000076 2570 STRB R5,[R4, #+0]
\ 00000078 C6E7 B.N ??OSTmrRemainGet_2
418 return (0);
419
420 case OS_TMR_STATE_UNUSED:
421 OSTmr_Unlock();
\ ??OSTmrRemainGet_13:
\ 0000007A ........ BL OSTmr_Unlock
422 *perr = OS_ERR_TMR_INACTIVE;
\ 0000007E 8720 MOVS R0,#+135
\ 00000080 2070 STRB R0,[R4, #+0]
\ 00000082 C1E7 B.N ??OSTmrRemainGet_2
423 return (0);
424
425 default:
426 OSTmr_Unlock();
\ ??OSTmrRemainGet_6:
\ 00000084 ........ BL OSTmr_Unlock
427 *perr = OS_ERR_TMR_INVALID_STATE;
\ 00000088 8D20 MOVS R0,#+141
\ 0000008A 2070 STRB R0,[R4, #+0]
\ 0000008C BCE7 B.N ??OSTmrRemainGet_2
428 return (0);
429 }
430 }
431 #endif
432
433 /*$PAGE*/
434 /*
435 ************************************************************************************************************************
436 * FIND OUT WHAT STATE A TIMER IS IN
437 *
438 * Description: This function is called to determine what state the timer is in:
439 *
440 * OS_TMR_STATE_UNUSED the timer has not been created
441 * OS_TMR_STATE_STOPPED the timer has been created but has not been started or has been stopped
442 * OS_TMR_COMPLETED the timer is in ONE-SHOT mode and has completed it's timeout
443 * OS_TMR_RUNNING the timer is currently running
444 *
445 * Arguments : ptmr Is a pointer to the desired timer
446 *
447 * perr Is a pointer to an error code. '*perr' will contain one of the following:
448 * OS_ERR_NONE
449 * OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer
450 * OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR
451 * OS_ERR_TMR_ISR if the call was made from an ISR
452 * OS_ERR_TMR_INACTIVE 'ptmr' points to a timer that is not active
453 * OS_ERR_TMR_INVALID_STATE if the timer is not in a valid state
454 *
455 * Returns : The current state of the timer (see description).
456 ************************************************************************************************************************
457 */
458
459 #if OS_TMR_EN > 0
\ In segment CODE, align 4, keep-with-next
460 INT8U OSTmrStateGet (OS_TMR *ptmr,
461 INT8U *perr)
462 {
\ OSTmrStateGet:
\ 00000000 30B5 PUSH {R4,R5,LR}
\ 00000002 0500 MOVS R5,R0
\ 00000004 0C00 MOVS R4,R1
463 INT8U state;
464
465
466 #if OS_ARG_CHK_EN > 0
467 if (perr == (INT8U *)0) {
\ 00000006 01D1 BNE.N ??OSTmrStateGet_0
468 return (0);
\ ??OSTmrStateGet_1:
\ 00000008 0020 MOVS R0,#+0
\ 0000000A 30BD POP {R4,R5,PC}
469 }
470 if (ptmr == (OS_TMR *)0) {
\ ??OSTmrStateGet_0:
\ 0000000C 002D CMP R5,#+0
\ 0000000E 02D1 BNE.N ??OSTmrStateGet_2
471 *perr = OS_ERR_TMR_INVALID;
\ 00000010 8A20 MOVS R0,#+138
\ 00000012 2070 STRB R0,[R4, #+0]
\ 00000014 F8E7 B.N ??OSTmrStateGet_1
472 return (0);
473 }
474 #endif
475 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
\ ??OSTmrStateGet_2:
\ 00000016 2878 LDRB R0,[R5, #+0]
\ 00000018 6428 CMP R0,#+100
\ 0000001A 02D0 BEQ.N ??OSTmrStateGet_3
476 *perr = OS_ERR_TMR_INVALID_TYPE;
\ 0000001C 8920 MOVS R0,#+137
\ 0000001E 2070 STRB R0,[R4, #+0]
\ 00000020 F2E7 B.N ??OSTmrStateGet_1
477 return (0);
478 }
479 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
\ ??OSTmrStateGet_3:
\ 00000022 .... LDR.N R0,??DataTable6 ;; OSIntNesting
\ 00000024 0078 LDRB R0,[R0, #+0]
\ 00000026 0028 CMP R0,#+0
\ 00000028 02D0 BEQ.N ??OSTmrStateGet_4
480 *perr = OS_ERR_TMR_ISR;
\ 0000002A 8B20 MOVS R0,#+139
\ 0000002C 2070 STRB R0,[R4, #+0]
\ 0000002E EBE7 B.N ??OSTmrStateGet_1
481 return (0);
482 }
483 OSTmr_Lock();
\ ??OSTmrStateGet_4:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -