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

📄 os_cpu_a.s

📁 ucos-II2.51在S3C44B0X上的移植 开发环境:SDT2.50 实验板:ES44BO
💻 S
字号:
            AREA	|subr|, CODE, READONLY
  EXPORT OSStartHighRdy  
  IMPORT OSTaskSwHook  
  IMPORT OSTCBHighRdy 
  IMPORT OSRunning 

OSStartHighRdy

  BL OSTaskSwHook 
  LDR r4,=OSRunning              
  MOV r5, #1 
  STRB r5, [r4] 
  LDR r4, =OSTCBHighRdy            
  LDR r4, [r4]                     
  LDR sp, [r4]                    
  LDMFD sp!, {r4}                 
  MSR cpsr_cxsf, r4               
  LDMFD sp!, {r0-r12,lr,pc}        

  EXPORT OSCtxSw
  IMPORT OSPrioCur
  IMPORT OSPrioHighRdy
  IMPORT OSTCBCur
  IMPORT OSTaskSwHook
  IMPORT OSTCBHighRdy

OSCtxSw
  
   STMFD sp!, {lr}        ;push pc
   STMFD sp!, {r0-r12,lr}   ;push lr &register file

   MRS r4, cpsr           
   STMFD sp!, {r4}          ;push  current psr
   
   LDR r4, =OSTCBCur     
   LDR r5, [r4]          
   STR sp, [r5]             ;store sp in preempted tasks's TCB

; *****OSCtxSw OSIntCtxSw*****

  EXPORT OSIntCtxSw 
  IMPORT OSTaskSwHook

OSIntCtxSw

  BL OSTaskSwHook   
           
  LDR r4, =OSTCBHighRdy   
  LDR r4, [r4]                    
  LDR r5, =OSTCBCur
  STR r4, [r5]           ;OSTCBCur=OSTCBHighRdy
                
  LDR r6, =OSPrioHighRdy            
  LDRB r6, [r6]           
  LDR r5, =OSPrioCur
  STRB r6, [r5]            ;OSPrioCur=OSPrioHighRdy
        
  LDR sp, [r4]             
  LDMFD sp!, {r4}          ;pop new task cpsr      
  MSR cpsr_cxsf, r4            
  LDMFD sp!, {r0-r12,lr,pc}   ;pop new task ro-r12,lr&pc    

; *****OSTickISR*****

  EXPORT OSTickISR
  IMPORT OSIntEnter
  IMPORT OSTimeTick
  IMPORT OSIntExit
LINK_SAVE	DCD		0
PSR_SAVE 	DCD		0


OSTickISR 

  STMFD sp!, {r4}       

  LDR r4, =LINK_SAVE    
  STR lr, [r4]         ;LINK_SAVE=lr_irq

  MRS lr, spsr 
  STR lr, [r4, #4]       ;PSR_SAVE=spsr_irq

  LDMFD sp!, {r4} 

  ORR lr, lr, #0x80         
  MSR cpsr_cxsf, lr      ;Mask irq for context switching before returning back from irq mode  

  SUB sp, sp, #4 ;        ;Space for PC
  STMFD sp!, {r0-r12,lr}

  LDR r4, =LINK_SAVE 
  LDR lr, [r4, #0]
  SUB lr, lr, #4           ;PC=LINK_SAVE-4
  STR lr, [sp, #(14*4)]    ;SAVE PC  the return address for pc

  LDR r4, [r4, #4]         ;r4=PSR_SAVE
  STMFD sp!, {r4}           ;cpsr of the task

  LDR r4, =OSTCBCur 
  LDR r4, [r4] 
  STR sp, [r4]             ;OSTCBCur->stkptr=sp

  BL OSIntEnter 
  BL OSTimeTick 
  BL OSIntExit 

  LDMFD sp!, {r4}         ;pop current task cpsr
  MSR cpsr_cxsf, r4 
  LDMFD sp!, {r0-r12,lr,pc}     ;pop current task r0-r12,lr&pc



   EXPORT ARMDisableInt
ARMDisableInt
  MRS r0, cpsr 
  STMFD sp!, {r0} 
  ORR r0, r0, #0xc0 
  MSR cpsr_c, r0 
  MOV pc, lr 

  EXPORT ARMEnableInt
ARMEnableInt 
  LDMFD sp!, {r0} 
  MSR cpsr_c, r0 
  MOV pc, lr 
  END 

⌨️ 快捷键说明

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