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

📄 ggt_kernel.lst

📁 ARM下的多任务操作系统源码:GogotoOS
💻 LST
📖 第 1 页 / 共 5 页
字号:
 00000008  E1A00002  MOV         R0,R2 ; pTask
 0000000C  E5801000  STR         R1,[R0,#0x0] ; pTask
  117:     pTask->pTskStack = NULL;
 00000010  E3A01000  MOV         R1,#0x0
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 14  

 00000014  E1A00002  MOV         R0,R2 ; pTask
 00000018  E5801004  STR         R1,[R0,#0x4]
  118:     pTask->pStack = NULL;
 0000001C  E3A01000  MOV         R1,#0x0
 00000020  E1A00002  MOV         R0,R2 ; pTask
 00000024  E5801008  STR         R1,[R0,#0x8]
  119:     pTask->PrioTick = 0;
 00000028  E3A01000  MOV         R1,#0x0
 0000002C  E1A00002  MOV         R0,R2 ; pTask
 00000030  E5801010  STR         R1,[R0,#0x10]
  120:     pTask->State = OS_STATE_TSK_NULL;
 00000034  E3A01000  MOV         R1,#0x0
 00000038  E1A00002  MOV         R0,R2 ; pTask
 0000003C  E5801014  STR         R1,[R0,#0x14]
  121:     pTask->StateValue = 0;
 00000040  E3A01000  MOV         R1,#0x0
 00000044  E1A00002  MOV         R0,R2 ; pTask
 00000048  E5801018  STR         R1,[R0,#0x18]
  122:     pTask->pMsg = NULL; 
 0000004C  E3A01000  MOV         R1,#0x0
 00000050  E1A00002  MOV         R0,R2 ; pTask
 00000054  E580101C  STR         R1,[R0,#0x1C]
  123: }
 00000058  E12FFF1E  BX          R14
 0000005C          ENDP ; 'OSTaskDataInit?A'


*** CODE SEGMENT '?PR?OSTaskUserCreate?A?GGT_Kernel':
  143: UINT32 OSTaskUserCreate(void *pTaskBody, const UINT32 Prio, const UINT32 Mode, const UINT32 TaskParam)
 00000000  E92D40F0  STMDB       R13!,{R4-R7,LR}
 00000004  E1A04003  MOV         R4,R3 ; TaskParam
 00000008  ---- Variable 'TaskParam' assigned to Register 'R4' ----
 00000008  E1A05002  MOV         R5,R2 ; Mode
 0000000C  ---- Variable 'Mode' assigned to Register 'R5' ----
 0000000C  E1A07001  MOV         R7,R1 ; Prio
 00000010  ---- Variable 'Prio' assigned to Register 'R7' ----
 00000010  E1A06000  MOV         R6,R0 ; pTaskBody
 00000014  ---- Variable 'pTaskBody' assigned to Register 'R6' ----
 00000014  E24DD004  SUB         R13,R13,#0x0004
  144: {
 00000018            ; SCOPE-START
  148:     OSIRQLock();
 00000018  E3A00002  MOV         R0,#0x2
 0000001C  EF000000  SWI         0x0 ; SWI_Handler?A
  151:     pTask = BoxAlloc(OSGetBoxTask());
 00000020  EBFFFFF6  BL          OSGetBoxTask?A  ; Targ=0x0
 00000024  EBFFFFF5  BL          BoxAlloc?A  ; Targ=0x0
 00000028  E58D0000  STR         R0,[R13,#0x0] ; pTask
  152:     OSTaskDataInit(pTask);
 0000002C  E59D0000  LDR         R0,[R13,#0x0] ; pTask
 00000030  EBFFFFF2  BL          OSTaskDataInit?A  ; Targ=0x0
  153:     pTask->PrioTick = OSTaskGetPrioTick(Prio);
 00000034  E1A00007  MOV         R0,R7 ; Prio
 00000038  EBFFFFF0  BL          OSTaskGetPrioTick?A  ; Targ=0x0
 0000003C  E59D1000  LDR         R1,[R13,#0x0] ; pTask
 00000040  E5810010  STR         R0,[R1,#0x10]
  155:     pTask->pStack = OSStackAlloc();
 00000044  EBFFFFED  BL          OSStackAlloc?A  ; Targ=0x0
 00000048  E59D1000  LDR         R1,[R13,#0x0] ; pTask
 0000004C  E5810008  STR         R0,[R1,#0x8]
  157:     pTask->pTskStack = OSStackInit(pTaskBody, pTask->pStack, Mode, TaskParam);
 00000050  E59D0000  LDR         R0,[R13,#0x0] ; pTask
 00000054  E5901008  LDR         R1,[R0,#0x8]
 00000058  E1A00006  MOV         R0,R6 ; pTaskBody
 0000005C  E1A02005  MOV         R2,R5 ; Mode
 00000060  E1A03004  MOV         R3,R4 ; TaskParam
 00000064  EBFFFFE5  BL          OSStackInit?A  ; Targ=0x0
 00000068  E59D1000  LDR         R1,[R13,#0x0] ; pTask
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 15  

 0000006C  E5810004  STR         R0,[R1,#0x4]
  162:     ListAppend((void *)(&pOSTskReady), (void *)pTask);
 00000070  E5100000  LDR         R0,=pOSTskReady ; pOSTskReady
 00000074  E59D1000  LDR         R1,[R13,#0x0] ; pTask
 00000078  EBFFFFE0  BL          ListAppend?A  ; Targ=0x0
  165:     OSIRQUnlock();
 0000007C  E3A00003  MOV         R0,#0x3
 00000080  EF000000  SWI         0x0 ; SWI_Handler?A
  167:     return(pTask->ID);
 00000084  E59D0000  LDR         R0,[R13,#0x0] ; pTask
 00000088  E590000C  LDR         R0,[R0,#0xC]
 0000008C            ; SCOPE-END
  168: }
 0000008C  E28DD004  ADD         R13,R13,#0x0004
 00000090  E8BD00F0  LDMIA       R13!,{R4-R7}
 00000094  E8BD0008  LDMIA       R13!,{R3}
 00000098  E12FFF13  BX          R3
 0000009C          ENDP ; 'OSTaskUserCreate?A'


*** CODE SEGMENT '?PR?OSTaskSelf?A?GGT_Kernel':
  187:     return(pOSTskNow->ID);
 00000000  E5100000  LDR         R0,=pOSTskNow ; pOSTskNow
 00000004  E5900000  LDR         R0,[R0,#0x0] ; pOSTskNow
 00000008  E590000C  LDR         R0,[R0,#0xC]
  188: }
 0000000C  E12FFF1E  BX          R14
 00000010          ENDP ; 'OSTaskSelf?A'


*** CODE SEGMENT '?PR?OSTaskKill?A?GGT_Kernel':
  205: void OSTaskKill(OS_ID TaskID)
 00000000  E92D4030  STMDB       R13!,{R4-R5,LR}
 00000004  E1A04000  MOV         R4,R0 ; TaskID
 00000008  ---- Variable 'TaskID' assigned to Register 'R4' ----
  206: {
 00000008            ; SCOPE-START
  209:     OSIRQLock();
 00000008  E3A00002  MOV         R0,#0x2
 0000000C  EF000000  SWI         0x0 ; SWI_Handler?A
  211:     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' ----
  213:     ListDelete((void *)(&pOSTskReady), (void *)pTask);
 00000028  E5100000  LDR         R0,=pOSTskReady ; pOSTskReady
 0000002C  E1A01005  MOV         R1,R5 ; pTask
 00000030  EBFFFFF2  BL          ListDelete?A  ; Targ=0x0
  214:     ListDelete((void *)(&pOSTskDelay), (void *)pTask);
 00000034  E5100000  LDR         R0,=pOSTskDelay ; pOSTskDelay
 00000038  E1A01005  MOV         R1,R5 ; pTask
 0000003C  EBFFFFEF  BL          ListDelete?A  ; Targ=0x0
  217:     BoxFree(OSGetBoxStack(), pTask->pStack);
 00000040  EBFFFFEE  BL          OSGetBoxStack?A  ; Targ=0x0
 00000044  E1A01005  MOV         R1,R5 ; pTask
 00000048  E5911008  LDR         R1,[R1,#0x8]
 0000004C  EBFFFFEB  BL          BoxFree?A  ; Targ=0x0
  218:     BoxFree(OSGetBoxTask(), pTask);
 00000050  EBFFFFEA  BL          OSGetBoxTask?A  ; Targ=0x0
 00000054  E1A01005  MOV         R1,R5 ; pTask
 00000058  EBFFFFE8  BL          BoxFree?A  ; Targ=0x0
  221:     if(pOSTskNow->ID == TaskID)
 0000005C  E5100000  LDR         R0,=pOSTskNow ; pOSTskNow
 00000060  E5900000  LDR         R0,[R0,#0x0] ; pOSTskNow
 00000064  E590100C  LDR         R1,[R0,#0xC]
 00000068  E1A00004  MOV         R0,R4 ; TaskID
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 16  

 0000006C  E1510000  CMP         R1,R0 ; TaskID
 00000070  1A000002  BNE         L_11  ; Targ=0x80
  224:         OSTaskIsNULLLoadDef();
 00000074  EBFFFFE1  BL          OSTaskIsNULLLoadDef?A  ; Targ=0x0
  226:         OSTaskSW();
 00000078  E3A00000  MOV         R0,#0x0
 0000007C  EF000000  SWI         0x0 ; SWI_Handler?A
  227:     }
 00000080          L_11:
  229:     OSIRQUnlock();
 00000080  E3A00003  MOV         R0,#0x3
 00000084  EF000000  SWI         0x0 ; SWI_Handler?A
 00000088            ; SCOPE-END
  230: }
 00000088  E8BD0030  LDMIA       R13!,{R4-R5}
 0000008C  E8BD0008  LDMIA       R13!,{R3}
 00000090  E12FFF13  BX          R3
 00000094          ENDP ; 'OSTaskKill?A'


*** CODE SEGMENT '?PR?OSTaskSetPrio?A?GGT_Kernel':
  248: void OSTaskSetPrio(OS_ID TaskID, UINT32 Prio)
 00000000  E92D4030  STMDB       R13!,{R4-R5,LR}
 00000004  E1A05001  MOV         R5,R1 ; Prio
 00000008  ---- Variable 'Prio' assigned to Register 'R5' ----
 00000008  E1A04000  MOV         R4,R0 ; TaskID
 0000000C  ---- Variable 'TaskID' assigned to Register 'R4' ----
  250:     if(0 == Prio)
 0000000C  E1A00005  MOV         R0,R5 ; Prio
 00000010  E3500000  CMP         R0,#0x0000 ; Prio
 00000014  1A000000  BNE         L_12  ; Targ=0x1C
  251:         Prio = 1;
 00000018  E3A05001  MOV         R5,#0x1
 0000001C          L_12:
  252:     if(255 < Prio)
 0000001C  E1A00005  MOV         R0,R5 ; Prio
 00000020  E35000FF  CMP         R0,#0x00FF ; Prio
 00000024  9A000000  BLS         L_13  ; Targ=0x2C
  253:         Prio = 255;
 00000028  E3A050FF  MOV         R5,#0xFF
 0000002C          L_13:
  254:     OSIRQLock();
 0000002C  E3A00002  MOV         R0,#0x2
 00000030  EF000000  SWI         0x0 ; SWI_Handler?A
  255:     pOSTask[TaskID -1].PrioTick = 256 - Prio;
 00000034  E1A00005  MOV         R0,R5 ; Prio
 00000038  E3A01C01  MOV         R1,#0x100
 0000003C  E0411000  SUB         R1,R1,R0 ; Prio
 00000040  E1A02004  MOV         R2,R4 ; TaskID
 00000044  E2422001  SUB         R2,R2,#0x0001 ; TaskID
 00000048  E1A02282  MOV         R2,R2,LSL #5
 0000004C  E5100000  LDR         R0,=pOSTask ; pOSTask
 00000050  E5900000  LDR         R0,[R0,#0x0] ; pOSTask
 00000054  E0800002  ADD         R0,R0,R2
 00000058  E5801010  STR         R1,[R0,#0x10]
  256:     OSIRQUnlock();
 0000005C  E3A00003  MOV         R0,#0x3
 00000060  EF000000  SWI         0x0 ; SWI_Handler?A
  257: }
 00000064  E8BD0030  LDMIA       R13!,{R4-R5}
 00000068  E8BD0008  LDMIA       R13!,{R3}
 0000006C  E12FFF13  BX          R3
 00000070          ENDP ; 'OSTaskSetPrio?A'


*** CODE SEGMENT '?PR?Resume?A?GGT_Kernel':
  274: BOOL Resume(OS_ID TaskID)
 00000000  E92D4070  STMDB       R13!,{R4-R6,LR}
 00000004  E1A05000  MOV         R5,R0 ; TaskID
 00000008  ---- Variable 'TaskID' assigned to Register 'R5' ----
ARM COMPILER V2.32a,  GGT_Kernel                                                           28/02/08  23:05:55  PAGE 17  

  275: {
 00000008            ; SCOPE-START
  279:     R = FALSE;
 00000008  E3A04000  MOV         R4,#0x0
 0000000C  ---- Variable 'R' assigned to Register 'R4' ----
  280:     OSIRQLock();
 0000000C  E3A00002  MOV         R0,#0x2
 00000010  EF000000  SWI         0x0 ; SWI_Handler?A
  282:     pTask = &(pOSTask[TaskID - 1]);
 00000014  E1A00005  MOV         R0,R5 ; TaskID
 00000018  E2400001  SUB         R0,R0,#0x0001 ; TaskID
 0000001C  E1A00280  MOV         R0,R0,LSL #5
 00000020  E5101000  LDR         R1,=pOSTask ; pOSTask
 00000024  E5915000  LDR         R5,[R1,#0x0] ; pOSTask
 00000028  E0855000  ADD         R5,R5,R0
 0000002C  ---- Variable 'pTask' assigned to Register 'R5' ----
  283:     if(OS_STATE_TSK_SUSPEND & pTask->State)
 0000002C  E1A00005  MOV         R0,R5 ; pTask
 00000030  E5900014  LDR         R0,[R0,#0x14]
 00000034  E3100101  TST         R0,#0x40000000
 00000038  0A000010  BEQ         L_14  ; Targ=0x80
  285:         pTask->State &= (~OS_STATE_TSK_SUSPEND);
 0000003C  E3C00101  BIC         R0,R0,#0x40000000
 00000040  E1A01005  MOV         R1,R5 ; pTask
 00000044  E5810014  STR         R0,[R1,#0x14]
  287:         if(pTask->State & OS_STATE_TSK_DELAY)
 00000048  E1A00005  MOV         R0,R5 ; pTask
 0000004C  E5906014  LDR         R6,[R0,#0x14]
 00000050  E3160002  TST         R6,#0x0002
 00000054  0A000003  BEQ         L_15  ; Targ=0x68
  288:             ListAppend((void *)(&pOSTskDelay), (void *)pTask);
 00000058  E5100000  LDR         R0,=pOSTskDelay ; pOSTskDelay
 0000005C  E1A01005  MOV         R1,R5 ; pTask
 00000060  EBFFFFE6  BL          ListAppend?A  ; Targ=0x0
 00000064  EA000004  B           L_16  ; Targ=0x7C
 00000068          L_15:
  291:         if(pTask->State & OS_STATE_TSK_READY)
 00000068  E3160001  TST         R6,#0x0001
 0000006C  0A000002  BEQ         L_16  ; Targ=0x7C
  292:             ListAppend((void *)(&pOSTskReady), (void *)pTask);
 00000070  E5100000  LDR         R0,=pOSTskReady ; pOSTskReady
 00000074  E1A01005  MOV         R1,R5 ; pTask
 00000078  EBFFFFE0  BL          ListAppend?A  ; Targ=0x0
 0000007C          L_16:
  293:         R = TRUE;
 0000007C  E3A04001  MOV         R4,#0x1
  294:     }
 00000080          L_14:
  295:     OSIRQUnlock();
 00000080  E3A00003  MOV         R0,#0x3
 00000084  EF000000  SWI         0x0 ; SWI_Handler?A
  297:     return(R);
 00000088  E1A00004  MOV         R0,R4 ; R
 0000008C            ; SCOPE-END
  298: }
 0000008C  E8BD0070  LDMIA       R13!,{R4-R6}
 00000090  E8BD0008  LDMIA       R13!,{R3}
 00000094  E12FFF13  BX          R3
 00000098          ENDP ; 'Resume?A'


*** CODE SEGMENT '?PR?Suspend?A?GGT_Kernel':
  315: void Suspend(OS_ID TaskID)

⌨️ 快捷键说明

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