亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? os_cpu_a.s

?? uCOS-II向三星S3C44B0x處理器的移植源代碼.
?? S
字號:
;**********************************************************************
;****************************************************
; $Workfile:   os_cpu_a.S   for SkyEye simulator    $  
; $Revision: 1.1.1.1 $
; $Author: skyeye $
; $Email:   lmcs00;mails.tsinghua.edu.cn            $
; $Date: 2003/02/19 02:42:22 $
;****************************************************
;****************************************************
; $Workfile:   os_cpu_a.S   for SkyEye simulator    $  
; $Revision: 1.1.1.1 $
; $Author: skyeye $
; $Email:   chenyu;hpclab.cs.tsinghua.edu.cn        $
; $Email:   lmcs00;mails.tsinghua.edu.cn            $
; $Date: 2003/02/19 02:42:22 $
;****************************************************
;****************************************************
; $Workfile:   os_cpu_a.S   for SkyEye simulator    $  
; $Revision: 1.1.1.1 $
; $Author: skyeye $
; $Email:   chenyu;hpclab.cs.tsinghua.edu.cn        $
; $Email:   lmcs00;mails.tsinghua.edu.cn            $
; $Date: 2003/02/19 02:42:22 $
;****************************************************
; BASED ON
;***************************************************
; $Workfile:   Os_cpu_a.s  $
; $Revision: 1.1.1.1 $
; $Author: skyeye $
; $Date: 2003/02/19 02:42:22 $
; **************************************************

;********************************************************************/
      AREA	|subr|, CODE, READONLY

;/***********************************************************************
;
; Function: OSStartHighRdy
;
; Purpose:
; 	   To start the task with the highest priority during OS startup
;
; Processing:
;    See uC/OS-II Task Level Context Switch flow chart
;
; Parameters: void
;
; Outputs:  None
;
; Returns:  void
;
; Notes:
;   Called once during OSStart()
;
;*********************************************************************/
	EXPORT 	OSStartHighRdy
	IMPORT	OSTaskSwHook
	IMPORT  OSTCBHighRdy 
	IMPORT  OSRunning
OSStartHighRdy
        BL 	OSTaskSwHook             ; Call user-defined hook function

        LDR 	r4,=OSRunning            ; Indicate that multitasking has started
        MOV 	r5, #1                   
        STRB 	r5, [r4]                 ; OSRunning = true

        LDR 	r4, =OSTCBHighRdy        ; Get highest priority task TCB address
        LDR 	r4, [r4]                 ; get stack pointer
        LDR 	sp, [r4]                 ; switch to the new stack

; next two lines removed by YJ
;        LDMFD 	sp!, {r4}                ; pop new task s spsr_cxsf
;        MSR 	spsr_cxsf, r4
        LDMFD 	sp!, {r4}                ; pop new task s psr
        MSR 	cpsr_cxsf, r4
        LDMFD 	sp!, {r0-r12,lr,pc}      ; pop new task s r0-r12,lr & pc

 	
;/***********************************************************************
;
; Function: OS_TASK_SW 
;
; Purpose:
; 	To perform a context switch from the Task Level.
;
; Processing:
;    See uC/OS-II Task Level Context Switch flow chart
;
; Parameters: void
;
; Outputs:  None
;
; Returns:  void
;
; Notes:
;	The whole function is executed in CRITICAL state. See OSSched().
;
;   On entry, OSTCBCur and OSPrioCur hold the current TCB and priority
;   and OSTCBHighRdy and OSPrioHighRdy contain the same for the task
;   to be switched to.
; 
;   The following code assumes that the virtual memory is directly
;   mapped into  physical memory. If this is not true, the cache must 
;   be flushed at context switch to avoid address aliasing.
;
;*********************************************************************/
        EXPORT 	OSCtxSw
        IMPORT	OSPrioCur
        IMPORT	OSPrioHighRdy
        IMPORT	OSTCBCur
        IMPORT	OSTaskSwHook
        IMPORT	OSTCBHighRdy
        
OSCtxSw
        STMFD 	sp!, {lr}                ; push pc (lr is actually be pushed in place of PC)
        STMFD 	sp!, {r0-r12,lr}         ; push lr & register file

        MRS 	r4, cpsr
        STMFD 	sp!, {r4}                ; push current psr

; next two lines removed by YJ
;        MRS 	r4, spsr
;        STMFD 	sp!, {r4}                ; push current spsr_cxsf

        LDR 	r4, =OSTCBCur            ; Get current task TCB address
        LDR		r5, [r4]
        STR 	sp, [r5]                 ; store sp in preempted tasks s TCB

; OSIntCtxSw does the remainder work, so
; following removed by YJ-------------------------------------------<<
;_OSCtxSw
;		BL 	OSTaskSwHook                 ; call Task Switch Hook

;        LDR 	r5, =OSTCBHighRdy        ; Get highest priority task TCB address
;        LDR		r5, [r5]
;        STR		r5, [r4]				 ; OSTCBCur = OSTCBHighRdy
        
;        LDR 	r6, =OSPrioHighRdy       
;        LDRB 	r6, [r6]
;        LDR 	r4, =OSPrioCur           
;        STRB 	r6, [r4]				 ; OSPrioCur = OSPrioHighRdy
        
;        LDR 	sp, [r5]                 ; get new task s stack pointer

;; next two lines removed by YJ
;;        LDMFD 	sp!, {r4}                ; pop new task spsr_cxsf
;;        MSR 	spsr_cxsf, r4

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

;***********************************************************************
;
; Function: OSIntCtxSw
;
; Purpose:
; 	To perform a context switch from the interrupt level.
;
; Processing:
;    See uC/OS-II Interrupt Level Context Switch flow chart
;
; Parameters: void
;
; Outputs:  None
;
; Returns:  void
;
; Notes:
;   Sets up the stacks and registers to call the task level
;   context switch
;
;*********************************************************************/
        EXPORT 	OSIntCtxSw
;----------------------------------------------------------------
; modefied by YJ
;----------------------------------------------------------------
; added starts --------------<<
		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 r0-r12,lr & pc
; >>---------------- added ends

; removed starts ------------<<
;        IMPORT	OSIntCtxSwFlag
;OSIntCtxSw
;        LDR 	r0, =OSIntCtxSwFlag      ; OSIntCtxSwFlag = true
;        MOV 	r1, #1
;        STR 	r1, [r0]
;        
;        MOV 	pc, lr                   ; return 
; >>-------------- removed ends
;----------------------------------------------------------------
; end of modification
;----------------------------------------------------------------

;/***********************************************************************
;
;yangye 2003-2-14
;changed this function name from OSTickISR to OSISR(it is not a TICK isr)
; Function: OSISR
;
; Purpose:
; 	   The IRQ interrupt handler
;
; Processing:
;    Saves context
;    Calls the IRQ dispatcher
;    Checks if context switch necessary
;    If not, restores context and returns from interrupt
;    If switch required, branches without link to IRQContextSwap
;       which performs context switch if interrupts not nested
;       and returns from interrupt to new context
;
; Parameters: void
;
; Outputs:  None
;
; Returns:  void
;
; Notes:
;   (1) here we use OSIntCtxSwFlag to indicate a request for int-level 
;       context switch 
;   (2) _IntCtxSw is used to perform a real switch operation
;
;*********************************************************************/	

;----------------------------------------------------------------------
; modified by YJ
;----------------------------------------------------------------------
; added starts <<------------------------------------------------------
	EXPORT 	OSTickISR
	IMPORT	OSIntEnter
	IMPORT	OSTimeTick
	IMPORT	tick_hook	
	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			 ; Mask irq for context switching before 
	MSR		cpsr_cxsf, lr 			 ; 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				 ; lr = LINK_SAVE - 4,
	STR		lr, [sp, #(14*4)]			 ; 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  DmpStk
	BL	OSIntEnter
	BL 	OSTimeTick
	BL	tick_hook  	                 ; here do_IRQ is used to clear some virtual-hardware flags
	BL	OSIntExit
;	BL  DmpStk

;	LDR		r4, =OSTCBHighRdy

	LDMFD 	sp!, {r4}                ; pop new task cpsr
	MSR 	cpsr_cxsf, r4
	LDMFD 	sp!, {r0-r12,lr,pc}      ; pop new task r0-r12,lr & pc
; --------------------------------------------------------->> added ends

; removed starts <<-----------------------------------------------------
;SAVED_LR_SVC	DCD   0x00000000        ; some variables for temparal use
;SAVED_LR_IRQ	DCD   0x00000000
;SAVED_SPSR		DCD	  0x00000000

;INTPND		DCD		0x03ff4004				;IRQ controller

;	EXPORT 	OSTickISR
;	IMPORT	OSIntEnter
;	IMPORT	OSTimeTick
;	IMPORT	timer_irq
;	IMPORT	OSIntExit
;	IMPORT	OSIntCtxSwFlag
	
;OSTickISR
;	SUB		lr, lr, #4            
;	STMFD	sp!, {r0-r12, lr}        ; push r0-r12 register file and lr( pc return address )
 
;    MRS 	r4, spsr        
;	STMFD 	sp!, {r4}                ; push current spsr_cxsf_irq ( =cpsr_svc )

;	; -- identify source of interrupt .........................
;	LDR 	r0, INTPND	 
;	LDR 	r0, [r0]		
	
;	TST 	r0, #0x0400
;	BNE	handler_event_timer 		
	
;    LDMFD 	sp!, {r4}                ; get cpsr_svc from stack
;	MSR     spsr_cxsf, r4                 ; prepare spsr_cxsf to return svc mode	
;	LDMFD	sp!, {r0-r12, pc}^       ; recover r0-r12 and pc from stack, cpsr also

;handler_event_timer 

;	BL	OSIntEnter
;	BL 	OSTimeTick
;	BL	timer_irq  	                 ; here do_IRQ is used to clear some virtual-hardware flags
;	BL	OSIntExit
	
;	LDR	r0, =OSIntCtxSwFlag      ; check if OSIntCtxFlag is marked as true
;	LDR 	r1, [r0]
;	CMP	r1, #1
	
;	BEQ	_IntCtxSw	         ; if OSIntCtxFlag = true, then jump to _IntCtxSw



;_IntCtxSw
;        MOV 	r1, #0                   ; clear OSIntCtxSwFlag = flase
;        STR 	r1, [r0]
	
;       LDMFD 	sp!, {r4}                ; restore spsr_cxsf_irq 
;	MSR 	spsr_cxsf, r4 	
;    str		r4, SAVED_SPSR
;	LDMFD	sp!, {r0-r12, lr}        ; recover the irq stack pointer

;	STR	lr, SAVED_LR_IRQ         ; save lr_irq to SAVED_LR_IRQ 	
;	MOV	lr, #0x000000d3          ; change forcely cpsr to svc mode
;	MSR	cpsr_cxsf, lr	
;	STR     lr, SAVED_LR_SVC         ; save lr_svc to SAVED_LR_SVC
;	LDR	lr, SAVED_LR_IRQ         ; get lr_irq value saved in SAVED_LR_IRQ 
;	STMFD 	sp!, {lr}                ; push future task pc (lr_irq should be pushed in place of PC)
;	LDR	lr, SAVED_LR_SVC         ; get lr_svc value saved in SAVED_LR_SVC 

;        STMFD 	sp!, {r0-r12,lr}         ; push lr & r0-r12 register file
;        ldr		r4, SAVED_SPSR
;		 ;	    MRS 	r4, spsr
;        STMFD 	sp!, {r4}                ; push current psr
;		  ;     MRS 	r4, spsr
;        STMFD 	sp!, {r4}                ; push spsr_cxsf

;	B	_OSCtxSw                 ; jump to _OSCtxSw	
; --------------------------------------------------------->> removed ends
	
	
;/***********************************************************************
;
; Functions: ARMDisableInt
; 	     ARMEnableInt
;
; Purpose:
;    Disable and enable IRQ and FIQ preserving current CPU mode.
;
; Processing:
;    Push the cpsr onto the stack
;    Disable IRQ and FIQ interrupts
;    Return 
;
; Parameters: void
;
; Outputs:  None
;
; Returns:  void
;
; Notes:
;   (1) Can be called from SVC mode to protect Critical Sections. 
;   (2) Do not use these calls at interrupt level.
;   (3) Used in pairs within the same function level;
;   (4) Will restore interrupt state when called; i.e., if interrupts
;       are disabled when DisableInt is called, interrupts will still
;       still be disabled when the matching EnableInt is called.
;   (5) Uses the method described by Labrosse as "Method 2".
;
;*********************************************************************/
        EXPORT 	ARMDisableInt
ARMDisableInt
	MRS	r0, cpsr
	STMFD	sp!, {r0}	         ; push current PSR
	ORR	r0, r0, #0xC0
	MSR	cpsr_c, r0		 ; disable IRQ Int s

	MOV	pc, lr

        EXPORT 	ARMEnableInt
ARMEnableInt
	LDMFD	sp!, {r0}                ; pop current PSR
	MSR	cpsr_c, r0               ; restore original cpsr	

	MOV	pc, lr
    	

;---------------------------------------------------------------------
; function : dump stack
; Added by YJ for debug
;---------------------------------------------------------------------
		EXPORT	DmpStk
DmpStk
		LDR		r0, =Dump_Pool
		MOV		r1, sp
		MOV		r2, sp
		ADD		r2, r2, #64
DmpLoop
		LDR		r3, [r1]
		STR		r3, [r0]
		ADD		r0, r0, #4
		ADD		r1, r1, #4
		CMP		r1, r2
		BNE		DmpLoop
		MOV		pc, lr

		ALIGN
Dump_Pool	DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
			DCD		0
		END
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久一区二区视频| 97成人超碰视| 久久久久国产精品免费免费搜索| 精品一区二区三区视频在线观看| 日韩亚洲欧美在线| 国产精品综合久久| 亚洲日本乱码在线观看| 欧美日韩高清一区二区三区| 丝袜亚洲另类丝袜在线| www久久久久| 91香蕉视频黄| 蜜臀av在线播放一区二区三区| 日韩精品一区二区三区视频在线观看 | 99精品黄色片免费大全| 亚洲视频在线一区二区| 欧美精品三级日韩久久| 韩国精品主播一区二区在线观看| 国产精品久久久久久久久动漫| 在线中文字幕一区二区| 日韩专区欧美专区| 国产欧美综合在线观看第十页| 91成人免费在线视频| 美国精品在线观看| 亚洲麻豆国产自偷在线| 日韩欧美卡一卡二| 色哟哟国产精品免费观看| 日本午夜精品视频在线观看| 欧美激情综合五月色丁香小说| 欧美羞羞免费网站| 国产精品综合av一区二区国产馆| 亚洲一区二区三区美女| 久久久久久久综合狠狠综合| 欧美日韩日日夜夜| 成人av资源在线观看| 日韩成人精品在线观看| 中文字幕一区二区日韩精品绯色| 欧美精品一卡二卡| 成人免费观看视频| 蜜臀av一区二区| 亚洲一二三四久久| 国产精品污www在线观看| 91精品在线观看入口| 色狠狠综合天天综合综合| 韩国成人在线视频| 日本欧美肥老太交大片| 亚洲一区二区在线免费观看视频| 国产日本一区二区| 欧美精品一区二区在线观看| 欧美日韩精品一区二区三区四区| gogo大胆日本视频一区| 国产毛片一区二区| 精品一区二区精品| 日本最新不卡在线| 午夜电影网一区| 亚洲午夜影视影院在线观看| 国产精品你懂的| 国产午夜三级一区二区三| 91精品国产综合久久婷婷香蕉 | 欧美无砖砖区免费| 从欧美一区二区三区| 久久精品国产999大香线蕉| 五月天丁香久久| 亚洲成av人片在线观看无码| 亚洲香蕉伊在人在线观| 亚洲一区二区三区四区五区黄 | 欧美大片拔萝卜| 7777精品伊人久久久大香线蕉完整版| 99国产精品一区| 99热在这里有精品免费| 成人av网站在线| 成人国产精品免费观看| 成人一区二区视频| 99久久久久免费精品国产 | 欧美日韩国产综合视频在线观看| 欧洲亚洲国产日韩| 欧美日韩专区在线| 欧美三级视频在线| 欧美久久婷婷综合色| 91精品国产高清一区二区三区| 制服丝袜在线91| 欧美不卡在线视频| 久久亚洲一区二区三区明星换脸| 26uuu精品一区二区| 国产亚洲精久久久久久| 欧美国产日本韩| 亚洲视频电影在线| 午夜影院久久久| 免费的国产精品| 精品无人区卡一卡二卡三乱码免费卡 | 麻豆一区二区99久久久久| 美女网站一区二区| 国产伦精品一区二区三区免费 | 欧美三级欧美一级| 337p亚洲精品色噜噜噜| 欧美mv日韩mv国产网站app| 国产性天天综合网| 一区二区三区在线免费播放| 午夜精品久久久久久久99樱桃| 老司机精品视频一区二区三区| 免费精品99久久国产综合精品| 国产精品自产自拍| 色综合天天做天天爱| 91精品国产综合久久精品| 久久综合久久综合久久综合| 亚洲色图制服丝袜| 日韩精品欧美精品| 成人小视频免费观看| 欧美日韩国产另类一区| 2023国产一二三区日本精品2022| 国产精品无人区| 无码av免费一区二区三区试看| 九九热在线视频观看这里只有精品| 成人精品国产免费网站| 欧美性猛片xxxx免费看久爱| 精品国产欧美一区二区| 亚洲欧美日韩国产成人精品影院| 免费久久精品视频| 色噜噜狠狠一区二区三区果冻| 欧美一级欧美三级| 一区二区三区国产豹纹内裤在线| 久久国产福利国产秒拍| 91视视频在线观看入口直接观看www | 99久久婷婷国产综合精品| 欧美日韩三级在线| 中文字幕亚洲一区二区va在线| 日欧美一区二区| av动漫一区二区| 久久只精品国产| 日韩综合小视频| 色综合久久综合中文综合网| 久久综合给合久久狠狠狠97色69| 亚洲国产欧美一区二区三区丁香婷| 国产精品一区二区x88av| 欧美老年两性高潮| 亚洲精品视频在线观看网站| 国产一区二区三区黄视频 | 亚洲免费色视频| 国产99久久久国产精品免费看| 欧美一区二区播放| 亚洲国产中文字幕在线视频综合| 懂色av一区二区夜夜嗨| 欧美电影免费观看高清完整版在线观看 | 色综合天天综合给合国产| 久久久久久久一区| 狠狠色综合色综合网络| 日韩欧美一二三区| 日韩中文字幕亚洲一区二区va在线| 99精品热视频| 国产精品福利一区| 国产91精品久久久久久久网曝门 | 国产午夜亚洲精品午夜鲁丝片| 男男成人高潮片免费网站| 欧美日韩精品高清| 亚洲成人激情av| 91福利视频网站| 亚洲另类在线一区| 91福利区一区二区三区| 亚洲美女在线国产| thepron国产精品| 国产精品久久久一区麻豆最新章节| 极品少妇一区二区| 欧美www视频| 美女视频免费一区| 日韩欧美中文字幕公布| 美国av一区二区| 亚洲精品一区二区三区精华液 | 26uuu精品一区二区在线观看| 免费成人在线播放| 日韩精品专区在线| 国产精品一二三在| 国产精品美女久久福利网站| av亚洲产国偷v产偷v自拍| 亚洲精品中文字幕乱码三区| 色一情一伦一子一伦一区| 一区二区三区欧美视频| 欧美在线高清视频| 天天av天天翘天天综合网色鬼国产| 欧美日韩精品福利| 久88久久88久久久| 国产三级精品视频| 91麻豆蜜桃一区二区三区| 亚洲精品久久嫩草网站秘色| 欧美日韩成人一区| 黄色资源网久久资源365| 国产精品免费视频网站| 欧美在线|欧美| 久久精品国产99国产| 欧美激情一区二区在线| 在线免费观看日本欧美| 日本vs亚洲vs韩国一区三区二区| 久久综合狠狠综合| 91麻豆免费看片| 裸体歌舞表演一区二区| 国产精品色婷婷| 欧美三级一区二区| 国产精品 日产精品 欧美精品| 亚洲欧美怡红院| 91精品一区二区三区在线观看| 国产·精品毛片| 五月婷婷久久丁香|