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

📄 os_cpu_a.lst

📁 uCOSKeillpc22xx系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
  187 00000058         ; RESTORE NEW TASK'S CONTEXT
  188 00000058 E8BD0010        LDMFD            SP!, {R4}   ;    Pop new task's
                                                             CPSR
  189 0000005C E16FF004        MSR              SPSR_cxsf, R4
  190 00000060         
  191 00000060 E8FDDFFF        LDMFD            SP!, {R0-R12,LR,PC}^ ;    Pop n
                                                            ew task's context
  192 00000064         
  193 00000064         
  194 00000064         ;*******************************************************
                       **************************************************
  195 00000064         ;                   PERFORM A CONTEXT SWITCH (From inter
                       rupt level) - OSIntCtxSw()
  196 00000064         ;
  197 00000064         ; Note(s) : 1) OSIntCtxSw() is called in SYS mode with B
                       OTH FIQ and IRQ interrupts DISABLED
  198 00000064         ;
  199 00000064         ;           2) The pseudo-code for OSCtxSw() is:
  200 00000064         ;              a) OSTaskSwHook();
  201 00000064         ;              b) OSPrioCur             = OSPrioHighRdy;
                       
  202 00000064         ;              c) OSTCBCur              = OSTCBHighRdy;
  203 00000064         ;              d) SP                    = OSTCBHighRdy->
                       OSTCBStkPtr;
  204 00000064         ;              e) Restore the new task's context from th
                       e new task's stack
  205 00000064         ;              f) Return to new task's code
  206 00000064         ;
  207 00000064         ;           3) Upon entry:
  208 00000064         ;              OSTCBCur      points to the OS_TCB of the
                        task to suspend
  209 00000064         ;              OSTCBHighRdy  points to the OS_TCB of the



ARM Macro Assembler    Page 6 


                        task to resume
  210 00000064         ;*******************************************************
                       **************************************************
  211 00000064         
  212 00000064                 AREA             OSIntCtxSw_CODE32, CODE, READON
LY
  213 00000000                 ARM
  214 00000000         
  215 00000000         OSIntCtxSw
  216 00000000 E51F0008        LDR              R0, OS_TaskSwHook 
                                                            ; OSTaskSwHook();
  217 00000004 E1A0E00F        MOV              LR, PC
  218 00000008 E12FFF10        BX               R0
  219 0000000C         
  220 0000000C E51F4008        LDR              R4,OS_PrioCur ; OSPrioCur = OSP
                                                            rioHighRdy
  221 00000010 E51F5008        LDR              R5,OS_PrioHighRdy
  222 00000014 E5D56000        LDRB             R6,[R5]
  223 00000018 E5C46000        STRB             R6,[R4]
  224 0000001C         
  225 0000001C E51F4008        LDR              R4,OS_TCBCur ; OSTCBCur  = OSTC
                                                            BHighRdy;
  226 00000020 E51F6008        LDR              R6,OS_TCBHighRdy
  227 00000024 E5966000        LDR              R6,[R6]
  228 00000028 E5846000        STR              R6,[R4]
  229 0000002C         
  230 0000002C E596D000        LDR              SP,[R6]     ; SP = OSTCBHighRdy
                                                            ->OSTCBStkPtr;
  231 00000030         
  232 00000030         ; RESTORE NEW TASK'S CONTEXT
  233 00000030 E8BD0010        LDMFD            SP!, {R4}   ;    Pop new task's
                                                             CPSR
  234 00000034 E16FF004        MSR              SPSR_cxsf, R4
  235 00000038         
  236 00000038 E8FDDFFF        LDMFD            SP!, {R0-R12,LR,PC}^ ;    Pop n
                                                            ew task's context
  237 0000003C         
  238 0000003C         
  239 0000003C         ;*******************************************************
                       **************************************************
  240 0000003C         ;                                      IRQ Interrupt Ser
                       vice Routine
  241 0000003C         ;*******************************************************
                       **************************************************
  242 0000003C         
  243 0000003C                 AREA             OS_CPU_IRQ_ISR_CODE32, CODE, RE
ADONLY
  244 00000000                 ARM
  245 00000000         
  246 00000000         OS_CPU_IRQ_ISR
  247 00000000         
  248 00000000 E92D000E        STMFD            SP!, {R1-R3} ; PUSH WORKING REG
                                                            ISTERS ONTO IRQ STA
                                                            CK
  249 00000004         
  250 00000004 E1A0100D        MOV              R1, SP      ; Save   IRQ stack 
                                                            pointer
  251 00000008         
  252 00000008 E28DD00C        ADD              SP, SP,#12  ; Adjust IRQ stack 



ARM Macro Assembler    Page 7 


                                                            pointer
  253 0000000C         
  254 0000000C E24E2004        SUB              R2, LR,#4   ; Adjust PC for ret
                                                            urn address to task
                                                            
  255 00000010         
  256 00000010 E14F3000        MRS              R3, SPSR    ; Copy SPSR (i.e. i
                                                            nterrupted task's C
                                                            PSR) to R3
  257 00000014         
  258 00000014 E321F0D3        MSR              CPSR_c, #(NO_INT | SVC32_MODE) 
                                                            ; Change to SVC mod
                                                            e
  259 00000018         
  260 00000018         ; SAVE TASK'S CONTEXT ONTO TASK'S STACK
  261 00000018 E92D0004        STMFD            SP!, {R2}   ;    Push task's Re
                                                            turn PC
  262 0000001C E92D4000        STMFD            SP!, {LR}   ;    Push task's LR
                                                            
  263 00000020 E92D1FF0        STMFD            SP!, {R4-R12} ;    Push task's 
                                                            R12-R4
  264 00000024         
  265 00000024 E8B10070        LDMFD            R1!, {R4-R6} ;    Move task's R
                                                            1-R3 from IRQ stack
                                                             to SVC stack
  266 00000028 E92D0070        STMFD            SP!, {R4-R6}
  267 0000002C E92D0001        STMFD            SP!, {R0}   ;    Push task's R0
                                                                onto task's sta
                                                            ck
  268 00000030 E92D0008        STMFD            SP!, {R3}   ;    Push task's CP
                                                            SR (i.e. IRQ's SPSR
                                                            )
  269 00000034         
  270 00000034         ; HANDLE NESTING COUNTER
  271 00000034 E59F0054        LDR              R0, OS_IntNesting 
                                                            ; OSIntNesting++;
  272 00000038 E5D01000        LDRB             R1, [R0]
  273 0000003C E2811001        ADD              R1, R1,#1
  274 00000040 E5C01000        STRB             R1, [R0]
  275 00000044         
  276 00000044 E3510001        CMP              R1, #1      ; if (OSIntNesting 
                                                            == 1) {
  277 00000048 1A000002        BNE              OS_CPU_IRQ_ISR_1
  278 0000004C         
  279 0000004C E59F404C        LDR              R4, OS_TCBCur ;     OSTCBCur->O
                                                            STCBStkPtr = SP
  280 00000050 E5945000        LDR              R5, [R4]
  281 00000054 E585D000        STR              SP, [R5]    ; }
  282 00000058         
  283 00000058         OS_CPU_IRQ_ISR_1
  284 00000058 E321F0D2        MSR              CPSR_c, #(NO_INT | IRQ32_MODE) 
                                                            ; Change to IRQ mod
                                                            e (to use the IRQ s
                                                            tack to handle inte
                                                            rrupt)
  285 0000005C         
  286 0000005C E59F0024        LDR              R0, OS_CPU_IRQ_ISR_Handler ; OS
                                                            _CPU_IRQ_ISR_Handle
                                                            r();



ARM Macro Assembler    Page 8 


  287 00000060 E1A0E00F        MOV              LR, PC
  288 00000064 E12FFF10        BX               R0
  289 00000068         
  290 00000068 E321F0D3        MSR              CPSR_c, #(NO_INT | SVC32_MODE) 
                                                            ; Change to SVC mod
                                                            e
  291 0000006C         
  292 0000006C E59F0018        LDR              R0, OS_IntExit ; OSIntExit();
  293 00000070 E1A0E00F        MOV              LR, PC
  294 00000074 E12FFF10        BX               R0
  295 00000078         
  296 00000078         ; RESTORE NEW TASK'S CONTEXT
  297 00000078 E8BD0010        LDMFD            SP!, {R4}   ;    Pop new task's
                                                             CPSR
  298 0000007C E16FF004        MSR              SPSR_cxsf, R4
  299 00000080         
  300 00000080 E8FDDFFF        LDMFD            SP!, {R0-R12,LR,PC}^ ;    Pop n
                                                            ew task's context
  301 00000084         
  302 00000084         
  303 00000084         
  304 00000084         ;*******************************************************
                       **************************************************
  305 00000084         ;                                     POINTERS TO VARIAB
                       LES
  306 00000084         ;*******************************************************
                       **************************************************
  307 00000084         
  308 00000084         
  309 00000084         OS_TaskSwHook
  310 00000084 00000000        DCD              OSTaskSwHook
  311 00000088         
  312 00000088         OS_CPU_IRQ_ISR_Handler
  313 00000088 00000000        DCD              Timer0_Exception
  314 0000008C         
  315 0000008C         
  316 0000008C         OS_IntExit
  317 0000008C 00000000        DCD              OSIntExit
  318 00000090         
  319 00000090         OS_IntNesting
  320 00000090 00000000        DCD              OSIntNesting
  321 00000094         
  322 00000094         OS_PrioCur
  323 00000094 00000000        DCD              OSPrioCur
  324 00000098         
  325 00000098         OS_PrioHighRdy
  326 00000098 00000000        DCD              OSPrioHighRdy
  327 0000009C         
  328 0000009C         OS_Running
  329 0000009C 00000000        DCD              OSRunning
  330 000000A0         
  331 000000A0         OS_TCBCur
  332 000000A0 00000000        DCD              OSTCBCur
  333 000000A4         
  334 000000A4         OS_TCBHighRdy
  335 000000A4 00000000        DCD              OSTCBHighRdy
  336 000000A8         
  337 000000A8                 END
Command Line: --debug --xref --device=DARMP --apcs=interwork -oos_cpu_a.o -IC:\



ARM Macro Assembler    Page 9 


Keil\ARM\INC\Philips --list=.\os_cpu_a.lst Port\os_cpu_a.s



ARM Macro Assembler    Page 1 Alphabetic symbol ordering
Relocatable symbols

OS_CPU_SR_CODE32 00000000

Symbol: OS_CPU_SR_CODE32
   Definitions
      At line 80 in file Port\os_cpu_a.s
   Uses
      None
Comment: OS_CPU_SR_CODE32 unused
OS_CPU_SR_Restore 00000020

Symbol: OS_CPU_SR_Restore
   Definitions
      At line 94 in file Port\os_cpu_a.s
   Uses
      At line 31 in file Port\os_cpu_a.s
Comment: OS_CPU_SR_Restore used once
OS_CPU_SR_Save 00000000

Symbol: OS_CPU_SR_Save
   Definitions
      At line 83 in file Port\os_cpu_a.s
   Uses
      At line 30 in file Port\os_cpu_a.s
      At line 90 in file Port\os_cpu_a.s

3 symbols



ARM Macro Assembler    Page 1 Alphabetic symbol ordering
Relocatable symbols

OSStartHighRdy 00000000

Symbol: OSStartHighRdy
   Definitions
      At line 112 in file Port\os_cpu_a.s
   Uses
      At line 32 in file Port\os_cpu_a.s
Comment: OSStartHighRdy used once
OSStartHighRdy_CODE32 00000000

Symbol: OSStartHighRdy_CODE32
   Definitions
      At line 109 in file Port\os_cpu_a.s
   Uses
      None
Comment: OSStartHighRdy_CODE32 unused
2 symbols



ARM Macro Assembler    Page 1 Alphabetic symbol ordering

⌨️ 快捷键说明

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