os_cpu_a.lst

来自「称植到lpc2124上的UCOS2.85版 是本人初学移植和ARM的成果 可」· LST 代码 · 共 825 行 · 第 1/3 页

LST
825
字号
  177 00000034         ;              OSTCBHighRdy  points to the OS_TCB of the
                        task to resume
  178 00000034         ;*******************************************************
                       **************************************************
  179 00000034                 IF               (ASM_KEILRV > 0)
  180 00000034                 PRESERVE8
  181 00000034         
  182 00000034                 AREA             |.text|, CODE, READONLY
  183 00000034                 ARM
  184 00000034                 ELSE
  187                          ENDIF
  188 00000034         
  189 00000034         OSCtxSw
  190 00000034         ; SAVE CURRENT TASK'S CONTEXT
  191 00000034 E92D4000        STMFD            SP!, {LR}   ;     Push return a
                                                            ddress
  192 00000038 E92D5FFF        STMFD            SP!, {R0-R12, LR} ;     Push re
                                                            gisters
  193 0000003C E10F4000        MRS              R4,  CPSR   ;     Push current 
                                                            CPSR
  194 00000040 E31E0001        TST              LR, #1      ;     See if called
                                                             from Thumb mode
  195 00000044 13844020        ORRNE            R4,  R4, #T_BIT ;     If yes, S
                                                            et the T-bit
  196 00000048 E92D0010        STMFD            SP!, {R4}
  197 0000004C         
  198 0000004C         OSCtxSw1
  199 0000004C E59F4084        LDR              R4, OS_TCBCur ; OSTCBCur->OSTCB
                                                            StkPtr = SP;
  200 00000050 E5945000        LDR              R5, [R4]
  201 00000054 E585D000        STR              SP, [R5]
  202 00000058         
  203 00000058                 IF               (OS_TASK_SW_HOOK >= 1)
  207                          ENDIF
  208 00000058         
  209 00000058 E59F406C        LDR              R4, OS_PrioCur ; OSPrioCur = OS
                                                            PrioHighRdy
  210 0000005C E59F506C        LDR              R5, OS_PrioHighRdy
  211 00000060 E5D56000        LDRB             R6, [R5]
  212 00000064 E5C46000        STRB             R6, [R4]
  213 00000068         
  214 00000068 E59F4068        LDR              R4, OS_TCBCur ; OSTCBCur  = OST
                                                            CBHighRdy;
  215 0000006C E59F6068        LDR              R6, OS_TCBHighRdy
  216 00000070 E5966000        LDR              R6, [R6]
  217 00000074 E5846000        STR              R6, [R4]
  218 00000078         
  219 00000078         OSCtxSw2
  220 00000078         ;-------------------------------------------------------
                       --------------------------



ARM Macro Assembler    Page 6 


  221 00000078         ;LDR     SP, [R6]                ; SP = OSTCBHighRdy->OS
                       TCBStkPtr;
  222 00000078         ; RESTORE NEW TASK'S CONTEXT
  223 00000078         ;LDMFD   SP!, {R4}               ;    Pop new task's CPS
                       R
  224 00000078         ;MSR     CPSR_cxsf, R4      ; has CPSR only at SYS mode
  225 00000078         ;LDMFD   SP!, {R0-R12,LR,PC}     ;    pop new task's con
                       text
  226 00000078         ;-------------------------------------------------------
                       --------------------------
  227 00000078         
  228 00000078 E5964000        LDR              R4, [R6]    ; R4(SP) = OSTCBHig
                                                            hRdy->OSTCBStkPtr;
  229 0000007C E284D040        ADD              SP, R4, #16*4 ; Adjust SYS stac
                                                            k pointer
  230 00000080 E51DE008        LDR              LR, [SP, #-2*4] ; get new task'
                                                            s register LR_sys
  231 00000084         
  232 00000084 E321F0DB        MSR              CPSR_c, #(I_BIT | F_BIT | ARM_M
ODE_UNDEF) 
                                                            ; Switch to UNDEF m
                                                            ode
  233 00000088 E1A0D004        MOV              SP, R4
  234 0000008C         ; RESTORE NEW TASK'S CONTEXT
  235 0000008C E8BD0010        LDMFD            SP!, {R4}   ;    Pop new task's
                                                             CPSR
  236 00000090 E16FF004        MSR              SPSR_cxsf, R4 ; has SPSR only a
                                                            t UNDEF mode
  237 00000094 E8FDDFFF        LDMFD            SP!, {R0-R12,LR,PC}^ ;    pop n
                                                            ew task's context
  238 00000098         
  239 00000098         
  240 00000098         ;*******************************************************
                       **************************************************
  241 00000098         ;                   PERFORM A CONTEXT SWITCH (From inter
                       rupt level) - OSIntCtxSw()
  242 00000098         ;
  243 00000098         ; Note(s) : 1) OSIntCtxSw() is called in SYS mode with B
                       OTH FIQ and IRQ interrupts DISABLED
  244 00000098         ;
  245 00000098         ;           2) The pseudo-code for OSCtxSw() is:
  246 00000098         ;              a) OSTaskSwHook();
  247 00000098         ;              b) OSPrioCur             = OSPrioHighRdy;
                       
  248 00000098         ;              c) OSTCBCur              = OSTCBHighRdy;
  249 00000098         ;              d) SP                    = OSTCBHighRdy->
                       OSTCBStkPtr;
  250 00000098         ;              e) Restore the new task's context from th
                       e new task's stack
  251 00000098         ;              f) Return to new task's code
  252 00000098         ;
  253 00000098         ;           3) Upon entry:
  254 00000098         ;              OSTCBCur      points to the OS_TCB of the
                        task to suspend
  255 00000098         ;              OSTCBHighRdy  points to the OS_TCB of the
                        task to resume
  256 00000098         ;*******************************************************
                       **************************************************
  257 00000098                 IF               (ASM_KEILRV > 0)



ARM Macro Assembler    Page 7 


  258 00000098                 PRESERVE8
  259 00000098         
  260 00000098                 AREA             |.text|, CODE, READONLY
  261 00000098                 ARM
  262 00000098                 ELSE
  265                          ENDIF
  266 00000098         
  267 00000098         OSIntCtxSw
  268 00000098         ;*******************************************************
                       *************
  269 00000098         ; IRQ STACK <LOW> R4 R14 | SPSR R0 R1 R2 R3 R11 R12 LR(P
                       C) <HIGH>
  270 00000098         ;*******************************************************
                       *************
  271 00000098         ; SAVE TASK'S CONTEXT ONTO TASK'S STACK
  272 00000098         ;ADD SP, SP, #2*4   ; Adjust IRQ stack pointer (OSIntExi
                       t=2*4)
  273 00000098         ;LDMFD SP!, {R4, R14}   ; Restore, See OSIntExit() @ os_
                       core.c
  274 00000098         
  275 00000098 E28DD020        ADD              SP, SP, #(0+8)*4 ; Adjust IRQ s
                                                            tack pointer
  276 0000009C         ; {R4,R14}=2*4, {SPSR, R0-R3, R11, R12, LR}=8*4
  277 0000009C E24D000C        SUB              R0, SP, #3*4 ; R0->R11
  278 000000A0         
  279 000000A0 E321F0DF        MSR              CPSR_c, #(I_BIT | F_BIT | ARM_M
ODE_SYS) 
                                                            ; Switch to SYS mod
                                                            e
  280 000000A4         
  281 000000A4         
  282 000000A4 E890000E        LDMIA            R0,  {R1-R3} ; R11,R12,LR(PC)=>
                                                            R1,R2,R3
  283 000000A8 E2400014        SUB              R0,  R0, #5*4 ; Moving (SPSR, R
                                                            3-R0)
  284 000000AC E92D0008        STMFD            SP!, {R3}   ; R3(PC)=>[SP]
  285 000000B0 E92D4006        STMFD            SP!, {R1-R2, LR} ; R1(R11),R2(R
                                                            12),LR=>[SP]
  286 000000B4 E92D07F0        STMFD            SP!, {R4-R10} ; R4-R10=>[SP]
  287 000000B8         
  288 000000B8 E89001F0        LDMIA            R0,  {R4-R8} 
                                                            ; SPSR,R0-R3=>R4-R8
                                                            
  289 000000BC E92D01F0        STMFD            SP!, {R4-R8} ; R4(SPSR),R5-R8(R
                                                            0-R3)=>[SP]
  290 000000C0         
  291 000000C0 EAFFFFE1        B                OSCtxSw1
  292 000000C4         
  293 000000C4         ;*******************************************************
                       **************************************************
  294 000000C4         ;                                     POINTERS TO VARIAB
                       LES
  295 000000C4         ;*******************************************************
                       **************************************************
  296 000000C4         
  297 000000C4                 IF               (OS_TASK_SW_HOOK >= 1)
  300                          ENDIF
  301 000000C4         
  302 000000C4         OS_IntExit



ARM Macro Assembler    Page 8 


  303 000000C4 00000000        DCD              OSIntExit
  304 000000C8         
  305 000000C8         OS_IntNesting
  306 000000C8 00000000        DCD              OSIntNesting
  307 000000CC         
  308 000000CC         OS_PrioCur
  309 000000CC 00000000        DCD              OSPrioCur
  310 000000D0         
  311 000000D0         OS_PrioHighRdy
  312 000000D0 00000000        DCD              OSPrioHighRdy
  313 000000D4         
  314 000000D4         OS_Running
  315 000000D4 00000000        DCD              OSRunning
  316 000000D8         
  317 000000D8         OS_TCBCur
  318 000000D8 00000000        DCD              OSTCBCur
  319 000000DC         
  320 000000DC         OS_TCBHighRdy
  321 000000DC 00000000        DCD              OSTCBHighRdy
  322 000000E0         
  323 000000E0                 END
Command Line: --debug --xref --device=DARMP --apcs=interwork -o.\os_cpu_a.o -IE
:\安装盘\Keil\ARM\INC\Philips --list=.\os_cpu_a.lst ..\AVR\os_cpu_a.asm



ARM Macro Assembler    Page 1 Alphabetic symbol ordering
Relocatable symbols

.text 00000000

Symbol: .text
   Definitions
      At line 95 in file ..\AVR\os_cpu_a.asm
   Uses
      None
Comment: .text unused
OSCtxSw 00000034

Symbol: OSCtxSw
   Definitions
      At line 189 in file ..\AVR\os_cpu_a.asm
   Uses
      At line 54 in file ..\AVR\os_cpu_a.asm
Comment: OSCtxSw used once
OSCtxSw1 0000004C

Symbol: OSCtxSw1
   Definitions
      At line 198 in file ..\AVR\os_cpu_a.asm
   Uses
      At line 291 in file ..\AVR\os_cpu_a.asm
Comment: OSCtxSw1 used once
OSCtxSw2 00000078

Symbol: OSCtxSw2
   Definitions
      At line 219 in file ..\AVR\os_cpu_a.asm
   Uses
      At line 158 in file ..\AVR\os_cpu_a.asm
Comment: OSCtxSw2 used once
OSIntCtxSw 00000098

Symbol: OSIntCtxSw
   Definitions
      At line 267 in file ..\AVR\os_cpu_a.asm
   Uses
      At line 55 in file ..\AVR\os_cpu_a.asm
Comment: OSIntCtxSw used once
OSStartHighRdy 00000018

Symbol: OSStartHighRdy
   Definitions
      At line 133 in file ..\AVR\os_cpu_a.asm
   Uses
      At line 53 in file ..\AVR\os_cpu_a.asm
Comment: OSStartHighRdy used once
OS_CPU_SR_Restore 00000010

Symbol: OS_CPU_SR_Restore
   Definitions
      At line 109 in file ..\AVR\os_cpu_a.asm
   Uses
      At line 52 in file ..\AVR\os_cpu_a.asm
Comment: OS_CPU_SR_Restore used once
OS_CPU_SR_Save 00000000

Symbol: OS_CPU_SR_Save

⌨️ 快捷键说明

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