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

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

?? os_cpu_a.s

?? 基于S3C44B0X的ucosii,穩定版 基于S3C44B0X的ucosii,穩定版
?? 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	OSTimeTickHook	
	IMPORT	OSIntExit
	
	
;-------------test code added by cyh start 60919
;	IMPORT	test_fuc
;-------------test code added by cyh end

LINK_SAVE	DCD		0
PSR_SAVE	DCD		0

OSTickISR
	EXPORT	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
;-------------test code added by cyh start 60919
;	BL	test_fuc
;-------------test code added by cyh end
	
	BL	OSTimeTickHook
;	BL  DmpStk
	BL	OSIntEnter
	BL 	OSTimeTick
	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
	STMFD	sp!, {r0}	
	MRS	r0, cpsr
	ORR	r0, r0, #0xC0
	MSR	cpsr_c, r0		 ; disable IRQ Int s
	LDMIA	sp!, {r0}
	MOV	pc, lr

        EXPORT 	ARMEnableInt
ARMEnableInt
	STMDB	sp!, {r0}
	MRS	r0, CPSR
	BIC r0, r0, #0x80
	MSR	CPSR_c, r0
	LDMIA	sp!, {r0}
	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一区二区三区免费野_久草精品视频
国产精品网站在线播放| 欧美久久高跟鞋激| 亚洲一二三四区| 久久色视频免费观看| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲成年人网站在线观看| 久久久久久久国产精品影院| 91一区在线观看| 亚洲精选一二三| 色婷婷精品大视频在线蜜桃视频| 1024成人网| 欧美二区乱c少妇| 亚洲成人av在线电影| 国产精品久久久99| 久久久蜜桃精品| 色哟哟亚洲精品| 成人精品电影在线观看| 免费黄网站欧美| 亚洲韩国精品一区| 一区二区三区鲁丝不卡| 国产日韩欧美麻豆| 欧美亚洲丝袜传媒另类| 丁香婷婷综合色啪| 国内精品久久久久影院薰衣草 | 麻豆成人av在线| 国产精品综合av一区二区国产馆| 亚洲gay无套男同| **网站欧美大片在线观看| 精品处破学生在线二十三| 欧美日韩中文字幕一区| 99视频一区二区| 丁香激情综合五月| 国产在线不卡一区| 久久成人av少妇免费| 奇米色777欧美一区二区| 偷拍亚洲欧洲综合| 亚洲综合999| 亚洲午夜久久久久久久久电影网| 亚洲一区二区三区在线| 一区二区国产视频| 亚洲精品国产无天堂网2021| 国产精品国产a级| 亚洲素人一区二区| 亚洲精品高清在线| 亚洲狠狠爱一区二区三区| 一区二区三区毛片| 中文字幕亚洲区| 亚洲同性同志一二三专区| 亚洲丝袜制服诱惑| 亚洲黄色性网站| 一区二区三区在线播| 国产精品久久久久影视| 亚洲精品免费一二三区| 一区二区三区高清在线| 一区二区三区在线观看视频| 亚洲国产一区二区视频| 午夜精品福利一区二区三区av | 欧美成人女星排行榜| 91九色最新地址| 欧美视频一区二区| 日韩欧美成人午夜| 久久久亚洲综合| 最新不卡av在线| 亚洲成人精品一区二区| 久久99精品国产麻豆婷婷| 国产91清纯白嫩初高中在线观看| 成人性生交大片| 色国产精品一区在线观看| 欧美日韩久久一区| 欧美www视频| 国产精品久久久久影院| 亚洲va欧美va天堂v国产综合| 日韩高清不卡在线| 国产麻豆精品久久一二三| 91丨国产丨九色丨pron| 91精品国产综合久久小美女| 精品国产三级电影在线观看| 国产精品久线在线观看| 亚洲国产综合91精品麻豆| 国内精品国产成人国产三级粉色| jizz一区二区| 久久99热这里只有精品| 丝袜亚洲另类丝袜在线| 国产一区在线观看麻豆| 日本高清不卡一区| 欧美一级高清片| 亚洲视频一区二区在线| 秋霞影院一区二区| 成人综合婷婷国产精品久久免费| 中文字幕在线观看一区二区| 国产精品乱人伦| 亚洲一区在线视频| 国产成人精品免费在线| 一本色道久久综合精品竹菊| 欧美美女激情18p| 国产亚洲1区2区3区| 一区二区在线观看不卡| 精品亚洲国内自在自线福利| 91在线高清观看| 欧美va亚洲va香蕉在线| 亚洲精品菠萝久久久久久久| 裸体一区二区三区| 在线一区二区三区四区五区| 精品精品国产高清一毛片一天堂| 中文字幕一区在线观看| 亚洲第一福利一区| 成人免费毛片a| 欧美变态凌虐bdsm| 91在线看国产| 另类小说一区二区三区| 日韩三级中文字幕| 岛国一区二区在线观看| 天天操天天综合网| 久久精品视频免费观看| 精品在线播放免费| 久久91精品国产91久久小草| 91在线国内视频| 中文字幕一区二区三区乱码在线| 久久91精品国产91久久小草| 亚洲男人电影天堂| 国产精品久久久一区麻豆最新章节| 日韩专区一卡二卡| 麻豆91在线看| 欧美狂野另类xxxxoooo| 亚洲激情在线激情| 成人午夜视频免费看| 2023国产精品| 久久精品国产亚洲a| 欧美高清性hdvideosex| 国产精品色眯眯| 2023国产一二三区日本精品2022| 日本不卡一二三区黄网| 91精品国产入口| 午夜视频在线观看一区| 欧美日韩精品一区二区三区| 亚洲精品国产精品乱码不99 | 亚洲一区二区三区国产| 99久久99久久免费精品蜜臀| 日本一区二区电影| av网站免费线看精品| 亚洲国产精品av| 91在线一区二区三区| 亚洲综合图片区| 在线亚洲一区二区| 亚洲亚洲人成综合网络| 欧美疯狂性受xxxxx喷水图片| 亚洲大片免费看| 欧美一级二级三级蜜桃| 国产乱淫av一区二区三区 | 久久亚洲私人国产精品va媚药| 久久se精品一区精品二区| 精品99999| 成人99免费视频| 亚洲一二三四在线观看| 69堂国产成人免费视频| 麻豆精品国产91久久久久久| 久久奇米777| 成人午夜短视频| 一区二区三区四区不卡视频 | 国产精品视频看| 在线一区二区三区做爰视频网站| 亚洲1区2区3区视频| 日韩免费电影一区| www.视频一区| 午夜精品久久久久久| 精品国产a毛片| 91天堂素人约啪| 奇米色777欧美一区二区| 国产日韩欧美精品一区| 日本丶国产丶欧美色综合| 日韩电影在线观看网站| 亚洲国产精品高清| 欧美挠脚心视频网站| 国产乱码精品一区二区三区五月婷 | 亚洲一区二区三区国产| 精品人伦一区二区色婷婷| 91亚洲男人天堂| 麻豆精品蜜桃视频网站| 国产清纯白嫩初高生在线观看91 | 正在播放亚洲一区| 国产综合色产在线精品| 亚洲欧美乱综合| 26uuu亚洲| 91福利在线观看| 国产一区二区电影| 一区二区成人在线| 国产欧美一区在线| 欧美一区二区视频免费观看| 国产高清在线观看免费不卡| 亚洲综合色网站| 国产精品欧美极品| 日韩一区二区影院| 91麻豆国产自产在线观看| 日本不卡一区二区三区| 亚洲视频电影在线| 国产欧美日韩麻豆91| 日韩美女视频一区二区在线观看| 色综合视频在线观看| 国产麻豆午夜三级精品| 蜜臀av一区二区在线观看|