📄 guitimer.txt
字号:
;;;247 GUI_LOCK(); {
;;;248 GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
000006 f7fffffe BL GUI_ALLOC_h2p
;;;249 pObj->t0 = Delay;
;;;250 _Unlink(hObj);
00000a 6104 STR r4,[r0,#0x10]
00000c 4628 MOV r0,r5
00000e f7fffffe BL _Unlink
;;;251 _Link(hObj);
000012 4628 MOV r0,r5
000014 e8bd4070 POP {r4-r6,lr}
000018 f7ffbffe B.W _Link
;;;252 } GUI_UNLOCK();
;;;253 }
;;;254
ENDP
AREA ||i.GUI_TIMER_SetPeriod||, CODE, READONLY, ALIGN=1
GUI_TIMER_SetPeriod PROC
;;;214 */
;;;215 void GUI_TIMER_SetPeriod(GUI_TIMER_HANDLE hObj, GUI_TIMER_TIME Period) {
000000 b510 PUSH {r4,lr}
000002 460c MOV r4,r1
;;;216 GUI_LOCK(); {
;;;217 GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
000004 f7fffffe BL GUI_ALLOC_h2p
;;;218 pObj->Period = Period;
;;;219 } GUI_UNLOCK();
;;;220 }
000008 6144 STR r4,[r0,#0x14]
00000a bd10 POP {r4,pc}
;;;221
ENDP
AREA ||i.GUI_TIMER_SetTime||, CODE, READONLY, ALIGN=1
GUI_TIMER_SetTime PROC
;;;225 */
;;;226 void GUI_TIMER_SetTime(GUI_TIMER_HANDLE hObj, GUI_TIMER_TIME Time) {
000000 b510 PUSH {r4,lr}
000002 460c MOV r4,r1
;;;227 GUI_LOCK(); {
;;;228 GUI_TIMER_Obj* pObj = GUI_TIMER_H2P(hObj);
000004 f7fffffe BL GUI_ALLOC_h2p
;;;229 pObj->t0 = Time;
;;;230 } GUI_UNLOCK();
;;;231 }
000008 6104 STR r4,[r0,#0x10]
00000a bd10 POP {r4,pc}
;;;232
ENDP
AREA ||i._Link||, CODE, READONLY, ALIGN=2
_Link PROC
;;;99 */
;;;100 static void _Link(GUI_TIMER_HANDLE hNew) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 4607 MOV r7,r0
;;;101 GUI_TIMER_Obj* pNew = GUI_TIMER_H2P(hNew);
000006 f7fffffe BL GUI_ALLOC_h2p
;;;102 GUI_TIMER_Obj* pTimer;
;;;103 GUI_TIMER_Obj* pNext;
;;;104 GUI_TIMER_HANDLE hNext;
;;;105 if (hFirstTimer ==0) { /* List is empty, make it the only element */
00000a 4d14 LDR r5,|L9.92|
00000c 4604 MOV r4,r0 ;101
00000e f9b50000 LDRSH r0,[r5,#0] ; hFirstTimer
000012 b920 CBNZ r0,|L9.30|
;;;106 hFirstTimer = hNew;
000014 802f STRH r7,[r5,#0]
;;;107 pNew->hNext = 0;
000016 2000 MOVS r0,#0
000018 80a0 STRH r0,[r4,#4]
|L9.26|
;;;108 } else {
;;;109 GUI_TIMER_Obj* pFirstTimer = GUI_TIMER_H2P(hFirstTimer);
;;;110 /* Check if we have to make it the first element */
;;;111 if ((pNew->t0 - pFirstTimer->t0) <=0) {
;;;112 pNew->hNext = hFirstTimer;
;;;113 hFirstTimer = hNew;
;;;114 return;
;;;115 } else {
;;;116 GUI_TIMER_HANDLE hTimer = hFirstTimer;
;;;117 /* Put it into the list */
;;;118 do {
;;;119 pTimer = GUI_TIMER_H2P(hTimer);
;;;120 hNext = pTimer->hNext;
;;;121 if (hNext ==0)
;;;122 goto Append;
;;;123 pNext = GUI_TIMER_H2P(hNext);
;;;124 if ((pNew->t0 - pNext->t0) <=0) {
;;;125 pNew->hNext = hNext;
;;;126 pTimer->hNext= hNew;
;;;127 return;
;;;128 }
;;;129 } while(1);
;;;130 /* Put it at the end of the list */
;;;131 Append:
;;;132 pNew->hNext = hNext;
;;;133 pTimer->hNext= hNew;
;;;134 return;
;;;135 }
;;;136 }
;;;137 }
00001a e8bd81f0 POP {r4-r8,pc}
|L9.30|
00001e f7fffffe BL GUI_ALLOC_h2p
000022 6921 LDR r1,[r4,#0x10] ;111
000024 6900 LDR r0,[r0,#0x10] ;111
000026 1a08 SUBS r0,r1,r0 ;111
000028 2800 CMP r0,#0 ;111
00002a dc03 BGT |L9.52|
00002c 8828 LDRH r0,[r5,#0] ;112 ; hFirstTimer
00002e 80a0 STRH r0,[r4,#4] ;112
000030 802f STRH r7,[r5,#0] ;113
000032 e7f2 B |L9.26|
|L9.52|
000034 f9b58000 LDRSH r8,[r5,#0] ;116 ; hFirstTimer
|L9.56|
000038 4640 MOV r0,r8 ;119
00003a f7fffffe BL GUI_ALLOC_h2p
00003e f9b06004 LDRSH r6,[r0,#4] ;120
000042 4605 MOV r5,r0 ;119
000044 b13e CBZ r6,|L9.86|
000046 4630 MOV r0,r6 ;123
000048 f7fffffe BL GUI_ALLOC_h2p
00004c 6921 LDR r1,[r4,#0x10] ;124
00004e 6900 LDR r0,[r0,#0x10] ;124
000050 1a08 SUBS r0,r1,r0 ;124
000052 2800 CMP r0,#0 ;124
000054 dcf0 BGT |L9.56|
|L9.86|
000056 80a6 STRH r6,[r4,#4] ;132
000058 80af STRH r7,[r5,#4] ;133
00005a e7de B |L9.26|
;;;138
ENDP
|L9.92|
DCD ||.data||
AREA ||i._Unlink||, CODE, READONLY, ALIGN=2
_Unlink PROC
;;;68 */
;;;69 static void _Unlink(GUI_TIMER_HANDLE hTimer) {
000000 b570 PUSH {r4-r6,lr}
000002 4605 MOV r5,r0
;;;70 GUI_TIMER_Obj* pTimer = GUI_TIMER_H2P(hTimer);
000004 f7fffffe BL GUI_ALLOC_h2p
;;;71 GUI_TIMER_HANDLE hi;
;;;72 GUI_TIMER_Obj* pi;
;;;73 /* Check if it is the first element */
;;;74 if (hFirstTimer == hTimer) {
000008 490b LDR r1,|L10.56|
00000a 4604 MOV r4,r0 ;70
00000c f9b10000 LDRSH r0,[r1,#0] ; hFirstTimer
000010 42a8 CMP r0,r5
000012 d10d BNE |L10.48|
;;;75 hFirstTimer = pTimer->hNext;
000014 88a0 LDRH r0,[r4,#4]
000016 8008 STRH r0,[r1,#0]
;;;76 return;
;;;77 }
;;;78 hi = hFirstTimer;
;;;79 /* Try to find it in the list ... */
;;;80 while(hi) {
;;;81 /* GUI_ASSERT(hi<1000,0); */
;;;82 pi = GUI_TIMER_H2P(hi);
;;;83 if (pi->hNext == hTimer) {
;;;84 pi->hNext = pTimer->hNext;
;;;85 break;
;;;86 }
;;;87 hi = pi->hNext;
;;;88 }
;;;89 }
000018 bd70 POP {r4-r6,pc}
00001a bf00 NOP ;82
|L10.28|
00001c f7fffffe BL GUI_ALLOC_h2p
000020 4601 MOV r1,r0 ;82
000022 f9b00004 LDRSH r0,[r0,#4] ;83
000026 42a8 CMP r0,r5 ;83
000028 d102 BNE |L10.48|
00002a 88a0 LDRH r0,[r4,#4] ;84
00002c 8088 STRH r0,[r1,#4] ;84
00002e bd70 POP {r4-r6,pc}
|L10.48|
000030 2800 CMP r0,#0 ;80
000032 d1f3 BNE |L10.28|
000034 bd70 POP {r4-r6,pc}
;;;90
ENDP
000036 0000 DCW 0x0000
|L10.56|
DCD ||.data||
AREA ||.data||, DATA, ALIGN=1
hFirstTimer
000000 0000 DCB 0x00,0x00
_hActiveTimer
000002 0000 DCB 0x00,0x00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -