📄 os_tmr.lst
字号:
\ 00000020 0300001A BNE ??OSTmrRemainGet_3
374 *perr = OS_ERR_TMR_INVALID;
\ 00000024 8A00A0E3 MOV R0,#+138
\ 00000028 0000C5E5 STRB R0,[R5, #+0]
375 return (0);
\ 0000002C 0000A0E3 MOV R0,#+0
\ 00000030 440000EA B ??OSTmrRemainGet_2
376 }
377 #endif
378 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
\ ??OSTmrRemainGet_3:
\ 00000034 0000D4E5 LDRB R0,[R4, #+0]
\ 00000038 640050E3 CMP R0,#+100
\ 0000003C 0300000A BEQ ??OSTmrRemainGet_4
379 *perr = OS_ERR_TMR_INVALID_TYPE;
\ 00000040 8900A0E3 MOV R0,#+137
\ 00000044 0000C5E5 STRB R0,[R5, #+0]
380 return (0);
\ 00000048 0000A0E3 MOV R0,#+0
\ 0000004C 3D0000EA B ??OSTmrRemainGet_2
381 }
382 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
\ ??OSTmrRemainGet_4:
\ 00000050 ........ LDR R0,??DataTable7 ;; OSIntNesting
\ 00000054 0000D0E5 LDRB R0,[R0, #+0]
\ 00000058 010050E3 CMP R0,#+1
\ 0000005C 0300003A BCC ??OSTmrRemainGet_5
383 *perr = OS_ERR_TMR_ISR;
\ 00000060 8B00A0E3 MOV R0,#+139
\ 00000064 0000C5E5 STRB R0,[R5, #+0]
384 return (0);
\ 00000068 0000A0E3 MOV R0,#+0
\ 0000006C 350000EA B ??OSTmrRemainGet_2
385 }
386 OSTmr_Lock();
\ ??OSTmrRemainGet_5:
\ 00000070 ........ BL OSTmr_Lock
387 switch (ptmr->OSTmrState) {
\ 00000074 3100D4E5 LDRB R0,[R4, #+49]
\ 00000078 030050E3 CMP R0,#+3
\ 0000007C 2D00008A BHI ??OSTmrRemainGet_6
\ 00000080 011F8FE2 ADR R1,??OSTmrRemainGet_0
\ 00000084 0010D1E7 LDRB R1,[R1, R0]
\ 00000088 01F18FE0 ADD PC,PC,R1, LSL #+2
\ ??OSTmrRemainGet_0:
\ 0000008C 250A2000 DC8 +37,+10,+32,+0
388 case OS_TMR_STATE_RUNNING:
389 remain = ptmr->OSTmrMatch - OSTmrTime; /* Determine how much time is left to timeout */
\ ??OSTmrRemainGet_7:
\ 00000090 140094E5 LDR R0,[R4, #+20]
\ 00000094 ........ LDR R1,??DataTable43 ;; OSTmrTime
\ 00000098 001091E5 LDR R1,[R1, #+0]
\ 0000009C 010050E0 SUBS R0,R0,R1
\ 000000A0 0060B0E1 MOVS R6,R0
390 OSTmr_Unlock();
\ 000000A4 ........ BL OSTmr_Unlock
391 *perr = OS_ERR_NONE;
\ 000000A8 0000A0E3 MOV R0,#+0
\ 000000AC 0000C5E5 STRB R0,[R5, #+0]
392 return (remain);
\ 000000B0 0600B0E1 MOVS R0,R6
\ 000000B4 230000EA B ??OSTmrRemainGet_2
393
394 case OS_TMR_STATE_STOPPED: /* It's assumed that the timer has not started yet */
395 switch (ptmr->OSTmrOpt) {
\ ??OSTmrRemainGet_8:
\ 000000B8 3000D4E5 LDRB R0,[R4, #+48]
\ 000000BC 020050E3 CMP R0,#+2
\ 000000C0 0B00001A BNE ??OSTmrRemainGet_9
396 case OS_TMR_OPT_PERIODIC:
397 if (ptmr->OSTmrDly == 0) {
\ ??OSTmrRemainGet_10:
\ 000000C4 180094E5 LDR R0,[R4, #+24]
\ 000000C8 000050E3 CMP R0,#+0
\ 000000CC 0200001A BNE ??OSTmrRemainGet_11
398 remain = ptmr->OSTmrPeriod;
\ 000000D0 1C0094E5 LDR R0,[R4, #+28]
\ 000000D4 0060B0E1 MOVS R6,R0
\ 000000D8 010000EA B ??OSTmrRemainGet_12
399 } else {
400 remain = ptmr->OSTmrDly;
\ ??OSTmrRemainGet_11:
\ 000000DC 180094E5 LDR R0,[R4, #+24]
\ 000000E0 0060B0E1 MOVS R6,R0
401 }
402 OSTmr_Unlock();
\ ??OSTmrRemainGet_12:
\ 000000E4 ........ BL OSTmr_Unlock
403 *perr = OS_ERR_NONE;
\ 000000E8 0000A0E3 MOV R0,#+0
\ 000000EC 0000C5E5 STRB R0,[R5, #+0]
\ 000000F0 040000EA B ??OSTmrRemainGet_13
404 break;
405
406 case OS_TMR_OPT_ONE_SHOT:
407 default:
408 remain = ptmr->OSTmrDly;
\ ??OSTmrRemainGet_9:
\ 000000F4 180094E5 LDR R0,[R4, #+24]
\ 000000F8 0060B0E1 MOVS R6,R0
409 OSTmr_Unlock();
\ 000000FC ........ BL OSTmr_Unlock
410 *perr = OS_ERR_NONE;
\ 00000100 0000A0E3 MOV R0,#+0
\ 00000104 0000C5E5 STRB R0,[R5, #+0]
411 break;
412 }
413 return (remain);
\ ??OSTmrRemainGet_13:
\ 00000108 0600B0E1 MOVS R0,R6
\ 0000010C 0D0000EA B ??OSTmrRemainGet_2
414
415 case OS_TMR_STATE_COMPLETED: /* Only ONE-SHOT that timed out can be in this state */
416 OSTmr_Unlock();
\ ??OSTmrRemainGet_14:
\ 00000110 ........ BL OSTmr_Unlock
417 *perr = OS_ERR_NONE;
\ 00000114 0000A0E3 MOV R0,#+0
\ 00000118 0000C5E5 STRB R0,[R5, #+0]
418 return (0);
\ 0000011C 0000A0E3 MOV R0,#+0
\ 00000120 080000EA B ??OSTmrRemainGet_2
419
420 case OS_TMR_STATE_UNUSED:
421 OSTmr_Unlock();
\ ??OSTmrRemainGet_15:
\ 00000124 ........ BL OSTmr_Unlock
422 *perr = OS_ERR_TMR_INACTIVE;
\ 00000128 8700A0E3 MOV R0,#+135
\ 0000012C 0000C5E5 STRB R0,[R5, #+0]
423 return (0);
\ 00000130 0000A0E3 MOV R0,#+0
\ 00000134 030000EA B ??OSTmrRemainGet_2
424
425 default:
426 OSTmr_Unlock();
\ ??OSTmrRemainGet_6:
\ 00000138 ........ BL OSTmr_Unlock
427 *perr = OS_ERR_TMR_INVALID_STATE;
\ 0000013C 8D00A0E3 MOV R0,#+141
\ 00000140 0000C5E5 STRB R0,[R5, #+0]
428 return (0);
\ 00000144 0000A0E3 MOV R0,#+0
\ ??OSTmrRemainGet_2:
\ 00000148 7080BDE8 POP {R4-R6,PC} ;; return
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 70402DE9 PUSH {R4-R6,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 0150B0E1 MOVS R5,R1
463 INT8U state;
464
465
466 #if OS_ARG_CHK_EN > 0
467 if (perr == (INT8U *)0) {
\ 0000000C 000055E3 CMP R5,#+0
\ 00000010 0100001A BNE ??OSTmrStateGet_1
468 return (0);
\ 00000014 0000A0E3 MOV R0,#+0
\ 00000018 250000EA B ??OSTmrStateGet_2
469 }
470 if (ptmr == (OS_TMR *)0) {
\ ??OSTmrStateGet_1:
\ 0000001C 000054E3 CMP R4,#+0
\ 00000020 0300001A BNE ??OSTmrStateGet_3
471 *perr = OS_ERR_TMR_INVALID;
\ 00000024 8A00A0E3 MOV R0,#+138
\ 00000028 0000C5E5 STRB R0,[R5, #+0]
472 return (0);
\ 0000002C 0000A0E3 MOV R0,#+0
\ 00000030 1F0000EA B ??OSTmrStateGet_2
473 }
474 #endif
475 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
\ ??OSTmrStateGet_3:
\ 00000034 0000D4E5 LDRB R0,[R4, #+0]
\ 00000038 640050E3 CMP R0,#+100
\ 0000003C 0300000A BEQ ??OSTmrStateGet_4
476 *perr = OS_ERR_TMR_INVALID_TYPE;
\ 00000040 8900A0E3 MOV R0,#+137
\ 00000044 0000C5E5 STRB R0,[R5, #+0]
477 return (0);
\ 00000048 0000A0E3 MOV R0,#+0
\ 0000004C 180000EA B ??OSTmrStateGet_2
478 }
479 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
\ ??OSTmrStateGet_4:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -