⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ggt_timer.lst

📁 ARM下的多任务操作系统源码:GogotoOS
💻 LST
📖 第 1 页 / 共 2 页
字号:
   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 + -