📄 ggt_timer.lst
字号:
53: {
00000004 ; SCOPE-START
56: pOSBoxTimer = (_pOSBoxTimer)OSGetBoxTimer();
00000004 EBFFFFFD BL OSGetBoxTimer?A ; Targ=0x0
00000008 E5101000 LDR R1,=pOSBoxTimer ; pOSBoxTimer
0000000C E5810000 STR R0,[R1,#0x0] ; pOSBoxTimer
57: BoxInit(pOSBoxTimer, sizeof(_BoxHead) + OSGetSumTimer() * sizeof(_OSTimer), sizeof(_OSTimer));
00000010 EBFFFFFA BL OSGetSumTimer?A ; Targ=0x0
00000014 E3A01014 MOV R1,#0x14
00000018 E0010190 MUL R1,R0,R1 ; OSGetSumTimer?A
0000001C E2811004 ADD R1,R1,#0x0004
00000020 E5100000 LDR R0,=pOSBoxTimer ; pOSBoxTimer
00000024 E5900000 LDR R0,[R0,#0x0] ; pOSBoxTimer
00000028 E3A02014 MOV R2,#0x14
0000002C EBFFFFF3 BL BoxInit?A ; Targ=0x0
59: for(i = 0; i < OSGetSumTimer(); i++)
00000030 E3A04000 MOV R4,#0x0
00000034 ---- Variable 'i' assigned to Register 'R4' ----
00000034 EA000009 B L_3 ; Targ=0x60
00000038 L_4:
60: pOSBoxTimer->Timer[i].ID = i + 1;
00000038 E1A00004 MOV R0,R4 ; i
0000003C E2800001 ADD R0,R0,#0x0001 ; i
00000040 E1A02004 MOV R2,R4 ; i
00000044 E3A01014 MOV R1,#0x14
00000048 E0020291 MUL R2,R1,R2
0000004C E5101000 LDR R1,=pOSBoxTimer ; pOSBoxTimer
00000050 E5911000 LDR R1,[R1,#0x0] ; pOSBoxTimer
00000054 E0811002 ADD R1,R1,R2
ARM COMPILER V2.32a, GGT_Timer 28/02/08 23:05:55 PAGE 5
00000058 E5810008 STR R0,[R1,#0x8]
0000005C E2844001 ADD R4,R4,#0x0001 ; i
00000060 L_3:
00000060 EBFFFFE6 BL OSGetSumTimer?A ; Targ=0x0
00000064 E1A01004 MOV R1,R4 ; i
00000068 E1510000 CMP R1,R0 ; i
0000006C BAFFFFF1 BLT L_4 ; Targ=0x38
00000070 ; SCOPE-END
61: }
00000070 E8BD0010 LDMIA R13!,{R4}
00000074 E8BD0008 LDMIA R13!,{R3}
00000078 E12FFF13 BX R3
0000007C ENDP ; 'OSTimerInit?A'
*** CODE SEGMENT '?PR?OSTimerSet?A?GGT_Timer':
79: UINT32 OSTimerSet(const OS_ID TaskID, const UINT32 Time)
00000000 E92D40F0 STMDB R13!,{R4-R7,LR}
00000004 E1A06001 MOV R6,R1 ; Time
00000008 ---- Variable 'Time' assigned to Register 'R6' ----
00000008 E1A07000 MOV R7,R0 ; TaskID
0000000C ---- Variable 'TaskID' assigned to Register 'R7' ----
0000000C ---- Variable 'R' assigned to Register 'R4' ----
80: {
0000000C ; SCOPE-START
84: OSIRQLock();
0000000C E3A00002 MOV R0,#0x2
00000010 EF000000 SWI 0x0 ; SWI_Handler?A
86: pTimer = BoxAlloc(pOSBoxTimer);
00000014 E5100000 LDR R0,=pOSBoxTimer ; pOSBoxTimer
00000018 E5900000 LDR R0,[R0,#0x0] ; pOSBoxTimer
0000001C EBFFFFF7 BL BoxAlloc?A ; Targ=0x0
00000020 E1A05000 MOV R5,R0 ; pTimer
00000024 ---- Variable 'pTimer' assigned to Register 'R5' ----
87: if(pTimer)
00000024 E1A00005 MOV R0,R5 ; pTimer
00000028 E3500000 CMP R0,#0x0000 ; pTimer
0000002C 0A000014 BEQ L_6 ; Targ=0x84
89: pTimer->TaskID = TaskID;
00000030 E1A00007 MOV R0,R7 ; TaskID
00000034 E1A01005 MOV R1,R5 ; pTimer
00000038 E5810008 STR R0,[R1,#0x8]
90: pTimer->Time = (Time * OSGetTick()) / 1000;
0000003C EBFFFFEF BL OSGetTick?A ; Targ=0x0
00000040 E1A01006 MOV R1,R6 ; Time
00000044 E0000091 MUL R0,R1,R0 ; Time
00000048 E3A01FFA MOV R1,#0x3E8
0000004C EBFFFFEB BL ?C?UDIV?A ; Targ=0x0 ; ?C?UDIV?A
00000050 E1A00001 MOV R0,R1
00000054 E1A01005 MOV R1,R5 ; pTimer
00000058 E581000C STR R0,[R1,#0xC]
91: pTimer->Timeout = pTimer->Time;
0000005C E1A00005 MOV R0,R5 ; pTimer
00000060 E590000C LDR R0,[R0,#0xC]
00000064 E1A01005 MOV R1,R5 ; pTimer
00000068 E5810010 STR R0,[R1,#0x10]
92: R = pTimer->ID;
0000006C E1A00005 MOV R0,R5 ; pTimer
00000070 E5904004 LDR R4,[R0,#0x4]
93: ListAppend(&pOSTimer, pTimer);
00000074 E5100000 LDR R0,=pOSTimer ; pOSTimer
00000078 E1A01005 MOV R1,R5 ; pTimer
0000007C EBFFFFDF BL ListAppend?A ; Targ=0x0
94: }else
00000080 EA000000 B L_7 ; Targ=0x88
00000084 L_6:
95: R = 0;
00000084 E3A04000 MOV R4,#0x0
ARM COMPILER V2.32a, GGT_Timer 28/02/08 23:05:55 PAGE 6
00000088 L_7:
97: OSIRQUnlock();
00000088 E3A00003 MOV R0,#0x3
0000008C EF000000 SWI 0x0 ; SWI_Handler?A
99: return(R);
00000090 E1A00004 MOV R0,R4 ; R
00000094 ; SCOPE-END
100: }
00000094 E8BD00F0 LDMIA R13!,{R4-R7}
00000098 E8BD0008 LDMIA R13!,{R3}
0000009C E12FFF13 BX R3
000000A0 ENDP ; 'OSTimerSet?A'
*** CODE SEGMENT '?PR?OSTimerCheck?A?GGT_Timer':
117: void OSTimerCheck(void)
00000000 E92D4010 STMDB R13!,{R4,LR}
118: {
00000004 ; SCOPE-START
121: pTimer = pOSTimer;
00000004 E5100000 LDR R0,=pOSTimer ; pOSTimer
00000008 E5904000 LDR R4,[R0,#0x0] ; pOSTimer
0000000C ---- Variable 'pTimer' assigned to Register 'R4' ----
123: while(pTimer)
0000000C EA000015 B L_9 ; Targ=0x68
00000010 L_11:
125: (pTimer->Timeout)--;
00000010 E1A00004 MOV R0,R4 ; pTimer
00000014 E2800010 ADD R0,R0,#0x0010 ; pTimer
00000018 E5901000 LDR R1,[R0,#0x0]
0000001C E2411001 SUB R1,R1,#0x0001
00000020 E5801000 STR R1,[R0,#0x0]
126: if(!pTimer->Timeout)
00000024 E1A00004 MOV R0,R4 ; pTimer
00000028 E5900010 LDR R0,[R0,#0x10]
0000002C E3500000 CMP R0,#0x0000
00000030 1A00000A BNE L_13 ; Targ=0x60
128: pTimer->Timeout = pTimer->Time;
00000034 E1A00004 MOV R0,R4 ; pTimer
00000038 E590000C LDR R0,[R0,#0xC]
0000003C E1A01004 MOV R1,R4 ; pTimer
00000040 E5810010 STR R0,[R1,#0x10]
129: OSTaskMsgPost(pTimer->TaskID, OS_MSG_TIMER, pTimer->ID, 0);
00000044 E1A00004 MOV R0,R4 ; pTimer
00000048 E5900008 LDR R0,[R0,#0x8]
0000004C E1A01004 MOV R1,R4 ; pTimer
00000050 E5912004 LDR R2,[R1,#0x4]
00000054 E3A01901 MOV R1,#0x4000
00000058 E3A03000 MOV R3,#0x0
0000005C EBFFFFE7 BL OSTaskMsgPost?A ; Targ=0x0
130: }
00000060 L_13:
131: pTimer = pTimer->pNext;
00000060 E1A00004 MOV R0,R4 ; pTimer
00000064 E5904000 LDR R4,[R0,#0x0] ; pTimer
132: }
00000068 L_9:
00000068 E1A00004 MOV R0,R4 ; pTimer
0000006C E3500000 CMP R0,#0x0000 ; pTimer
00000070 1AFFFFE6 BNE L_11 ; Targ=0x10
00000074 ; SCOPE-END
133: }
00000074 E8BD0010 LDMIA R13!,{R4}
00000078 E8BD0008 LDMIA R13!,{R3}
0000007C E12FFF13 BX R3
00000080 ENDP ; 'OSTimerCheck?A'
*** CODE SEGMENT '?PR?OSTimerKill?A?GGT_Timer':
150: void OSTimerKill(const UINT32 TimerID)
ARM COMPILER V2.32a, GGT_Timer 28/02/08 23:05:55 PAGE 7
00000000 E92D4010 STMDB R13!,{R4,LR}
00000004 E1A04000 MOV R4,R0 ; TimerID
00000008 ---- Variable 'TimerID' assigned to Register 'R4' ----
151: {
00000008 ; SCOPE-START
154: OSIRQLock();
00000008 E3A00002 MOV R0,#0x2
0000000C EF000000 SWI 0x0 ; SWI_Handler?A
156: pTimer = &(pOSBoxTimer->Timer[TimerID - 1]);
00000010 E1A00004 MOV R0,R4 ; TimerID
00000014 E2400001 SUB R0,R0,#0x0001 ; TimerID
00000018 E3A01014 MOV R1,#0x14
0000001C E0000091 MUL R0,R1,R0
00000020 E5101000 LDR R1,=pOSBoxTimer ; pOSBoxTimer
00000024 E5914000 LDR R4,[R1,#0x0] ; pOSBoxTimer
00000028 E0844000 ADD R4,R4,R0
0000002C E2844004 ADD R4,R4,#0x0004
00000030 ---- Variable 'pTimer' assigned to Register 'R4' ----
157: ListDelete(pOSTimer, pTimer);
00000030 E5100000 LDR R0,=pOSTimer ; pOSTimer
00000034 E5900000 LDR R0,[R0,#0x0] ; pOSTimer
00000038 E1A01004 MOV R1,R4 ; pTimer
0000003C EBFFFFEF BL ListDelete?A ; Targ=0x0
158: BoxFree(pOSBoxTimer, pTimer);
00000040 E5100000 LDR R0,=pOSBoxTimer ; pOSBoxTimer
00000044 E5900000 LDR R0,[R0,#0x0] ; pOSBoxTimer
00000048 E1A01004 MOV R1,R4 ; pTimer
0000004C EBFFFFEB BL BoxFree?A ; Targ=0x0
160: OSIRQUnlock();
00000050 E3A00003 MOV R0,#0x3
00000054 EF000000 SWI 0x0 ; SWI_Handler?A
00000058 ; SCOPE-END
161: }
00000058 E8BD0010 LDMIA R13!,{R4}
0000005C E8BD0008 LDMIA R13!,{R3}
00000060 E12FFF13 BX R3
00000064 ENDP ; 'OSTimerKill?A'
Module Information Static
----------------------------------
code size = ------
data size = 8
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -