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

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

?? os_cpu_a.s

?? ucos 在GAMEBOY上的移植
?? 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 $
;****************************************************/
;/***************************************************
; $Workfile:   Os_cpu_a.s  $
; $Revision: 1.1.1.1 $
; $Author: skyeye $
; $Date: 2003/02/19 02:42:22 $
; **************************************************/

;/***************************************************
; 代碼基本上基于uCOS-II 在skyeye ARM 系統上的移植 
; 并依照<<uC/OS-II 嵌入式實時操作系統>>規整代碼并注釋
; 
;	李強(mail2li in C51BBS)
;		mail2li@21cn.com or mail2li@163.com
;				03.11.28
; **************************************************/

;/********************************************************************/
        AREA	OSCPUASM, 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
;1. 調用OSTaskSwHook();
        BL 	OSTaskSwHook             ; Call user-defined hook function

;2.	Get the stack pointer of the task to resume: sp = OSTCBHighRdy->OSTCBStkPtr;
        LDR 	r4, =OSTCBHighRdy        ; Get highest priority task TCB address
        LDR 	r4, [r4]                 ; get stack pointer
        LDR 	sp, [r4]                 ; switch to the new stack

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

;4.5. Restore all processor registers from the new task stack	and return 
;	remove by LQ
;		LDMFD 	sp!, {r4}                ; pop new task s spsr
;		MSR 	spsr_cxsf, r4
;	remove end
        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:
;   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
	EXPORT 	OS_TASK_SW
	IMPORT	OSPrioCur
	IMPORT	OSPrioHighRdy
	IMPORT	OSTCBCur
	IMPORT	OSTaskSwHook
	IMPORT	OSTCBHighRdy

OS_TASK_SW
OSCtxSw
;1.	保存當前處理器寄存器;	<<<
		STMFD 	sp!, {lr}				; push pc 實際上push lr 是為了在pop的時候 直接獲得新pc值
		STMFD 	sp!, {r0-r12,lr}		; push lr & register file
		MRS 	r4, cpsr
		STMFD 	sp!, {r4}				; push current psr
		; move by LQ
;		MRS 	r4, spsr						
;		STMFD 	sp!, {r4}				; push current spsr
		; end of move by LQ

_OSCtxSw
;2.	將當前任務的堆棧指針保存到當前任務的OS_TCB中:OSTCBCur->OSTCBStkPtr = sp;
		LDR 	r4, =OSTCBCur		    ; Get current task TCB address
		LDR 	r5, [r4]
		STR 	sp, [r5]				 ; store sp in preempted tasks s TCB

;3.	調用用戶定義的OSTaskSwHook();
		BL 	OSTaskSwHook		     ; call Task Switch Hook

;4.	OSTCBCur  = OSTCBHighRdy;
		LDR		r4, =OSTCBHighRdy
		LDR		r4, [r4]
		LDR		r5, =OSTCBCur
		STR		r4, [r5]				 ; OSTCBCur = OSTCBHighRdy

;5.	OSPrioCur = OSPrioHighRdy;
		LDR		r6, =OSPrioHighRdy
		LDRB	r6, [r6]
		LDR		r5, =OSPrioCur
		STRB	r6, [r5]				 ; OSPrioCur = OSPrioHighRdy

;6.	得到需要恢復的任務的堆棧指針: sp = OSTCBHighRdy->OSTCBStkPtr;
		LDR 	r6, =OSTCBHighRdy		; Get highest priority task TCB address
		LDR 	r6, [r6]
		LDR 	sp, [r6]				; get new task s stack pointer

;7.8.將寄存器從新任務的堆棧中恢復出來(切換現場并return);
		; move by LQ
;		LDMFD 	sp!, {r4}				; pop new task spsr
;		MSR 	spsr_cxsf, r4
		; end of move, by LQ
		LDMFD 	sp!, {r4}				; pop new task cpsr
		MSR 	cpsr_cxsf, r4
		LDMFD 	sp!, {r0-r12,lr,pc}     ; pop new task r0-r12,lr & pc
;	end of OSCtxSw

;/***********************************************************************
;
; 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

;/*
* SAVED_LR_IRQ,SAVED_LR_USR 兩變量是用來轉存不同mode(irq,user)下arm的lr值的 
* 因為無法使用sp傳遞 有要保護寄存器 所以地址范圍只能在0x7fff范圍類 這樣就無法
* 使用data空間 所以移植的時候 必須注意這部分代碼必須放在可以讀寫的SRAM/SDRAM中
;*/

SAVED_LR_IRQ	DCD   0
SAVED_LR_USR	DCD   0
		
OSIntCtxSw        
;0. 調整OSIntCtxSw被OSIntExit調用后產生的堆棧告別 
		ADD		sp,sp,#0xC		; !!! 警告 這部分數值和編譯器很有關 這種方式也不是最好的

_OSIntCtxSw
;0. 修復ARM從IRQ模式切換為USER模式帶來的sp和lr的自動改變 希望有人能提出更好的方法 pls tell me
	    LDMFD 	sp!, {r4}               ; pop spsr_irq
		MSR 	spsr_cxsf, r4
		LDMFD	sp!, {r0-r12, lr}       ; pop r0,r1,...

		STR		lr, SAVED_LR_IRQ         ; save lr_irq to SAVED_LR_IRQ
		ADDS	pc, pc, #0x4          	 ; force change cpsr to mode before irq

		STR     lr, SAVED_LR_USR         ; save lr_svc to SAVED_LR_SVC
		LDR		lr, SAVED_LR_IRQ         ; get lr_irq (where does the irq happend or the return of pc after irq)
		STMFD 	sp!, {lr}                ; push future task pc (lr_irq should be pushed in place of PC)
		LDR		lr, SAVED_LR_USR         ; get lr_svc value saved in SAVED_LR_SVC

        STMFD 	sp!, {r0-r12,lr}         ; push lr & r0-r12 register file
        MRS 	r4, cpsr
        STMFD 	sp!, {r4}                ; push current psr
        b		_OSCtxSw

;/***********************************************************************
;base on sky version :yangye 2003-2-14 -> OSISR
;
; Function OSISR
;	
; READ FIRST:
;	be GBA bios has a irq mode handler as flow:
;	1>	push {r0-r3,r12,lr}
;	2>	call *(0x3008000-4)(void)
;	3>	pop  {r0-r3,r12,lr}
;	4>	reti 						;SPSR->CPSR
;	so I had to resume register file at first in my OSISR 
;	and then force leave irq_mode
;
; Parameters void
;
; Outputs  None
;
; Returns  void
;
; Notes
;	GBA bios use the func-pointer that save in 0x3008000-4 
;	So I save the OSISR pointer in the space in boot.s
;	the isr-func-table also useful and OSTICKIRQ is IRQ_TIMER3
;
;*********************************************************************/;
		EXPORT	OSISR
		IMPORT	OSIntEnter
		IMPORT	irq_entry
		IMPORT	OSIntExit
OSISR
	ldmfd sp!,{r0-r3,r12,lr}		; 恢復中斷發生時候現場(將GBA bios isr保護內容恢復)
;1. 保存處理器寄存器;
	SUB		lr, lr, #4				; lr-4 to push
	STMFD	sp!, {r0-r12, lr}       ; push r0-r12 register file and lr( pc return address )
    MRS 	r4, spsr
	STMFD 	sp!, {r4}               ; push current spsr_irq ( =cpsr_svc )
;2. 調用OSIntEnter() 告訴OS有中斷發生
	BL	OSIntEnter

;3. 處理中斷任務 本移植中將進入irq.c的14個中斷服務函數 其中TICK源TIMER3 需要額外多執行OSTimeTick()函數
	BL	irq_entry                   

;4. 調用OSIntExit() 告訴OS中斷完成 并且如果有必要將切換任務
	BL	OSIntExit

;5. 恢復處理器寄存器 & reti
	LDMFD 	sp!, {r4}                ; get cpsr_svc from stack
	MSR     spsr_cxsf, r4            ; prepare spsr to return svc mode
	LDMFD	sp!, {r0-r12, pc}^       ; reti it make spsr --> cpsr


;/***********************************************************************
;
; 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".
;
;*********************************************************************/

;/*
;
; 對GBA將REG_IME寫○也可以停止全局中斷 不過代碼長度和關閉CPSR的中斷位相等
;
;*/
	EXPORT 	ARMDisableInt

ARMDisableInt
	MRS	r0, cpsr
	STMFD	sp!, {r0}	         ; push current PSR
	ORR	r0, r0, #0x80
	MSR	cpsr_cxsf, 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
    ;------------------------------------------------------------------------

	END	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91超碰这里只有精品国产| 色噜噜狠狠色综合欧洲selulu| 国产精品天干天干在线综合| 欧美日韩一区在线| 国产高清久久久| 日本一道高清亚洲日美韩| 中文字幕制服丝袜成人av | 久久色中文字幕| 色婷婷精品久久二区二区蜜臀av| 日本午夜一本久久久综合| 中文字幕制服丝袜成人av| 欧美岛国在线观看| 精品视频资源站| 91在线国产福利| 国产电影精品久久禁18| 日韩在线a电影| 亚洲最大的成人av| 国产精品久久久久久久浪潮网站| 日韩午夜在线播放| 欧美三级蜜桃2在线观看| 不卡一区中文字幕| 国产成人午夜视频| 久久草av在线| 麻豆精品国产91久久久久久| 一区二区三国产精华液| 国产精品视频一二三区| www成人在线观看| 日韩免费在线观看| 制服丝袜在线91| 88在线观看91蜜桃国自产| 色哟哟在线观看一区二区三区| 成人小视频免费观看| 国产毛片一区二区| 国产成人在线色| 国产精品888| 国产精品一区二区在线播放 | 久久成人久久鬼色| 日韩av中文在线观看| 午夜国产精品一区| 三级欧美在线一区| 日韩影视精彩在线| 日本成人中文字幕在线视频| 日本欧美加勒比视频| 热久久久久久久| 奇米四色…亚洲| 韩国精品主播一区二区在线观看| 日本美女一区二区三区视频| 欧美aaaaaa午夜精品| 麻豆一区二区99久久久久| 日本韩国欧美在线| 欧美性大战xxxxx久久久| 欧美羞羞免费网站| 在线不卡的av| 精品国产污污免费网站入口 | 国产精品羞羞答答xxdd| 高清成人在线观看| 97se亚洲国产综合在线| 91福利视频在线| 欧美日韩成人一区二区| 日韩欧美国产一区在线观看| 精品国产污污免费网站入口 | 国产亚洲精品资源在线26u| 欧美激情中文不卡| 亚洲人成亚洲人成在线观看图片| 亚洲免费av观看| 丝袜美腿亚洲综合| 国产麻豆午夜三级精品| 91免费国产视频网站| 欧美日本在线观看| 欧美精品一区二区在线观看| 国产欧美精品一区| 亚洲一区二区美女| 麻豆成人综合网| a美女胸又www黄视频久久| 欧美日韩精品一区二区天天拍小说| 欧美一级理论片| 国产精品欧美一级免费| 亚洲国产裸拍裸体视频在线观看乱了 | 久久久久国产精品厨房| 中文字幕日韩一区二区| 婷婷六月综合亚洲| 成人精品在线视频观看| 欧美在线免费播放| 精品国产免费一区二区三区香蕉| 国产精品超碰97尤物18| 免费成人美女在线观看.| 不卡一区二区在线| 欧美一区二区三区播放老司机| 欧美激情在线观看视频免费| 亚洲最色的网站| 国产精品一品二品| 欧美日韩一级视频| 日本一区二区三区四区在线视频 | 国产精品77777| 欧美写真视频网站| 国产免费观看久久| 日本v片在线高清不卡在线观看| 成人在线视频一区二区| 91精品国产综合久久福利| 国产精品久久久久久久久免费樱桃 | 日韩精品资源二区在线| 一区二区三区国产精品| 高清不卡在线观看av| 欧美一区二区成人| 一区二区三区国产| jlzzjlzz欧美大全| 精品国产青草久久久久福利| 五月天网站亚洲| 91麻豆产精品久久久久久| 久久日韩粉嫩一区二区三区| 视频在线在亚洲| 欧洲生活片亚洲生活在线观看| 欧美国产成人精品| 久久99久久久欧美国产| 欧美精品v日韩精品v韩国精品v| 国产精品久久久久久户外露出| 久久99九九99精品| 欧美久久一区二区| 亚洲伊人色欲综合网| www.爱久久.com| 欧美激情一区二区| 国产一区高清在线| 精品人在线二区三区| 日韩经典中文字幕一区| 欧美日韩成人综合天天影院| 亚洲一区在线观看视频| 91国模大尺度私拍在线视频| 亚洲免费在线电影| 91天堂素人约啪| 亚洲欧洲av在线| caoporm超碰国产精品| 国产精品久久久久aaaa樱花| 成人亚洲一区二区一| 国产清纯美女被跳蛋高潮一区二区久久w | 99久久婷婷国产精品综合| 国产精品美女久久久久久久| 成人激情小说乱人伦| 国产精品毛片久久久久久久| 丁香婷婷综合激情五月色| 国产精品天干天干在线综合| 成人午夜精品在线| 一区在线观看视频| 色综合久久久久| 亚洲制服丝袜av| 欧美美女激情18p| 日韩成人免费电影| 精品国产露脸精彩对白| 国产美女久久久久| 欧美国产日产图区| 99久久久国产精品| 亚洲一区二区四区蜜桃| 欧美日韩高清一区二区不卡| 青青草91视频| 久久精品在线免费观看| av激情成人网| 亚洲激情成人在线| 88在线观看91蜜桃国自产| 老司机精品视频导航| 久久亚洲私人国产精品va媚药| 国产不卡免费视频| 亚洲女同ⅹxx女同tv| 欧美日韩国产免费一区二区| 久久精品免费看| 国产目拍亚洲精品99久久精品| 成人99免费视频| 亚洲mv在线观看| 精品国产3级a| 一本大道综合伊人精品热热| 午夜精品123| 久久久国产精品午夜一区ai换脸| 99久久综合狠狠综合久久| 亚洲一区二区在线免费观看视频 | 国产河南妇女毛片精品久久久| 国产精品国产三级国产aⅴ原创| 色综合天天综合狠狠| 日本在线观看不卡视频| 中文字幕精品三区| 欧美日韩电影在线| 成人免费高清在线| 视频一区二区不卡| 国产精品午夜久久| 9191成人精品久久| 成人av中文字幕| 日本美女视频一区二区| 成人免费在线视频| 日韩色视频在线观看| 成人av免费网站| 麻豆精品国产传媒mv男同| 1区2区3区欧美| 欧美va天堂va视频va在线| 91香蕉视频污| 国产一区二三区| 亚洲不卡在线观看| 日本一区二区三区在线观看| 欧美久久久久久蜜桃| 色综合天天综合网国产成人综合天| 精油按摩中文字幕久久| 一区二区在线观看视频 | 精品成人私密视频| 国产精品理伦片|