📄 os_tmr.txt
字号:
|L1.1184|
0004a0 ebfffffe BL OSTmr_Lock
0004a4 e5d40031 LDRB r0,[r4,#0x31]
0004a8 e3500000 CMP r0,#0
0004ac 0a000011 BEQ |L1.1272|
0004b0 e3500001 CMP r0,#1
0004b4 0a000005 BEQ |L1.1232|
0004b8 e3500002 CMP r0,#2
0004bc 0a000004 BEQ |L1.1236|
0004c0 e3500003 CMP r0,#3
0004c4 1a000011 BNE |L1.1296|
0004c8 e1a00000 MOV r0,r0
0004cc e1a00000 MOV r0,r0
|L1.1232|
0004d0 e1a00000 MOV r0,r0
|L1.1236|
0004d4 e2841020 ADD r1,r4,#0x20
0004d8 e1a00005 MOV r0,r5
0004dc ebfffffe BL OS_StrCopy
0004e0 e1a07000 MOV r7,r0
0004e4 ebfffffe BL OSTmr_Unlock
0004e8 e3a00000 MOV r0,#0
0004ec e5c60000 STRB r0,[r6,#0]
0004f0 e1a00007 MOV r0,r7
0004f4 eaffffcc B |L1.1068|
|L1.1272|
0004f8 e1a00000 MOV r0,r0
0004fc ebfffffe BL OSTmr_Unlock
000500 e3a00087 MOV r0,#0x87
000504 e5c60000 STRB r0,[r6,#0]
000508 e3a00000 MOV r0,#0
00050c eaffffc6 B |L1.1068|
|L1.1296|
000510 e1a00000 MOV r0,r0
000514 ebfffffe BL OSTmr_Unlock
000518 e3a0008d MOV r0,#0x8d
00051c e5c60000 STRB r0,[r6,#0]
000520 e3a00000 MOV r0,#0
000524 eaffffc0 B |L1.1068|
ENDP
OSTmrRemainGet PROC
;;;364 INT8U *perr)
;;;365 {
000528 e92d4070 PUSH {r4-r6,lr}
00052c e1a04000 MOV r4,r0
000530 e1a05001 MOV r5,r1
;;;366 INT32U remain;
;;;367
;;;368
;;;369 #if OS_ARG_CHK_EN > 0
;;;370 if (perr == (INT8U *)0) {
000534 e3550000 CMP r5,#0
000538 1a000002 BNE |L1.1352|
;;;371 return (0);
00053c e3a00000 MOV r0,#0
|L1.1344|
000540 e8bd4070 POP {r4-r6,lr}
;;;372 }
;;;373 if (ptmr == (OS_TMR *)0) {
;;;374 *perr = OS_ERR_TMR_INVALID;
;;;375 return (0);
;;;376 }
;;;377 #endif
;;;378 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
;;;379 *perr = OS_ERR_TMR_INVALID_TYPE;
;;;380 return (0);
;;;381 }
;;;382 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
;;;383 *perr = OS_ERR_TMR_ISR;
;;;384 return (0);
;;;385 }
;;;386 OSTmr_Lock();
;;;387 switch (ptmr->OSTmrState) {
;;;388 case OS_TMR_STATE_RUNNING:
;;;389 remain = ptmr->OSTmrMatch - OSTmrTime; /* Determine how much time is left to timeout */
;;;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) {
;;;396 case OS_TMR_OPT_PERIODIC:
;;;397 if (ptmr->OSTmrDly == 0) {
;;;398 remain = ptmr->OSTmrPeriod;
;;;399 } else {
;;;400 remain = ptmr->OSTmrDly;
;;;401 }
;;;402 OSTmr_Unlock();
;;;403 *perr = OS_ERR_NONE;
;;;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);
;;;414
;;;415 case OS_TMR_STATE_COMPLETED: /* Only ONE-SHOT that timed out can be in this state */
;;;416 OSTmr_Unlock();
;;;417 *perr = OS_ERR_NONE;
;;;418 return (0);
;;;419
;;;420 case OS_TMR_STATE_UNUSED:
;;;421 OSTmr_Unlock();
;;;422 *perr = OS_ERR_TMR_INACTIVE;
;;;423 return (0);
;;;424
;;;425 default:
;;;426 OSTmr_Unlock();
;;;427 *perr = OS_ERR_TMR_INVALID_STATE;
;;;428 return (0);
;;;429 }
;;;430 }
000544 e12fff1e BX lr
|L1.1352|
000548 e3540000 CMP r4,#0
00054c 1a000003 BNE |L1.1376|
000550 e3a0008a MOV r0,#0x8a
000554 e5c50000 STRB r0,[r5,#0]
000558 e3a00000 MOV r0,#0
00055c eafffff7 B |L1.1344|
|L1.1376|
000560 e5d40000 LDRB r0,[r4,#0]
000564 e3500064 CMP r0,#0x64
000568 0a000003 BEQ |L1.1404|
00056c e3a00089 MOV r0,#0x89
000570 e5c50000 STRB r0,[r5,#0]
000574 e3a00000 MOV r0,#0
000578 eafffff0 B |L1.1344|
|L1.1404|
00057c e59f07f4 LDR r0,|L1.3448|
000580 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000584 e3500000 CMP r0,#0
000588 da000003 BLE |L1.1436|
00058c e3a0008b MOV r0,#0x8b
000590 e5c50000 STRB r0,[r5,#0]
000594 e3a00000 MOV r0,#0
000598 eaffffe8 B |L1.1344|
|L1.1436|
00059c ebfffffe BL OSTmr_Lock
0005a0 e5d40031 LDRB r0,[r4,#0x31]
0005a4 e3500000 CMP r0,#0
0005a8 0a00002f BEQ |L1.1644|
0005ac e3500001 CMP r0,#1
0005b0 0a00000d BEQ |L1.1516|
0005b4 e3500002 CMP r0,#2
0005b8 0a000026 BEQ |L1.1624|
0005bc e3500003 CMP r0,#3
0005c0 1a00002f BNE |L1.1668|
0005c4 e1a00000 MOV r0,r0
0005c8 e59f17b0 LDR r1,|L1.3456|
0005cc e5940014 LDR r0,[r4,#0x14]
0005d0 e5911000 LDR r1,[r1,#0] ; OSTmrTime
0005d4 e0406001 SUB r6,r0,r1
0005d8 ebfffffe BL OSTmr_Unlock
0005dc e3a00000 MOV r0,#0
0005e0 e5c50000 STRB r0,[r5,#0]
0005e4 e1a00006 MOV r0,r6
0005e8 eaffffd4 B |L1.1344|
|L1.1516|
0005ec e1a00000 MOV r0,r0
0005f0 e5d40030 LDRB r0,[r4,#0x30]
0005f4 e3500001 CMP r0,#1
0005f8 0a00000c BEQ |L1.1584|
0005fc e3500002 CMP r0,#2
000600 1a00000c BNE |L1.1592|
000604 e1a00000 MOV r0,r0
000608 e5940018 LDR r0,[r4,#0x18]
00060c e3500000 CMP r0,#0
000610 1a000001 BNE |L1.1564|
000614 e594601c LDR r6,[r4,#0x1c]
000618 ea000000 B |L1.1568|
|L1.1564|
00061c e5946018 LDR r6,[r4,#0x18]
|L1.1568|
000620 ebfffffe BL OSTmr_Unlock
000624 e3a00000 MOV r0,#0
000628 e5c50000 STRB r0,[r5,#0]
00062c ea000006 B |L1.1612|
|L1.1584|
000630 e1a00000 MOV r0,r0
000634 e1a00000 MOV r0,r0
|L1.1592|
000638 e5946018 LDR r6,[r4,#0x18]
00063c ebfffffe BL OSTmr_Unlock
000640 e3a00000 MOV r0,#0
000644 e5c50000 STRB r0,[r5,#0]
000648 e1a00000 MOV r0,r0
|L1.1612|
00064c e1a00000 MOV r0,r0
000650 e1a00006 MOV r0,r6
000654 eaffffb9 B |L1.1344|
|L1.1624|
000658 e1a00000 MOV r0,r0
00065c ebfffffe BL OSTmr_Unlock
000660 e3a00000 MOV r0,#0
000664 e5c50000 STRB r0,[r5,#0]
000668 eaffffb4 B |L1.1344|
|L1.1644|
00066c e1a00000 MOV r0,r0
000670 ebfffffe BL OSTmr_Unlock
000674 e3a00087 MOV r0,#0x87
000678 e5c50000 STRB r0,[r5,#0]
00067c e3a00000 MOV r0,#0
000680 eaffffae B |L1.1344|
|L1.1668|
000684 e1a00000 MOV r0,r0
000688 ebfffffe BL OSTmr_Unlock
00068c e3a0008d MOV r0,#0x8d
000690 e5c50000 STRB r0,[r5,#0]
000694 e3a00000 MOV r0,#0
000698 eaffffa8 B |L1.1344|
ENDP
OSTmrStateGet PROC
;;;461 INT8U *perr)
;;;462 {
00069c e92d4070 PUSH {r4-r6,lr}
0006a0 e1a04000 MOV r4,r0
0006a4 e1a06001 MOV r6,r1
;;;463 INT8U state;
;;;464
;;;465
;;;466 #if OS_ARG_CHK_EN > 0
;;;467 if (perr == (INT8U *)0) {
0006a8 e3560000 CMP r6,#0
0006ac 1a000002 BNE |L1.1724|
;;;468 return (0);
0006b0 e3a00000 MOV r0,#0
|L1.1716|
0006b4 e8bd4070 POP {r4-r6,lr}
;;;469 }
;;;470 if (ptmr == (OS_TMR *)0) {
;;;471 *perr = OS_ERR_TMR_INVALID;
;;;472 return (0);
;;;473 }
;;;474 #endif
;;;475 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
;;;476 *perr = OS_ERR_TMR_INVALID_TYPE;
;;;477 return (0);
;;;478 }
;;;479 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
;;;480 *perr = OS_ERR_TMR_ISR;
;;;481 return (0);
;;;482 }
;;;483 OSTmr_Lock();
;;;484 state = ptmr->OSTmrState;
;;;485 switch (state) {
;;;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;
;;;491 break;
;;;492
;;;493 default:
;;;494 *perr = OS_ERR_TMR_INVALID_STATE;
;;;495 break;
;;;496 }
;;;497 OSTmr_Unlock();
;;;498 return (state);
;;;499 }
0006b8 e12fff1e BX lr
|L1.1724|
0006bc e3540000 CMP r4,#0
0006c0 1a000003 BNE |L1.1748|
0006c4 e3a0008a MOV r0,#0x8a
0006c8 e5c60000 STRB r0,[r6,#0]
0006cc e3a00000 MOV r0,#0
0006d0 eafffff7 B |L1.1716|
|L1.1748|
0006d4 e5d40000 LDRB r0,[r4,#0]
0006d8 e3500064 CMP r0,#0x64
0006dc 0a000003 BEQ |L1.1776|
0006e0 e3a00089 MOV r0,#0x89
0006e4 e5c60000 STRB r0,[r6,#0]
0006e8 e3a00000 MOV r0,#0
0006ec eafffff0 B |L1.1716|
|L1.1776|
0006f0 e59f0680 LDR r0,|L1.3448|
0006f4 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
0006f8 e3500000 CMP r0,#0
0006fc da000003 BLE |L1.1808|
000700 e3a0008b MOV r0,#0x8b
000704 e5c60000 STRB r0,[r6,#0]
000708 e3a00000 MOV r0,#0
00070c eaffffe8 B |L1.1716|
|L1.1808|
000710 ebfffffe BL OSTmr_Lock
000714 e5d45031 LDRB r5,[r4,#0x31]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -