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

📄 ggt_kernel.lst

📁 ARM下的多任务操作系统源码:GogotoOS
💻 LST
📖 第 1 页 / 共 5 页
字号:
 00000000  E92D4030  STMDB       R13!,{R4-R5,LR}
 00000004  E1A04000  MOV         R4,R0 ; TaskID
 00000008  ---- Variable 'TaskID' assigned to Register 'R4' ----
  316: {
 00000008            ; SCOPE-START
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 18  

  319:     OSIRQLock();
 00000008  E3A00002  MOV         R0,#0x2
 0000000C  EF000000  SWI         0x0 ; SWI_Handler?A
  321:     pTask = &(pOSTask[TaskID - 1]);
 00000010  E1A00004  MOV         R0,R4 ; TaskID
 00000014  E2400001  SUB         R0,R0,#0x0001 ; TaskID
 00000018  E1A00280  MOV         R0,R0,LSL #5
 0000001C  E5101000  LDR         R1,=pOSTask ; pOSTask
 00000020  E5915000  LDR         R5,[R1,#0x0] ; pOSTask
 00000024  E0855000  ADD         R5,R5,R0
 00000028  ---- Variable 'pTask' assigned to Register 'R5' ----
  322:     pTask->State |= OS_STATE_TSK_SUSPEND;
 00000028  E1A00005  MOV         R0,R5 ; pTask
 0000002C  E5900014  LDR         R0,[R0,#0x14]
 00000030  E3800101  ORR         R0,R0,#0x40000000
 00000034  E1A01005  MOV         R1,R5 ; pTask
 00000038  E5810014  STR         R0,[R1,#0x14]
  323:     ListDelete((void *)(&pOSTskReady), (void *)pTask);
 0000003C  E5100000  LDR         R0,=pOSTskReady ; pOSTskReady
 00000040  E1A01005  MOV         R1,R5 ; pTask
 00000044  EBFFFFED  BL          ListDelete?A  ; Targ=0x0
  324:     ListDelete((void *)(&pOSTskDelay), (void *)pTask);
 00000048  E5100000  LDR         R0,=pOSTskDelay ; pOSTskDelay
 0000004C  E1A01005  MOV         R1,R5 ; pTask
 00000050  EBFFFFEA  BL          ListDelete?A  ; Targ=0x0
  326:     if(pOSTskNow->ID == TaskID)
 00000054  E5100000  LDR         R0,=pOSTskNow ; pOSTskNow
 00000058  E5900000  LDR         R0,[R0,#0x0] ; pOSTskNow
 0000005C  E590100C  LDR         R1,[R0,#0xC]
 00000060  E1A00004  MOV         R0,R4 ; TaskID
 00000064  E1510000  CMP         R1,R0 ; TaskID
 00000068  1A000002  BNE         L_19  ; Targ=0x78
  328:         OSTaskIsNULLLoadDef();
 0000006C  EBFFFFE3  BL          OSTaskIsNULLLoadDef?A  ; Targ=0x0
  329:         OSTaskSW();
 00000070  E3A00000  MOV         R0,#0x0
 00000074  EF000000  SWI         0x0 ; SWI_Handler?A
  330:     }
 00000078          L_19:
  332:     OSIRQUnlock();
 00000078  E3A00003  MOV         R0,#0x3
 0000007C  EF000000  SWI         0x0 ; SWI_Handler?A
 00000080            ; SCOPE-END
  333: }
 00000080  E8BD0030  LDMIA       R13!,{R4-R5}
 00000084  E8BD0008  LDMIA       R13!,{R3}
 00000088  E12FFF13  BX          R3
 0000008C          ENDP ; 'Suspend?A'


*** CODE SEGMENT '?PR?OSTaskPushDelay?A?GGT_Kernel':
  350: void OSTaskPushDelay(_pOSTask pTask)
 00000000  E92D4000  STMDB       R13!,{LR}
 00000004  E1A02000  MOV         R2,R0 ; pTask
 00000008  ---- Variable 'pTask' assigned to Register 'R2' ----
  352:     pTask->State = OS_STATE_TSK_DELAY;
 00000008  E3A01002  MOV         R1,#0x2
 0000000C  E1A00002  MOV         R0,R2 ; pTask
 00000010  E5801014  STR         R1,[R0,#0x14]
  353:     pTask->StateValue = pTask->PrioTick;
 00000014  E1A00002  MOV         R0,R2 ; pTask
 00000018  E5901010  LDR         R1,[R0,#0x10]
 0000001C  E1A00002  MOV         R0,R2 ; pTask
 00000020  E5801018  STR         R1,[R0,#0x18]
  354:     ListAppend((void *)(&pOSTskDelay), (void *)pTask);
 00000024  E5100000  LDR         R0,=pOSTskDelay ; pOSTskDelay
 00000028  E1A01002  MOV         R1,R2 ; pTask
 0000002C  EBFFFFF3  BL          ListAppend?A  ; Targ=0x0
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 19  

  355: }
 00000030  E8BD0008  LDMIA       R13!,{R3}
 00000034  E12FFF13  BX          R3
 00000038          ENDP ; 'OSTaskPushDelay?A'


*** CODE SEGMENT '?PR?OSTaskPushReady?A?GGT_Kernel':
  372: void OSTaskPushReady(_pOSTask pTask)
 00000000  E92D4000  STMDB       R13!,{LR}
 00000004  E1A02000  MOV         R2,R0 ; pTask
 00000008  ---- Variable 'pTask' assigned to Register 'R2' ----
  374:     pTask->State = OS_STATE_TSK_READY;
 00000008  E3A01001  MOV         R1,#0x1
 0000000C  E1A00002  MOV         R0,R2 ; pTask
 00000010  E5801014  STR         R1,[R0,#0x14]
  375:     ListAppend((void *)(&pOSTskReady), (void *)pTask);
 00000014  E5100000  LDR         R0,=pOSTskReady ; pOSTskReady
 00000018  E1A01002  MOV         R1,R2 ; pTask
 0000001C  EBFFFFF7  BL          ListAppend?A  ; Targ=0x0
  376: }
 00000020  E8BD0008  LDMIA       R13!,{R3}
 00000024  E12FFF13  BX          R3
 00000028          ENDP ; 'OSTaskPushReady?A'


*** CODE SEGMENT '?PR?OSTaskDelay?A?GGT_Kernel':
  393: void OSTaskDelay(UINT32 Time)
 00000000  E92D4010  STMDB       R13!,{R4,LR}
 00000004  E1A04000  MOV         R4,R0 ; Time
 00000008  ---- Variable 'Time' assigned to Register 'R4' ----
  395:     OSIRQLock();                
 00000008  E3A00002  MOV         R0,#0x2
 0000000C  EF000000  SWI         0x0 ; SWI_Handler?A
  397:     OSTaskPushDelay(pOSTskNow);
 00000010  E5100000  LDR         R0,=pOSTskNow ; pOSTskNow
 00000014  E5900000  LDR         R0,[R0,#0x0] ; pOSTskNow
 00000018  EBFFFFF8  BL          OSTaskPushDelay?A  ; Targ=0x0
  398:     pOSTskNow->StateValue = (Time * OSGetTick()) / 1000;
 0000001C  EBFFFFF7  BL          OSGetTick?A  ; Targ=0x0
 00000020  E1A01004  MOV         R1,R4 ; Time
 00000024  E0000091  MUL         R0,R1,R0 ; Time
 00000028  E3A01FFA  MOV         R1,#0x3E8
 0000002C  EBFFFFF3  BL          ?C?UDIV?A  ; Targ=0x0 ; ?C?UDIV?A
 00000030  E1A00001  MOV         R0,R1
 00000034  E5101000  LDR         R1,=pOSTskNow ; pOSTskNow
 00000038  E5911000  LDR         R1,[R1,#0x0] ; pOSTskNow
 0000003C  E5810018  STR         R0,[R1,#0x18]
  399:     OSTaskIsNULLLoadDef();
 00000040  EBFFFFEE  BL          OSTaskIsNULLLoadDef?A  ; Targ=0x0
  400:     OSTaskSW();
 00000044  E3A00000  MOV         R0,#0x0
 00000048  EF000000  SWI         0x0 ; SWI_Handler?A
  402:     OSIRQUnlock();
 0000004C  E3A00003  MOV         R0,#0x3
 00000050  EF000000  SWI         0x0 ; SWI_Handler?A
  403: }
 00000054  E8BD0010  LDMIA       R13!,{R4}
 00000058  E8BD0008  LDMIA       R13!,{R3}
 0000005C  E12FFF13  BX          R3
 00000060          ENDP ; 'OSTaskDelay?A'


*** CODE SEGMENT '?PR?OSTaskDispatch?A?GGT_Kernel':
  420: void OSTaskDispatch(void)
 00000000  E92D4030  STMDB       R13!,{R4-R5,LR}
  421: {
 00000004            ; SCOPE-START
  424:     pTask = pOSTskDelay;
 00000004  E5100000  LDR         R0,=pOSTskDelay ; pOSTskDelay
 00000008  E5904000  LDR         R4,[R0,#0x0] ; pOSTskDelay
 0000000C  ---- Variable 'pTask' assigned to Register 'R4' ----
  425:     while(pTask)
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 20  

 0000000C  EA000013  B           L_20  ; Targ=0x60
 00000010          L_22:
  427:         pTask->StateValue--;        
 00000010  E1A00004  MOV         R0,R4 ; pTask
 00000014  E2800018  ADD         R0,R0,#0x0018 ; pTask
 00000018  E5901000  LDR         R1,[R0,#0x0]
 0000001C  E2411001  SUB         R1,R1,#0x0001
 00000020  E5801000  STR         R1,[R0,#0x0]
  428:         if(pTask->StateValue <= 0)
 00000024  E1A00004  MOV         R0,R4 ; pTask
 00000028  E5900018  LDR         R0,[R0,#0x18]
 0000002C  E3500000  CMP         R0,#0x0000
 00000030  CA000008  BGT         L_24  ; Targ=0x58
  430:             p = pTask;
 00000034  E1A05004  MOV         R5,R4 ; pTask
 00000038  ---- Variable 'p' assigned to Register 'R5' ----
  431:             pTask = pTask->pNext;
 00000038  E1A00004  MOV         R0,R4 ; pTask
 0000003C  E5904000  LDR         R4,[R0,#0x0] ; pTask
  432:             ListDelete((void *)(&pOSTskDelay), (void *)p);
 00000040  E5100000  LDR         R0,=pOSTskDelay ; pOSTskDelay
 00000044  E1A01005  MOV         R1,R5 ; p
 00000048  EBFFFFEC  BL          ListDelete?A  ; Targ=0x0
  433:             OSTaskPushReady(p);
 0000004C  E1A00005  MOV         R0,R5 ; p
 00000050  EBFFFFEA  BL          OSTaskPushReady?A  ; Targ=0x0
  434:         }else
 00000054  EA000001  B           L_20  ; Targ=0x60
 00000058          L_24:
  435:             pTask = pTask->pNext;
 00000058  E1A00004  MOV         R0,R4 ; pTask
 0000005C  E5904000  LDR         R4,[R0,#0x0] ; pTask
  436:     }
 00000060          L_20:
 00000060  E1A00004  MOV         R0,R4 ; pTask
 00000064  E3500000  CMP         R0,#0x0000 ; pTask
 00000068  1AFFFFE8  BNE         L_22  ; Targ=0x10
  439:     if(pOSTskReady)
 0000006C  E5100000  LDR         R0,=pOSTskReady ; pOSTskReady
 00000070  E5900000  LDR         R0,[R0,#0x0] ; pOSTskReady
 00000074  E3500000  CMP         R0,#0x0000
 00000078  0A000003  BEQ         L_26  ; Targ=0x8C
  440:         OSTaskPushDelay(pOSTskNow);
 0000007C  E5100000  LDR         R0,=pOSTskNow ; pOSTskNow
 00000080  E5900000  LDR         R0,[R0,#0x0] ; pOSTskNow
 00000084  EBFFFFDD  BL          OSTaskPushDelay?A  ; Targ=0x0
 00000088  EA000002  B           L_27  ; Targ=0x98
 0000008C          L_26:
  442:         OSTaskPushReady(pOSTskNow);
 0000008C  E5100000  LDR         R0,=pOSTskNow ; pOSTskNow
 00000090  E5900000  LDR         R0,[R0,#0x0] ; pOSTskNow
 00000094  EBFFFFD9  BL          OSTaskPushReady?A  ; Targ=0x0
 00000098          L_27:
 00000098            ; SCOPE-END
  443: }
 00000098  E8BD0030  LDMIA       R13!,{R4-R5}
 0000009C  E8BD0008  LDMIA       R13!,{R3}
 000000A0  E12FFF13  BX          R3
 000000A4          ENDP ; 'OSTaskDispatch?A'


*** CODE SEGMENT '?PR?OSTaskIsNULLLoadDef?A?GGT_Kernel':
  460: void OSTaskIsNULLLoadDef(void)
 00000000  E92D4000  STMDB       R13!,{LR}
  462:     if(!pOSTskReady)
 00000004  E5100000  LDR         R0,=pOSTskReady ; pOSTskReady
 00000008  E5900000  LDR         R0,[R0,#0x0] ; pOSTskReady
 0000000C  E3500000  CMP         R0,#0x0000
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 21  

 00000010  1A000006  BNE         L_28  ; Targ=0x30
  464:         ListDelete((void *)(&pOSTskDelay), (void *)pOSTskMain);
 00000014  E5100000  LDR         R0,=pOSTskDelay ; pOSTskDelay
 00000018  E5101000  LDR         R1,=pOSTskMain ; pOSTskMain
 0000001C  E5911000  LDR         R1,[R1,#0x0] ; pOSTskMain
 00000020  EBFFFFF6  BL          ListDelete?A  ; Targ=0x0
  465:         OSTaskPushReady(pOSTskMain);
 00000024  E5100000  LDR         R0,=pOSTskMain ; pOSTskMain
 00000028  E5900000  LDR         R0,[R0,#0x0] ; pOSTskMain
 0000002C  EBFFFFF3  BL          OSTaskPushReady?A  ; Targ=0x0
  466:     }
 00000030          L_28:
  467: }
 00000030  E8BD0008  LDMIA       R13!,{R3}
 00000034  E12FFF13  BX          R3
 00000038          ENDP ; 'OSTaskIsNULLLoadDef?A'


*** CODE SEGMENT '?PR?OSTaskInit?A?GGT_Kernel':
  484: void OSTaskInit(void)
 00000000  E92D4010  STMDB       R13!,{R4,LR}
  485: {
 00000004            ; SCOPE-START
  488:     pOSBoxMsg = (UINT32 *)OSGetBoxMsg();
 00000004  EBFFFFFD  BL          OSGetBoxMsg?A  ; Targ=0x0
 00000008  E5101000  LDR         R1,=pOSBoxMsg ; pOSBoxMsg
 0000000C  E5810000  STR         R0,[R1,#0x0] ; pOSBoxMsg
  489:     BoxInit(pOSBoxMsg, sizeof(_BoxHead) + OSGetSumMsg() * sizeof(_OSMsg), sizeof(_OSMsg));
 00000010  EBFFFFFA  BL          OSGetSumMsg?A  ; Targ=0x0
 00000014  E1A01200  MOV         R1,R0,LSL #4 ; OSGetSumMsg?A
 00000018  E2811004  ADD         R1,R1,#0x0004
 0000001C  E5100000  LDR         R0,=pOSBoxMsg ; pOSBoxMsg
 00000020  E5900000  LDR         R0,[R0,#0x0] ; pOSBoxMsg
 00000024  E3A02010  MOV         R2,#0x10
 00000028  EBFFFFF4  BL          BoxInit?A  ; Targ=0x0
  491:     pOSTask = &(((_pOSBoxTask)OSGetBoxTask())->Task[0]);
 0000002C  EBFFFFF3  BL          OSGetBoxTask?A  ; Targ=0x0
 00000030  E2801004  ADD         R1,R0,#0x0004 ; OSGetBoxTask?A
 00000034  E5100000  LDR         R0,=pOSTask ; pOSTask
 00000038  E5801000  STR         R1,[R0,#0x0] ; pOSTask
  493:     for(i = 0; i < OSGetSumTask(); i++)
 0000003C  E3A04000  MOV         R4,#0x0
 00000040  ---- Variable 'i' assigned to Register 'R4' ----
 00000040  EA000008  B           L_31  ; Targ=0x68
 00000044          L_32:
  494:         pOSTask[i].ID = i + 1;
 00000044  E1A00004  MOV         R0,R4 ; i
 00000048  E2800001  ADD         R0,R0,#0x0001 ; i
 0000004C  E1A02004  MOV         R2,R4 ; i
 00000050  E1A02282  MOV         R2,R2,LSL #5 ; i
 00000054  E5101000  LDR         R1,=pOSTask ; pOSTask
 00000058  E5911000  LDR         R1,[R1,#0x0] ; pOSTask
 0000005C  E0811002  ADD         R1,R1,R2
 00000060  E581000C  STR         R0,[R1,#0xC]
 00000064  E2844001  ADD         R4,R4,#0x0001 ; i
 00000068          L_31:
 00000068  EBFFFFE4  BL          OSGetSumTask?A  ; Targ=0x0
 0000006C  E1A01004  MOV         R1,R4 ; i
 00000070  E1510000  CMP         R1,R0 ; i
 00000074  BAFFFFF2  BLT         L_32  ; Targ=0x44
  496:     BoxInit(OSGe

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -